diff --git a/README-zh.md b/README-zh.md
index 00a7ef1a24..e3ac58fb93 100644
--- a/README-zh.md
+++ b/README-zh.md
@@ -65,7 +65,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
+# 引入 Docsy 子模块
git submodule update --init --recursive --depth 1
```
@@ -113,7 +113,7 @@ Hugo 扩展版本。
若要在本地构造和测试网站,请运行:
```bash
-# install dependencies
+# 安装依赖
npm ci
make serve
```
diff --git a/content/en/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md b/content/en/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md
index 38fd24372c..4c9af11a9e 100644
--- a/content/en/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md
+++ b/content/en/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md
@@ -41,7 +41,7 @@ These repo labels let reviewers filter for PRs and issues by language. For examp
### Team review
-L10n teams can now review and approve their own PRs. For example, review and approval permissions for English are [assigned in an OWNERS file](https://github.com/kubernetes/website/blob/master/content/en/OWNERS) in the top subfolder for English content.
+L10n teams can now review and approve their own PRs. For example, review and approval permissions for English are [assigned in an OWNERS file](https://github.com/kubernetes/website/blob/main/content/en/OWNERS) in the top subfolder for English content.
Adding `OWNERS` files to subdirectories lets localization teams review and approve changes without requiring a rubber stamp approval from reviewers who may lack fluency.
diff --git a/content/en/blog/_posts/2019-04-26-latest-on-localization.md b/content/en/blog/_posts/2019-04-26-latest-on-localization.md
index 8e6176a8ce..98f1d74706 100644
--- a/content/en/blog/_posts/2019-04-26-latest-on-localization.md
+++ b/content/en/blog/_posts/2019-04-26-latest-on-localization.md
@@ -8,7 +8,7 @@ date: 2019-04-26
Last year we optimized the Kubernetes website for [hosting multilingual content](/blog/2018/11/08/kubernetes-docs-updates-international-edition/). Contributors responded by adding multiple new localizations: as of April 2019, Kubernetes docs are partially available in nine different languages, with six added in 2019 alone. You can see a list of available languages in the language selector at the top of each page.
-By _partially available_, I mean that localizations are ongoing projects. They range from mostly complete ([Chinese docs for 1.12](https://v1-12.docs.kubernetes.io/zh/)) to brand new (1.14 docs in [Portuguese](https://kubernetes.io/pt/)). If you're interested in helping an existing localization, read on!
+By _partially available_, I mean that localizations are ongoing projects. They range from mostly complete ([Chinese docs for 1.12](https://v1-12.docs.kubernetes.io/zh-cn/)) to brand new (1.14 docs in [Portuguese](https://kubernetes.io/pt/)). If you're interested in helping an existing localization, read on!
## What is a localization?
diff --git a/content/en/blog/_posts/2020-09-03-warnings/index.md b/content/en/blog/_posts/2020-09-03-warnings/index.md
index 082aa72f6f..a5cfb9f710 100644
--- a/content/en/blog/_posts/2020-09-03-warnings/index.md
+++ b/content/en/blog/_posts/2020-09-03-warnings/index.md
@@ -60,7 +60,7 @@ so we added two administrator-facing tools to help track use of deprecated APIs
Starting in Kubernetes v1.19, when a request is made to a deprecated REST API endpoint,
an `apiserver_requested_deprecated_apis` gauge metric is set to `1` in the kube-apiserver process.
This metric has labels for the API `group`, `version`, `resource`, and `subresource`,
-and a `removed_version` label that indicates the Kubernetes release in which the API will no longer be served.
+and a `removed_release` label that indicates the Kubernetes release in which the API will no longer be served.
This is an example query using `kubectl`, [prom2json](https://github.com/prometheus/prom2json),
and [jq](https://stedolan.github.io/jq/) to determine which deprecated APIs have been requested
@@ -169,7 +169,7 @@ You can also find that information through the following Prometheus query,
which returns information about requests made to deprecated APIs which will be removed in v1.22:
```promql
-apiserver_requested_deprecated_apis{removed_version="1.22"} * on(group,version,resource,subresource)
+apiserver_requested_deprecated_apis{removed_release="1.22"} * on(group,version,resource,subresource)
group_right() apiserver_request_total
```
diff --git a/content/en/blog/_posts/2021-04-22-gateway-api/index.md b/content/en/blog/_posts/2021-04-22-gateway-api/index.md
index c22d45cdbb..145554803d 100644
--- a/content/en/blog/_posts/2021-04-22-gateway-api/index.md
+++ b/content/en/blog/_posts/2021-04-22-gateway-api/index.md
@@ -30,9 +30,9 @@ This led to design principles that allow the Gateway API to improve upon Ingress
The Gateway API introduces a few new resource types:
-- **[GatewayClasses](https://gateway-api.sigs.k8s.io/v1alpha1/references/spec/#networking.x-k8s.io/v1alpha1.GatewayClass)** are cluster-scoped resources that act as templates to explicitly define behavior for Gateways derived from them. This is similar in concept to StorageClasses, but for networking data-planes.
-- **[Gateways](https://gateway-api.sigs.k8s.io/v1alpha1/references/spec/#networking.x-k8s.io/v1alpha1.Gateway)** are the deployed instances of GatewayClasses. They are the logical representation of the data-plane which performs routing, which may be in-cluster proxies, hardware LBs, or cloud LBs.
-- **Routes** are not a single resource, but represent many different protocol-specific Route resources. The [HTTPRoute](https://gateway-api.sigs.k8s.io/v1alpha1/references/spec/#networking.x-k8s.io/v1alpha1.HTTPRoute) has matching, filtering, and routing rules that get applied to Gateways that can process HTTP and HTTPS traffic. Similarly, there are [TCPRoutes](https://gateway-api.sigs.k8s.io/v1alpha1/references/spec/#networking.x-k8s.io/v1alpha1.TCPRoute), [UDPRoutes](https://gateway-api.sigs.k8s.io/v1alpha1/references/spec/#networking.x-k8s.io/v1alpha1.UDPRoute), and [TLSRoutes](https://gateway-api.sigs.k8s.io/v1alpha1/references/spec/#networking.x-k8s.io/v1alpha1.TLSRoute) which also have protocol-specific semantics. This model also allows the Gateway API to incrementally expand its protocol support in the future.
+- **[GatewayClasses](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass)** are cluster-scoped resources that act as templates to explicitly define behavior for Gateways derived from them. This is similar in concept to StorageClasses, but for networking data-planes.
+- **[Gateways](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway)** are the deployed instances of GatewayClasses. They are the logical representation of the data-plane which performs routing, which may be in-cluster proxies, hardware LBs, or cloud LBs.
+- **Routes** are not a single resource, but represent many different protocol-specific Route resources. The [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute) has matching, filtering, and routing rules that get applied to Gateways that can process HTTP and HTTPS traffic. Similarly, there are [TCPRoutes](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tcproute-and-udproute), [UDPRoutes](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tcproute-and-udproute), and [TLSRoutes](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) which also have protocol-specific semantics. This model also allows the Gateway API to incrementally expand its protocol support in the future.

diff --git a/content/en/blog/_posts/2021-09-03-api-server-tracing.md b/content/en/blog/_posts/2021-09-03-api-server-tracing.md
index fc98a68d23..344ff8fa46 100644
--- a/content/en/blog/_posts/2021-09-03-api-server-tracing.md
+++ b/content/en/blog/_posts/2021-09-03-api-server-tracing.md
@@ -42,7 +42,7 @@ samplingRatePerMillion: 10000
### Enabling Etcd Tracing
-Add `--experimental-enable-distributed-tracing`, `--experimental-distributed-tracing-address=0.0.0.0:4317`, `--experimental-distributed-tracing-service-name=etcd` flags to etcd to enable tracing. Note that this traces every request, so it will probably generate a lot of traces if you enable it.
+Add `--experimental-enable-distributed-tracing`, `--experimental-distributed-tracing-address=0.0.0.0:4317`, `--experimental-distributed-tracing-service-name=etcd` flags to etcd to enable tracing. Note that this traces every request, so it will probably generate a lot of traces if you enable it. Required etcd version is [v3.5+](https://etcd.io/docs/v3.5/op-guide/monitoring/#distributed-tracing).
### Example Trace: List Nodes
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 74e61b117d..4950f88097 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
@@ -86,7 +86,7 @@ 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).
+**must** switch as Kubernetes no longer includes the dockershim).
[kubelet]: /docs/reference/command-line-tools-reference/kubelet/
diff --git a/content/en/docs/concepts/cluster-administration/flow-control.md b/content/en/docs/concepts/cluster-administration/flow-control.md
index 40af92cd5b..ccf1eb5887 100644
--- a/content/en/docs/concepts/cluster-administration/flow-control.md
+++ b/content/en/docs/concepts/cluster-administration/flow-control.md
@@ -471,11 +471,15 @@ poorly-behaved workloads that may be harming system health.
requests, broken down by the labels `phase` (which takes on the
values `waiting` and `executing`) and `request_kind` (which takes on
the values `mutating` and `readOnly`). The observations are made
- periodically at a high rate.
+ periodically at a high rate. Each observed value is a ratio,
+ between 0 and 1, of a number of requests divided by the
+ corresponding limit on the number of requests (queue length limit
+ for waiting and concurrency limit for executing).
* `apiserver_flowcontrol_read_vs_write_request_count_watermarks` is a
histogram vector of high or low water marks of the number of
- requests broken down by the labels `phase` (which takes on the
+ requests (divided by the corresponding limit to get a ratio in the
+ range 0 to 1) broken down by the labels `phase` (which takes on the
values `waiting` and `executing`) and `request_kind` (which takes on
the values `mutating` and `readOnly`); the label `mark` takes on
values `high` and `low`. The water marks are accumulated over
@@ -502,11 +506,15 @@ poorly-behaved workloads that may be harming system health.
values `waiting` and `executing`) and `priority_level`. Each
histogram gets observations taken periodically, up through the last
activity of the relevant sort. The observations are made at a high
- rate.
+ rate. Each observed value is a ratio, between 0 and 1, of a number
+ of requests divided by the corresponding limit on the number of
+ requests (queue length limit for waiting and concurrency limit for
+ executing).
* `apiserver_flowcontrol_priority_level_request_count_watermarks` is a
histogram vector of high or low water marks of the number of
- requests broken down by the labels `phase` (which takes on the
+ requests (divided by the corresponding limit to get a ratio in the
+ range 0 to 1) broken down by the labels `phase` (which takes on the
values `waiting` and `executing`) and `priority_level`; the label
`mark` takes on values `high` and `low`. The water marks are
accumulated over windows bounded by the times when an observation
@@ -514,6 +522,31 @@ poorly-behaved workloads that may be harming system health.
`apiserver_flowcontrol_priority_level_request_count_samples`. These
water marks show the range of values that occurred between samples.
+* `apiserver_flowcontrol_priority_level_seat_count_samples` is a
+ histogram vector of observations of the utilization of a priority
+ level's concurrency limit, broken down by `priority_level`. This
+ utilization is the fraction (number of seats occupied) /
+ (concurrency limit). This metric considers all stages of execution
+ (both normal and the extra delay at the end of a write to cover for
+ the corresponding notification work) of all requests except WATCHes;
+ for those it considers only the initial stage that delivers
+ notifications of pre-existing objects. Each histogram in the vector
+ is also labeled with `phase: executing` (there is no seat limit for
+ the waiting phase). Each histogram gets observations taken
+ periodically, up through the last activity of the relevant sort.
+ The observations
+ are made at a high rate.
+
+* `apiserver_flowcontrol_priority_level_seat_count_watermarks` is a
+ histogram vector of high or low water marks of the utilization of a
+ priority level's concurrency limit, broken down by `priority_level`
+ and `mark` (which takes on values `high` and `low`). Each histogram
+ in the vector is also labeled with `phase: executing` (there is no
+ seat limit for the waiting phase). The water marks are accumulated
+ over windows bounded by the times when an observation was added to
+ `apiserver_flowcontrol_priority_level_seat_count_samples`. These
+ water marks show the range of values that occurred between samples.
+
* `apiserver_flowcontrol_request_queue_length_after_enqueue` is a
histogram vector of queue lengths for the queues, broken down by
the labels `priority_level` and `flow_schema`, as sampled by the
@@ -556,6 +589,22 @@ poorly-behaved workloads that may be harming system health.
and `priority_level` (indicating the one to which the request was
assigned).
+* `apiserver_flowcontrol_watch_count_samples` is a histogram vector of
+ the number of active WATCH requests relevant to a given write,
+ broken down by `flow_schema` and `priority_level`.
+
+* `apiserver_flowcontrol_work_estimated_seats` is a histogram vector
+ of the number of estimated seats (maximum of initial and final stage
+ of execution) associated with requests, broken down by `flow_schema`
+ and `priority_level`.
+
+* `apiserver_flowcontrol_request_dispatch_no_accommodation_total` is a
+ counter vec of the number of events that in principle could have led
+ to a request being dispatched but did not, due to lack of available
+ concurrency, broken down by `flow_schema` and `priority_level`. The
+ relevant sorts of events are arrival of a request and completion of
+ a request.
+
### Debug endpoints
When you enable the API Priority and Fairness feature, the `kube-apiserver`
diff --git a/content/en/docs/concepts/configuration/manage-resources-containers.md b/content/en/docs/concepts/configuration/manage-resources-containers.md
index 2cb2ee1b7f..538372b2f4 100644
--- a/content/en/docs/concepts/configuration/manage-resources-containers.md
+++ b/content/en/docs/concepts/configuration/manage-resources-containers.md
@@ -799,7 +799,7 @@ memory limit (and possibly request) for that container.
* Get hands-on experience [assigning Memory resources to containers and Pods](/docs/tasks/configure-pod-container/assign-memory-resource/).
* Get hands-on experience [assigning CPU resources to containers and Pods](/docs/tasks/configure-pod-container/assign-cpu-resource/).
* Read how the API reference defines a [container](/docs/reference/kubernetes-api/workload-resources/pod-v1/#Container)
- and its [resource requirements](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#resources)
+ and its [resource requirements](/docs/reference/kubernetes-api/workload-resources/pod-v1/#resources)
* Read about [project quotas](https://xfs.org/index.php/XFS_FAQ#Q:_Quota:_Do_quotas_work_on_XFS.3F) in XFS
* Read more about the [kube-scheduler configuration reference (v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/)
diff --git a/content/en/docs/concepts/extend-kubernetes/_index.md b/content/en/docs/concepts/extend-kubernetes/_index.md
index c50010a39f..5404f8c463 100644
--- a/content/en/docs/concepts/extend-kubernetes/_index.md
+++ b/content/en/docs/concepts/extend-kubernetes/_index.md
@@ -17,26 +17,29 @@ no_list: true
-Kubernetes is highly configurable and extensible. As a result,
-there is rarely a need to fork or submit patches to the Kubernetes
-project code.
+Kubernetes is highly configurable and extensible. As a result, there is rarely a need to fork or
+submit patches to the Kubernetes project code.
-This guide describes the options for customizing a Kubernetes
-cluster. It is aimed at {{< glossary_tooltip text="cluster operators" term_id="cluster-operator" >}} who want to
-understand how to adapt their Kubernetes cluster to the needs of
-their work environment. Developers who are prospective {{< glossary_tooltip text="Platform Developers" term_id="platform-developer" >}} or Kubernetes Project {{< glossary_tooltip text="Contributors" term_id="contributor" >}} will also find it
-useful as an introduction to what extension points and patterns
-exist, and their trade-offs and limitations.
+This guide describes the options for customizing a Kubernetes cluster. It is aimed at
+{{< glossary_tooltip text="cluster operators" term_id="cluster-operator" >}} who want to understand
+how to adapt their Kubernetes cluster to the needs of their work environment. Developers who are
+prospective {{< glossary_tooltip text="Platform Developers" term_id="platform-developer" >}} or
+Kubernetes Project {{< glossary_tooltip text="Contributors" term_id="contributor" >}} will also
+find it useful as an introduction to what extension points and patterns exist, and their
+trade-offs and limitations.
## Overview
-Customization approaches can be broadly divided into *configuration*, which only involves changing flags, local configuration files, or API resources; and *extensions*, which involve running additional programs or services. This document is primarily about extensions.
+Customization approaches can be broadly divided into *configuration*, which only involves changing
+flags, local configuration files, or API resources; and *extensions*, which involve running
+additional programs or services. This document is primarily about extensions.
## Configuration
-*Configuration files* and *flags* are documented in the Reference section of the online documentation, under each binary:
+*Configuration files* and *flags* are documented in the Reference section of the online
+documentation, under each binary:
* [kubelet](/docs/reference/command-line-tools-reference/kubelet/)
* [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/)
@@ -44,9 +47,22 @@ Customization approaches can be broadly divided into *configuration*, which only
* [kube-controller-manager](/docs/reference/command-line-tools-reference/kube-controller-manager/)
* [kube-scheduler](/docs/reference/command-line-tools-reference/kube-scheduler/).
-Flags and configuration files may not always be changeable in a hosted Kubernetes service or a distribution with managed installation. When they are changeable, they are usually only changeable by the cluster administrator. Also, they are subject to change in future Kubernetes versions, and setting them may require restarting processes. For those reasons, they should be used only when there are no other options.
+Flags and configuration files may not always be changeable in a hosted Kubernetes service or a
+distribution with managed installation. When they are changeable, they are usually only changeable
+by the cluster administrator. Also, they are subject to change in future Kubernetes versions, and
+setting them may require restarting processes. For those reasons, they should be used only when
+there are no other options.
-*Built-in Policy APIs*, such as [ResourceQuota](/docs/concepts/policy/resource-quotas/), [PodSecurityPolicies](/docs/concepts/security/pod-security-policy/), [NetworkPolicy](/docs/concepts/services-networking/network-policies/) and Role-based Access Control ([RBAC](/docs/reference/access-authn-authz/rbac/)), are built-in Kubernetes APIs. APIs are typically used with hosted Kubernetes services and with managed Kubernetes installations. They are declarative and use the same conventions as other Kubernetes resources like pods, so new cluster configuration can be repeatable and be managed the same way as applications. And, where they are stable, they enjoy a [defined support policy](/docs/reference/using-api/deprecation-policy/) like other Kubernetes APIs. For these reasons, they are preferred over *configuration files* and *flags* where suitable.
+*Built-in Policy APIs*, such as [ResourceQuota](/docs/concepts/policy/resource-quotas/),
+[PodSecurityPolicies](/docs/concepts/security/pod-security-policy/),
+[NetworkPolicy](/docs/concepts/services-networking/network-policies/) and Role-based Access Control
+([RBAC](/docs/reference/access-authn-authz/rbac/)), are built-in Kubernetes APIs.
+APIs are typically used with hosted Kubernetes services and with managed Kubernetes installations.
+They are declarative and use the same conventions as other Kubernetes resources like pods,
+so new cluster configuration can be repeatable and be managed the same way as applications.
+And, where they are stable, they enjoy a
+[defined support policy](/docs/reference/using-api/deprecation-policy/) like other Kubernetes APIs.
+For these reasons, they are preferred over *configuration files* and *flags* where suitable.
## Extensions
@@ -70,10 +86,9 @@ There is a specific pattern for writing client programs that work well with
Kubernetes called the *Controller* pattern. Controllers typically read an
object's `.spec`, possibly do things, and then update the object's `.status`.
-A controller is a client of Kubernetes. When Kubernetes is the client and
-calls out to a remote service, it is called a *Webhook*. The remote service
-is called a *Webhook Backend*. Like Controllers, Webhooks do add a point of
-failure.
+A controller is a client of Kubernetes. When Kubernetes is the client and calls out to a remote
+service, it is called a *Webhook*. The remote service is called a *Webhook Backend*. Like
+Controllers, Webhooks do add a point of failure.
In the webhook model, Kubernetes makes a network request to a remote service.
In the *Binary Plugin* model, Kubernetes executes a binary (program).
@@ -95,15 +110,35 @@ This diagram shows the extension points in a Kubernetes system.

-1. Users often interact with the Kubernetes API using `kubectl`. [Kubectl plugins](/docs/tasks/extend-kubectl/kubectl-plugins/) extend the kubectl binary. They only affect the individual user's local environment, and so cannot enforce site-wide policies.
-2. The apiserver handles all requests. Several types of extension points in the apiserver allow authenticating requests, or blocking them based on their content, editing content, and handling deletion. These are described in the [API Access Extensions](#api-access-extensions) section.
-3. The apiserver serves various kinds of *resources*. *Built-in resource kinds*, like `pods`, are defined by the Kubernetes project and can't be changed. You can also add resources that you define, or that other projects have defined, called *Custom Resources*, as explained in the [Custom Resources](#user-defined-types) section. Custom Resources are often used with API Access Extensions.
-4. The Kubernetes scheduler decides which nodes to place pods on. There are several ways to extend scheduling. These are described in the [Scheduler Extensions](#scheduler-extensions) section.
-5. Much of the behavior of Kubernetes is implemented by programs called Controllers which are clients of the API-Server. Controllers are often used in conjunction with Custom Resources.
-6. The kubelet runs on servers, and helps pods appear like virtual servers with their own IPs on the cluster network. [Network Plugins](#network-plugins) allow for different implementations of pod networking.
-7. The kubelet also mounts and unmounts volumes for containers. New types of storage can be supported via [Storage Plugins](#storage-plugins).
+1. Users often interact with the Kubernetes API using `kubectl`.
+ [Kubectl plugins](/docs/tasks/extend-kubectl/kubectl-plugins/) extend the kubectl binary.
+ They only affect the individual user's local environment, and so cannot enforce site-wide policies.
-If you are unsure where to start, this flowchart can help. Note that some solutions may involve several types of extensions.
+1. The API server handles all requests. Several types of extension points in the API server allow
+ authenticating requests, or blocking them based on their content, editing content, and handling
+ deletion. These are described in the [API Access Extensions](#api-access-extensions) section.
+
+1. The API server serves various kinds of *resources*. *Built-in resource kinds*, like `pods`, are
+ defined by the Kubernetes project and can't be changed. You can also add resources that you
+ define, or that other projects have defined, called *Custom Resources*, as explained in the
+ [Custom Resources](#user-defined-types) section. Custom Resources are often used with API access
+ extensions.
+
+1. The Kubernetes scheduler decides which nodes to place pods on. There are several ways to extend
+ scheduling. These are described in the [Scheduler Extensions](#scheduler-extensions) section.
+
+1. Much of the behavior of Kubernetes is implemented by programs called Controllers which are
+ clients of the API server. Controllers are often used in conjunction with Custom Resources.
+
+1. The kubelet runs on servers, and helps pods appear like virtual servers with their own IPs on
+ the cluster network. [Network Plugins](#network-plugins) allow for different implementations of
+ pod networking.
+
+1. The kubelet also mounts and unmounts volumes for containers. New types of storage can be
+ supported via [Storage Plugins](#storage-plugins).
+
+If you are unsure where to start, this flowchart can help. Note that some solutions may involve
+several types of extensions.

@@ -112,60 +147,86 @@ If you are unsure where to start, this flowchart can help. Note that some soluti
### User-Defined Types
-Consider adding a Custom Resource to Kubernetes if you want to define new controllers, application configuration objects or other declarative APIs, and to manage them using Kubernetes tools, such as `kubectl`.
+Consider adding a Custom Resource to Kubernetes if you want to define new controllers, application
+configuration objects or other declarative APIs, and to manage them using Kubernetes tools, such
+as `kubectl`.
Do not use a Custom Resource as data storage for application, user, or monitoring data.
-For more about Custom Resources, see the [Custom Resources concept guide](/docs/concepts/extend-kubernetes/api-extension/custom-resources/).
+For more about Custom Resources, see the
+[Custom Resources concept guide](/docs/concepts/extend-kubernetes/api-extension/custom-resources/).
### Combining New APIs with Automation
-The combination of a custom resource API and a control loop is called the [Operator pattern](/docs/concepts/extend-kubernetes/operator/). The Operator pattern is used to manage specific, usually stateful, applications. These custom APIs and control loops can also be used to control other resources, such as storage or policies.
+The combination of a custom resource API and a control loop is called the
+[Operator pattern](/docs/concepts/extend-kubernetes/operator/). The Operator pattern is used to manage
+specific, usually stateful, applications. These custom APIs and control loops can also be used to
+control other resources, such as storage or policies.
### Changing Built-in Resources
-When you extend the Kubernetes API by adding custom resources, the added resources always fall into a new API Groups. You cannot replace or change existing API groups.
-Adding an API does not directly let you affect the behavior of existing APIs (e.g. Pods), but API Access Extensions do.
+When you extend the Kubernetes API by adding custom resources, the added resources always fall
+into a new API Groups. You cannot replace or change existing API groups.
+Adding an API does not directly let you affect the behavior of existing APIs (e.g. Pods), but API
+Access Extensions do.
### API Access Extensions
-When a request reaches the Kubernetes API Server, it is first Authenticated, then Authorized, then subject to various types of Admission Control. See [Controlling Access to the Kubernetes API](/docs/concepts/security/controlling-access/) for more on this flow.
+When a request reaches the Kubernetes API Server, it is first Authenticated, then Authorized, then
+subject to various types of Admission Control. See
+[Controlling Access to the Kubernetes API](/docs/concepts/security/controlling-access/)
+for more on this flow.
Each of these steps offers extension points.
-Kubernetes has several built-in authentication methods that it supports. It can also sit behind an authenticating proxy, and it can send a token from an Authorization header to a remote service for verification (a webhook). All of these methods are covered in the [Authentication documentation](/docs/reference/access-authn-authz/authentication/).
+Kubernetes has several built-in authentication methods that it supports. It can also sit behind an
+authenticating proxy, and it can send a token from an Authorization header to a remote service for
+verification (a webhook). All of these methods are covered in the
+[Authentication documentation](/docs/reference/access-authn-authz/authentication/).
### Authentication
-[Authentication](/docs/reference/access-authn-authz/authentication/) maps headers or certificates in all requests to a username for the client making the request.
-
-Kubernetes provides several built-in authentication methods, and an [Authentication webhook](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication) method if those don't meet your needs.
+[Authentication](/docs/reference/access-authn-authz/authentication/) maps headers or certificates
+in all requests to a username for the client making the request.
+Kubernetes provides several built-in authentication methods, and an
+[Authentication webhook](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication)
+method if those don't meet your needs.
### Authorization
-[Authorization](/docs/reference/access-authn-authz/authorization/) determines whether specific users can read, write, and do other operations on API resources. It works at the level of whole resources -- it doesn't discriminate based on arbitrary object fields. If the built-in authorization options don't meet your needs, [Authorization webhook](/docs/reference/access-authn-authz/webhook/) allows calling out to user-provided code to make an authorization decision.
-
+[Authorization](/docs/reference/access-authn-authz/authorization/) determines whether specific
+users can read, write, and do other operations on API resources. It works at the level of whole
+resources -- it doesn't discriminate based on arbitrary object fields. If the built-in
+authorization options don't meet your needs, [Authorization webhook](/docs/reference/access-authn-authz/webhook/)
+allows calling out to user-provided code to make an authorization decision.
### Dynamic Admission Control
-After a request is authorized, if it is a write operation, it also goes through [Admission Control](/docs/reference/access-authn-authz/admission-controllers/) steps. In addition to the built-in steps, there are several extensions:
+After a request is authorized, if it is a write operation, it also goes through
+[Admission Control](/docs/reference/access-authn-authz/admission-controllers/) steps.
+In addition to the built-in steps, there are several extensions:
-* The [Image Policy webhook](/docs/reference/access-authn-authz/admission-controllers/#imagepolicywebhook) restricts what images can be run in containers.
-* To make arbitrary admission control decisions, a general [Admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) can be used. Admission Webhooks can reject creations or updates.
+* The [Image Policy webhook](/docs/reference/access-authn-authz/admission-controllers/#imagepolicywebhook)
+ restricts what images can be run in containers.
+* To make arbitrary admission control decisions, a general
+ [Admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)
+ can be used. Admission Webhooks can reject creations or updates.
## Infrastructure Extensions
### Storage Plugins
-[Flex Volumes](https://git.k8s.io/design-proposals-archive/storage/flexvolume-deployment.md
-) allow users to mount volume types without built-in support by having the
-Kubelet call a Binary Plugin to mount the volume.
-
-FlexVolume is deprecated since Kubernetes v1.23. The Out-of-tree CSI driver is the recommended way to write volume drivers in Kubernetes. See [Kubernetes Volume Plugin FAQ for Storage Vendors](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md#kubernetes-volume-plugin-faq-for-storage-vendors) for more information.
+[Flex Volumes](https://git.k8s.io/design-proposals-archive/storage/flexvolume-deployment.md)
+allow users to mount volume types without built-in support by having the kubelet call a binary
+plugin to mount the volume.
+FlexVolume is deprecated since Kubernetes v1.23. The out-of-tree CSI driver is the recommended way
+to write volume drivers in Kubernetes. See
+[Kubernetes Volume Plugin FAQ for Storage Vendors](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md#kubernetes-volume-plugin-faq-for-storage-vendors)
+for more information.
### Device Plugins
@@ -173,7 +234,6 @@ Device plugins allow a node to discover new Node resources (in addition to the
builtin ones like cpu and memory) via a
[Device Plugin](/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/).
-
### Network Plugins
Different networking fabrics can be supported via node-level
diff --git a/content/en/docs/concepts/extend-kubernetes/service-catalog.md b/content/en/docs/concepts/extend-kubernetes/service-catalog.md
deleted file mode 100644
index 8c8b1aa238..0000000000
--- a/content/en/docs/concepts/extend-kubernetes/service-catalog.md
+++ /dev/null
@@ -1,237 +0,0 @@
----
-title: Service Catalog
-reviewers:
-- chenopis
-content_type: concept
-weight: 40
----
-
-
-{{< glossary_definition term_id="service-catalog" length="all" prepend="Service Catalog is" >}}
-
-A service broker, as defined by the [Open service broker API spec](https://github.com/openservicebrokerapi/servicebroker/blob/v2.13/spec.md), is an endpoint for a set of managed services offered and maintained by a third-party, which could be a cloud provider such as AWS, GCP, or Azure.
-Some examples of managed services are Microsoft Azure Cloud Queue, Amazon Simple Queue Service, and Google Cloud Pub/Sub, but they can be any software offering that can be used by an application.
-
-Using Service Catalog, a {{< glossary_tooltip text="cluster operator" term_id="cluster-operator" >}} can browse the list of managed services offered by a service broker, provision an instance of a managed service, and bind with it to make it available to an application in the Kubernetes cluster.
-
-
-
-
-
-## Example use case
-
-An {{< glossary_tooltip text="application developer" term_id="application-developer" >}} wants to use message queuing as part of their application running in a Kubernetes cluster.
-However, they do not want to deal with the overhead of setting such a service up and administering it themselves.
-Fortunately, there is a cloud provider that offers message queuing as a managed service through its service broker.
-
-A cluster operator can setup Service Catalog and use it to communicate with the cloud provider's service broker to provision an instance of the message queuing service and make it available to the application within the Kubernetes cluster.
-The application developer therefore does not need to be concerned with the implementation details or management of the message queue.
-The application can access the message queue as a service.
-
-## Architecture
-
-Service Catalog uses the [Open service broker API](https://github.com/openservicebrokerapi/servicebroker) to communicate with service brokers, acting as an intermediary for the Kubernetes API Server to negotiate the initial provisioning and retrieve the credentials necessary for the application to use a managed service.
-
-It is implemented using a [CRDs-based](/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-resources) architecture.
-
-
-
-
-
-
-### API Resources
-
-Service Catalog installs the `servicecatalog.k8s.io` API and provides the following Kubernetes resources:
-
-* `ClusterServiceBroker`: An in-cluster representation of a service broker, encapsulating its server connection details.
-These are created and managed by cluster operators who wish to use that broker server to make new types of managed services available within their cluster.
-* `ClusterServiceClass`: A managed service offered by a particular service broker.
-When a new `ClusterServiceBroker` resource is added to the cluster, the Service Catalog controller connects to the service broker to obtain a list of available managed services. It then creates a new `ClusterServiceClass` resource corresponding to each managed service.
-* `ClusterServicePlan`: A specific offering of a managed service. For example, a managed service may have different plans available, such as a free tier or paid tier, or it may have different configuration options, such as using SSD storage or having more resources. Similar to `ClusterServiceClass`, when a new `ClusterServiceBroker` is added to the cluster, Service Catalog creates a new `ClusterServicePlan` resource corresponding to each Service Plan available for each managed service.
-* `ServiceInstance`: A provisioned instance of a `ClusterServiceClass`.
-These are created by cluster operators to make a specific instance of a managed service available for use by one or more in-cluster applications.
-When a new `ServiceInstance` resource is created, the Service Catalog controller connects to the appropriate service broker and instruct it to provision the service instance.
-* `ServiceBinding`: Access credentials to a `ServiceInstance`.
-These are created by cluster operators who want their applications to make use of a `ServiceInstance`.
-Upon creation, the Service Catalog controller creates a Kubernetes `Secret` containing connection details and credentials for the Service Instance, which can be mounted into Pods.
-
-### Authentication
-
-Service Catalog supports these methods of authentication:
-
-* Basic (username/password)
-* [OAuth 2.0 Bearer Token](https://tools.ietf.org/html/rfc6750)
-
-## Usage
-
-A cluster operator can use Service Catalog API Resources to provision managed services and make them available within a Kubernetes cluster. The steps involved are:
-
-1. Listing the managed services and Service Plans available from a service broker.
-1. Provisioning a new instance of the managed service.
-1. Binding to the managed service, which returns the connection credentials.
-1. Mapping the connection credentials into the application.
-
-### Listing managed services and Service Plans
-
-First, a cluster operator must create a `ClusterServiceBroker` resource within the `servicecatalog.k8s.io` group. This resource contains the URL and connection details necessary to access a service broker endpoint.
-
-This is an example of a `ClusterServiceBroker` resource:
-
-```yaml
-apiVersion: servicecatalog.k8s.io/v1beta1
-kind: ClusterServiceBroker
-metadata:
- name: cloud-broker
-spec:
- # Points to the endpoint of a service broker. (This example is not a working URL.)
- url: https://servicebroker.somecloudprovider.com/v1alpha1/projects/service-catalog/brokers/default
- #####
- # Additional values can be added here, which may be used to communicate
- # with the service broker, such as bearer token info or a caBundle for TLS.
- #####
-```
-
-The following is a sequence diagram illustrating the steps involved in listing managed services and Plans available from a service broker:
-
-
-
-1. Once the `ClusterServiceBroker` resource is added to Service Catalog, it triggers a call to the external service broker for a list of available services.
-1. The service broker returns a list of available managed services and a list of Service Plans, which are cached locally as `ClusterServiceClass` and `ClusterServicePlan` resources respectively.
-1. A cluster operator can then get the list of available managed services using the following command:
-
- kubectl get clusterserviceclasses -o=custom-columns=SERVICE\ NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
-
- It should output a list of service names with a format similar to:
-
- SERVICE NAME EXTERNAL NAME
- 4f6e6cf6-ffdd-425f-a2c7-3c9258ad2468 cloud-provider-service
- ... ...
-
- They can also view the Service Plans available using the following command:
-
- kubectl get clusterserviceplans -o=custom-columns=PLAN\ NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
-
- It should output a list of plan names with a format similar to:
-
- PLAN NAME EXTERNAL NAME
- 86064792-7ea2-467b-af93-ac9694d96d52 service-plan-name
- ... ...
-
-
-### Provisioning a new instance
-
-A cluster operator can initiate the provisioning of a new instance by creating a `ServiceInstance` resource.
-
-This is an example of a `ServiceInstance` resource:
-
-```yaml
-apiVersion: servicecatalog.k8s.io/v1beta1
-kind: ServiceInstance
-metadata:
- name: cloud-queue-instance
- namespace: cloud-apps
-spec:
- # References one of the previously returned services
- clusterServiceClassExternalName: cloud-provider-service
- clusterServicePlanExternalName: service-plan-name
- #####
- # Additional parameters can be added here,
- # which may be used by the service broker.
- #####
-```
-
-The following sequence diagram illustrates the steps involved in provisioning a new instance of a managed service:
-
-
-
-1. When the `ServiceInstance` resource is created, Service Catalog initiates a call to the external service broker to provision an instance of the service.
-1. The service broker creates a new instance of the managed service and returns an HTTP response.
-1. A cluster operator can then check the status of the instance to see if it is ready.
-
-### Binding to a managed service
-
-After a new instance has been provisioned, a cluster operator must bind to the managed service to get the connection credentials and service account details necessary for the application to use the service. This is done by creating a `ServiceBinding` resource.
-
-The following is an example of a `ServiceBinding` resource:
-
-```yaml
-apiVersion: servicecatalog.k8s.io/v1beta1
-kind: ServiceBinding
-metadata:
- name: cloud-queue-binding
- namespace: cloud-apps
-spec:
- instanceRef:
- name: cloud-queue-instance
- #####
- # Additional information can be added here, such as a secretName or
- # service account parameters, which may be used by the service broker.
- #####
-```
-
-The following sequence diagram illustrates the steps involved in binding to a managed service instance:
-
-
-
-1. After the `ServiceBinding` is created, Service Catalog makes a call to the external service broker requesting the information necessary to bind with the service instance.
-1. The service broker enables the application permissions/roles for the appropriate service account.
-1. The service broker returns the information necessary to connect and access the managed service instance. This is provider and service-specific so the information returned may differ between Service Providers and their managed services.
-
-### Mapping the connection credentials
-
-After binding, the final step involves mapping the connection credentials and service-specific information into the application.
-These pieces of information are stored in secrets that the application in the cluster can access and use to connect directly with the managed service.
-
-
-
-
-
-#### Pod configuration File
-
-One method to perform this mapping is to use a declarative Pod configuration.
-
-The following example describes how to map service account credentials into the application. A key called `sa-key` is stored in a volume named `provider-cloud-key`, and the application mounts this volume at `/var/secrets/provider/key.json`. The environment variable `PROVIDER_APPLICATION_CREDENTIALS` is mapped from the value of the mounted file.
-
-```yaml
-...
- spec:
- volumes:
- - name: provider-cloud-key
- secret:
- secretName: sa-key
- containers:
-...
- volumeMounts:
- - name: provider-cloud-key
- mountPath: /var/secrets/provider
- env:
- - name: PROVIDER_APPLICATION_CREDENTIALS
- value: "/var/secrets/provider/key.json"
-```
-
-The following example describes how to map secret values into application environment variables. In this example, the messaging queue topic name is mapped from a secret named `provider-queue-credentials` with a key named `topic` to the environment variable `TOPIC`.
-
-
-```yaml
-...
- env:
- - name: "TOPIC"
- valueFrom:
- secretKeyRef:
- name: provider-queue-credentials
- key: topic
-```
-
-
-
-
-## {{% heading "whatsnext" %}}
-
-* If you are familiar with {{< glossary_tooltip text="Helm Charts" term_id="helm-chart" >}}, [install Service Catalog using Helm](/docs/tasks/service-catalog/install-service-catalog-using-helm/) into your Kubernetes cluster. Alternatively, you can [install Service Catalog using the SC tool](/docs/tasks/service-catalog/install-service-catalog-using-sc/).
-* View [sample service brokers](https://github.com/openservicebrokerapi/servicebroker/blob/master/gettingStarted.md#sample-service-brokers).
-* Explore the [kubernetes-sigs/service-catalog](https://github.com/kubernetes-sigs/service-catalog) project.
-
-
-
-
-
diff --git a/content/en/docs/concepts/overview/working-with-objects/kubernetes-objects.md b/content/en/docs/concepts/overview/working-with-objects/kubernetes-objects.md
index bcfd32ef7d..ee83692419 100644
--- a/content/en/docs/concepts/overview/working-with-objects/kubernetes-objects.md
+++ b/content/en/docs/concepts/overview/working-with-objects/kubernetes-objects.md
@@ -81,7 +81,7 @@ In the `.yaml` file for the Kubernetes object you want to create, you'll need to
* `metadata` - Data that helps uniquely identify the object, including a `name` string, `UID`, and optional `namespace`
* `spec` - What state you desire for the object
-The precise format of the object `spec` is different for every Kubernetes object, and contains nested fields specific to that object. The [Kubernetes API Reference](https://kubernetes.io/docs/reference/kubernetes-api/) can help you find the spec format for all of the objects you can create using Kubernetes.
+The precise format of the object `spec` is different for every Kubernetes object, and contains nested fields specific to that object. The [Kubernetes API Reference](/docs/reference/kubernetes-api/) can help you find the spec format for all of the objects you can create using Kubernetes.
For example, see the [`spec` field](/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec)
for the Pod API reference.
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 8d3cc1831c..db9f1d900d 100644
--- a/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md
+++ b/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md
@@ -124,8 +124,8 @@ For example, consider the following Pod spec:
In this example, the following rules apply:
- * The node *must* have a label with the key `kubernetes.io/os` and
- the value `linux`.
+ * The node *must* have a label with the key `topology.kubernetes.io/zone` and
+ the value of that label *must* be either `antarctica-east1` or `antarctica-west1`.
* The node *preferably* has a label with the key `another-node-label-key` and
the value `another-node-label-value`.
diff --git a/content/en/docs/concepts/scheduling-eviction/taint-and-toleration.md b/content/en/docs/concepts/scheduling-eviction/taint-and-toleration.md
index ff7718a1f3..4bb3471745 100644
--- a/content/en/docs/concepts/scheduling-eviction/taint-and-toleration.md
+++ b/content/en/docs/concepts/scheduling-eviction/taint-and-toleration.md
@@ -15,7 +15,7 @@ is a property of {{< glossary_tooltip text="Pods" term_id="pod" >}} that *attrac
a set of {{< glossary_tooltip text="nodes" term_id="node" >}} (either as a preference or a
hard requirement). _Taints_ are the opposite -- they allow a node to repel a set of pods.
-_Tolerations_ are applied to pods. Tolerations allow the scheduler to schedule pods with matching taints. Tolerations allow scheduling but don't guarantee scheduling: the scheduler also [evaluates other parameters](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) as part of its function.
+_Tolerations_ are applied to pods. Tolerations allow the scheduler to schedule pods with matching taints. Tolerations allow scheduling but don't guarantee scheduling: the scheduler also [evaluates other parameters](/docs/concepts/scheduling-eviction/pod-priority-preemption/) as part of its function.
Taints and tolerations work together to ensure that pods are not scheduled
onto inappropriate nodes. One or more taints are applied to a node; this
diff --git a/content/en/docs/concepts/security/controlling-access.md b/content/en/docs/concepts/security/controlling-access.md
index e7ba78e1c4..04b13a82c5 100644
--- a/content/en/docs/concepts/security/controlling-access.md
+++ b/content/en/docs/concepts/security/controlling-access.md
@@ -4,6 +4,7 @@ reviewers:
- lavalamp
title: Controlling Access to the Kubernetes API
content_type: concept
+weight: 50
---
diff --git a/content/en/docs/concepts/security/multi-tenancy.md b/content/en/docs/concepts/security/multi-tenancy.md
new file mode 100755
index 0000000000..f68b25dae3
--- /dev/null
+++ b/content/en/docs/concepts/security/multi-tenancy.md
@@ -0,0 +1,271 @@
+---
+title: Multi-tenancy
+content_type: concept
+weight: 70
+---
+
+
+
+This page provides an overview of available configuration options and best practices for cluster multi-tenancy.
+
+Sharing clusters saves costs and simplifies administration. However, sharing clusters also presents challenges such as security, fairness, and managing _noisy neighbors_.
+
+Clusters can be shared in many ways. In some cases, different applications may run in the same cluster. In other cases, multiple instances of the same application may run in the same cluster, one for each end user. All these types of sharing are frequently described using the umbrella term _multi-tenancy_.
+
+While Kubernetes does not have first-class concepts of end users or tenants, it provides several features to help manage different tenancy requirements. These are discussed below.
+
+
+## Use cases
+
+The first step to determining how to share your cluster is understanding your use case, so you can evaluate the patterns and tools available. In general, multi-tenancy in Kubernetes clusters falls into two broad categories, though many variations and hybrids are also possible.
+
+### Multiple teams
+
+A common form of multi-tenancy is to share a cluster between multiple teams within an organization, each of whom may operate one or more workloads. These workloads frequently need to communicate with each other, and with other workloads located on the same or different clusters.
+
+In this scenario, members of the teams often have direct access to Kubernetes resources via tools such as `kubectl`, or indirect access through GitOps controllers or other types of release automation tools. There is often some level of trust between members of different teams, but Kubernetes policies such as RBAC, quotas, and network policies are essential to safely and fairly share clusters.
+
+### Multiple customers
+
+The other major form of multi-tenancy frequently involves a Software-as-a-Service (SaaS) vendor running multiple instances of a workload for customers. This business model is so strongly associated with this deployment style that many people call it "SaaS tenancy." However, a better term might be "multi-customer tenancy,” since SaaS vendors may also use other deployment models, and this deployment model can also be used outside of SaaS.
+
+
+In this scenario, the customers do not have access to the cluster; Kubernetes is invisible from their perspective and is only used by the vendor to manage the workloads. Cost optimization is frequently a critical concern, and Kubernetes policies are used to ensure that the workloads are strongly isolated from each other.
+
+
+## Terminology
+
+### Tenants
+
+When discussing multi-tenancy in Kubernetes, there is no single definition for a "tenant". Rather, the definition of a tenant will vary depending on whether multi-team or multi-customer tenancy is being discussed.
+
+In multi-team usage, a tenant is typically a team, where each team typically deploys a small number of workloads that scales with the complexity of the service. However, the definition of "team" may itself be fuzzy, as teams may be organized into higher-level divisions or subdivided into smaller teams.
+
+
+By contrast, if each team deploys dedicated workloads for each new client, they are using a multi-customer model of tenancy. In this case, a "tenant" is simply a group of users who share a single workload. This may be as large as an entire company, or as small as a single team at that company.
+
+In many cases, the same organization may use both definitions of "tenants" in different contexts. For example, a platform team may offer shared services such as security tools and databases to multiple internal “customers” and a SaaS vendor may also have multiple teams sharing a development cluster. Finally, hybrid architectures are also possible, such as a SaaS provider using a combination of per-customer workloads for sensitive data, combined with multi-tenant shared services.
+
+
+{{< figure src="/images/docs/multi-tenancy.png" title="A cluster showing coexisting tenancy models" class="diagram-large" >}}
+
+
+### Isolation
+
+There are several ways to design and build multi-tenant solutions with Kubernetes. Each of these methods comes with its own set of tradeoffs that impact the isolation level, implementation effort, operational complexity, and cost of service.
+
+
+A Kubernetes cluster consists of a control plane which runs Kubernetes software, and a data plane consisting of worker nodes where tenant workloads are executed as pods. Tenant isolation can be applied in both the control plane and the data plane based on organizational requirements.
+
+The level of isolation offered is sometimes described using terms like “hard” multi-tenancy, which implies strong isolation, and “soft” multi-tenancy, which implies weaker isolation. In particular, "hard" multi-tenancy is often used to describe cases where the tenants do not trust each other, often from security and resource sharing perspectives (e.g. guarding against attacks such as data exfiltration or DoS). Since data planes typically have much larger attack surfaces, "hard" multi-tenancy often requires extra attention to isolating the data-plane, though control plane isolation also remains critical.
+
+However, the terms "hard" and "soft" can often be confusing, as there is no single definition that will apply to all users. Rather, "hardness" or "softness" is better understood as a broad spectrum, with many different techniques that can be used to maintain different types of isolation in your clusters, based on your requirements.
+
+
+In more extreme cases, it may be easier or necessary to forgo any cluster-level sharing at all and assign each tenant their dedicated cluster, possibly even running on dedicated hardware if VMs are not considered an adequate security boundary. This may be easier with managed Kubernetes clusters, where the overhead of creating and operating clusters is at least somewhat taken on by a cloud provider. The benefit of stronger tenant isolation must be evaluated against the cost and complexity of managing multiple clusters. The [Multi-cluster SIG](https://git.k8s.io/community/sig-multicluster/README.md) is responsible for addressing these types of use cases.
+
+
+
+The remainder of this page focuses on isolation techniques used for shared Kubernetes clusters. However, even if you are considering dedicated clusters, it may be valuable to review these recommendations, as it will give you the flexibility to shift to shared clusters in the future if your needs or capabilities change.
+
+
+## Control plane isolation
+
+Control plane isolation ensures that different tenants cannot access or affect each others' Kubernetes API resources.
+
+### Namespaces
+
+In Kubernetes, a {{< glossary_tooltip text="Namespace" term_id="namespace" >}} provides a mechanism for isolating groups of API resources within a single cluster. This isolation has two key dimensions:
+
+1. Object names within a namespace can overlap with names in other namespaces, similar to files in folders. This allows tenants to name their resources without having to consider what other tenants are doing.
+
+2. Many Kubernetes security policies are scoped to namespaces. For example, RBAC Roles and Network Policies are namespace-scoped resources. Using RBAC, Users and Service Accounts can be restricted to a namespace.
+
+In a multi-tenant environment, a Namespace helps segment a tenant's workload into a logical and distinct management unit. In fact, a common practice is to isolate every workload in its own namespace, even if multiple workloads are operated by the same tenant. This ensures that each workload has its own identity and can be configured with an appropriate security policy.
+
+The namespace isolation model requires configuration of several other Kubernetes resources, networking plugins, and adherence to security best practices to properly isolate tenant workloads. These considerations are discussed below.
+
+### Access controls
+
+The most important type of isolation for the control plane is authorization. If teams or their workloads can access or modify each others' API resources, they can change or disable all other types of policies thereby negating any protection those policies may offer. As a result, it is critical to ensure that each tenant has the appropriate access to only the namespaces they need, and no more. This is known as the "Principle of Least Privilege."
+
+
+Role-based access control (RBAC) is commonly used to enforce authorization in the Kubernetes control plane, for both users and workloads (service accounts). [Roles](/docs/reference/access-authn-authz/rbac/#role-and-clusterrole) and [role bindings](/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding) are Kubernetes objects that are used at a namespace level to enforce access control in your application; similar objects exist for authorizing access to cluster-level objects, though these are less useful for multi-tenant clusters.
+
+In a multi-team environment, RBAC must be used to restrict tenants' access to the appropriate namespaces, and ensure that cluster-wide resources can only be accessed or modified by privileged users such as cluster administrators.
+
+If a policy ends up granting a user more permissions than they need, this is likely a signal that the namespace containing the affected resources should be refactored into finer-grained namespaces. Namespace management tools may simplify the management of these finer-grained namespaces by applying common RBAC policies to different namespaces, while still allowing fine-grained policies where necessary.
+
+### Quotas
+
+Kubernetes workloads consume node resources, like CPU and memory. In a multi-tenant environment, you can use
+[Resource Quotas](/docs/concepts/policy/resource-quotas/) to manage resource usage of tenant workloads.
+For the multiple teams use case, where tenants have access to the Kubernetes API, you can use resource quotas
+to limit the number of API resources (for example: the number of Pods, or the number of ConfigMaps)
+that a tenant can create. Limits on object count ensure fairness and aim to avoid _noisy neighbor_ issues from
+affecting other tenants that share a control plane.
+
+Resource quotas are namespaced objects. By mapping tenants to namespaces, cluster admins can use quotas to ensure that a tenant cannot monopolize a cluster's resources or overwhelm its control plane. Namespace management tools simplify the administration of quotas. In addition, while Kubernetes quotas only apply within a single namespace, some namespace management tools allow groups of namespaces to share quotas, giving administrators far more flexibility with less effort than built-in quotas.
+
+Quotas prevent a single tenant from consuming greater than their allocated share of resources hence minimizing the “noisy neighbor” issue, where one tenant negatively impacts the performance of other tenants' workloads.
+
+When you apply a quota to namespace, Kubernetes requires you to also specify resource requests and limits for each container. Limits are the upper bound for the amount of resources that a container can consume. Containers that attempt to consume resources that exceed the configured limits will either be throttled or killed, based on the resource type. When resource requests are set lower than limits, each container is guaranteed the requested amount but there may still be some potential for impact across workloads.
+
+Quotas cannot protect against all kinds of resource sharing, such as network traffic. Node isolation (described below) may be a better solution for this problem.
+
+## Data Plane Isolation
+
+Data plane isolation ensures that pods and workloads for different tenants are sufficiently isolated.
+
+### Network isolation
+
+By default, all pods in a Kubernetes cluster are allowed to communicate with each other, and all network traffic is unencrypted. This can lead to security vulnerabilities where traffic is accidentally or maliciously sent to an unintended destination, or is intercepted by a workload on a compromised node.
+
+Pod-to-pod communication can be controlled using [Network Policies](/docs/concepts/services-networking/network-policies/), which restrict communication between pods using namespace labels or IP address ranges. In a multi-tenant environment where strict network isolation between tenants is required, starting with a default policy that denies communication between pods is recommended with another rule that allows all pods to query the DNS server for name resolution. With such a default policy in place, you can begin adding more permissive rules that allow for communication within a namespace. This scheme can be further refined as required. Note that this only applies to pods within a single control plane; pods that belong to different virtual control planes cannot talk to each other via Kubernetes networking.
+
+Namespace management tools may simplify the creation of default or common network policies. In addition, some of these tools allow you to enforce a consistent set of namespace labels across your cluster, ensuring that they are a trusted basis for your policies.
+
+{{< warning >}}
+Network policies require a [CNI plugin](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#cni) that supports the implementation of network policies. Otherwise, NetworkPolicy resources will be ignored.
+{{< /warning >}}
+
+More advanced network isolation may be provided by service meshes, which provide OSI Layer 7 policies based on workload identity, in addition to namespaces. These higher-level policies can make it easier to manage namespaced based multi-tenancy, especially when multiple namespaces are dedicated to a single tenant. They frequently also offer encryption using mutual TLS, protecting your data even in the presence of a compromised node, and work across dedicated or virtual clusters. However, they can be significantly more complex to manage and may not be appropriate for all users.
+
+### Storage isolation
+
+Kubernetes offers several types of volumes that can be used as persistent storage for workloads. For security and data-isolation, [dynamic volume provisioning](/docs/concepts/storage/dynamic-provisioning/) is recommended and volume types that use node resources should be avoided.
+
+[StorageClasses](/docs/concepts/storage/storage-classes/) allow you to describe custom "classes" of storage offered by your cluster, based on quality-of-service levels, backup policies, or custom policies determined by the cluster administrators.
+
+Pods can request storage using a [PersistentVolumeClaim](/docs/concepts/storage/persistent-volumes/). A PersistentVolumeClaim is a namespaced resource, which enables isolating portions of the storage system and dedicating it to tenants within the shared Kubernetes cluster. However, it is important to note that a PersistentVolume is a cluster-wide resource and has a lifecycle independent of workloads and namespaces.
+
+For example, you can configure a separate StorageClass for each tenant and use this to strengthen isolation.
+If a StorageClass is shared, you should set a [reclaim policy of `Delete`](/docs/concepts/storage/storage-classes/#reclaim-policy)
+to ensure that a PersistentVolume cannot be reused across different namespaces.
+
+### Sandboxing containers
+
+{{% thirdparty-content %}}
+
+Kubernetes pods are composed of one or more containers that execute on worker nodes. Containers utilize OS-level virtualization and hence offer a weaker isolation boundary than virtual machines that utilize hardware-based virtualization.
+
+In a shared environment, unpatched vulnerabilities in the application and system layers can be exploited by attackers for container breakouts and remote code execution that allow access to host resources. In some applications, like a Content Management System (CMS), customers may be allowed the ability to upload and execute untrusted scripts or code. In either case, mechanisms to further isolate and protect workloads using strong isolation are desirable.
+
+Sandboxing provides a way to isolate workloads running in a shared cluster. It typically involves running each pod in a separate execution environment such as a virtual machine or a userspace kernel. Sandboxing is often recommended when you are running untrusted code, where workloads are assumed to be malicious. Part of the reason this type of isolation is necessary is because containers are processes running on a shared kernel; they mount file systems like /sys and /proc from the underlying host, making them less secure than an application that runs on a virtual machine which has its own kernel. While controls such as seccomp, AppArmor, and SELinux can be used to strengthen the security of containers, it is hard to apply a universal set of rules to all workloads running in a shared cluster. Running workloads in a sandbox environment helps to insulate the host from container escapes, where an attacker exploits a vulnerability to gain access to the host system and all the processes/files running on that host.
+
+Virtual machines and userspace kernels are 2 popular approaches to sandboxing. The following sandboxing implementations are available:
+* [gVisor](https://gvisor.dev/) intercepts syscalls from containers and runs them through a userspace kernel, written in Go, with limited access to the underlying host.
+* [Kata Containers](https://katacontainers.io/) is an OCI compliant runtime that allows you to run containers in a VM. The hardware virtualization available in Kata offers an added layer of security for containers running untrusted code.
+
+### Node Isolation
+
+Node isolation is another technique that you can use to isolate tenant workloads from each other. With node isolation, a set of nodes is dedicated to running pods from a particular tenant and co-mingling of tenant pods is prohibited. This configuration reduces the noisy tenant issue, as all pods running on a node will belong to a single tenant. The risk of information disclosure is slightly lower with node isolation because an attacker that manages to escape from a container will only have access to the containers and volumes mounted to that node.
+
+Although workloads from different tenants are running on different nodes, it is important to be aware that the kubelet and (unless using virtual control planes) the API service are still shared services. A skilled attacker could use the permissions assigned to the kubelet or other pods running on the node to move laterally within the cluster and gain access to tenant workloads running on other nodes. If this is a major concern, consider implementing compensating controls such as seccomp, AppArmor or SELinux or explore using sandboxed containers or creating separate clusters for each tenant.
+
+Node isolation is a little easier to reason about from a billing standpoint than sandboxing containers since you can charge back per node rather than per pod. It also has fewer compatibility and performance issues and may be easier to implement than sandboxing containers. For example, nodes for each tenant can be configured with taints so that only pods with the corresponding toleration can run on them. A mutating webhook could then be used to automatically add tolerations and node affinities to pods deployed into tenant namespaces so that they run on a specific set of nodes designated for that tenant.
+
+Node isolation can be implemented using an [pod node selectors](/docs/concepts/scheduling-eviction/assign-pod-node/) or a [Virtual Kubelet](https://github.com/virtual-kubelet).
+
+## Additional Considerations
+
+This section discusses other Kubernetes constructs and patterns that are relevant for multi-tenancy.
+
+### API Priority and Fairness
+
+[API priority and fairness](/docs/concepts/cluster-administration/flow-control/) is a Kubernetes feature that allows you to assign a priority to certain pods running within the cluster. When an application calls the Kubernetes API, the API server evaluates the priority assigned to pod. Calls from pods with higher priority are fulfilled before those with a lower priority. When contention is high, lower priority calls can be queued until the server is less busy or you can reject the requests.
+
+Using API priority and fairness will not be very common in SaaS environments unless you are allowing customers to run applications that interface with the Kubernetes API, e.g. a controller.
+
+### Quality-of-Service (QoS) {#qos}
+
+When you’re running a SaaS application, you may want the ability to offer different Quality-of-Service (QoS) tiers of service to different tenants. For example, you may have freemium service that comes with fewer performance guarantees and features and a for-fee service tier with specific performance guarantees. Fortunately, there are several Kubernetes constructs that can help you accomplish this within a shared cluster, including network QoS, storage classes, and pod priority and preemption. The idea with each of these is to provide tenants with the quality of service that they paid for. Let’s start by looking at networking QoS.
+
+Typically, all pods on a node share a network interface. Without network QoS, some pods may consume an unfair share of the available bandwidth at the expense of other pods. The Kubernetes [bandwidth plugin](https://www.cni.dev/plugins/current/meta/bandwidth/) creates an [extended resource](/docs/concepts/configuration/manage-resources-containers/#extended-resources) for networking that allows you to use Kubernetes resources constructs, i.e. requests/limits, to apply rate limits to pods by using Linux tc queues. Be aware that the plugin is considered experimental as per the [Network Plugins](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#support-traffic-shaping) documentation and should be thoroughly tested before use in production environments.
+
+For storage QoS, you will likely want to create different storage classes or profiles with different performance characteristics. Each storage profile can be associated with a different tier of service that is optimized for different workloads such IO, redundancy, or throughput. Additional logic might be necessary to allow the tenant to associate the appropriate storage profile with their workload.
+
+Finally, there’s [pod priority and preemption](/docs/concepts/scheduling-eviction/pod-priority-preemption/) where you can assign priority values to pods. When scheduling pods, the scheduler will try evicting pods with lower priority when there are insufficient resources to schedule pods that are assigned a higher priority. If you have a use case where tenants have different service tiers in in a shared cluster e.g. free and paid, you may want to give higher priority to certain tiers using this feature.
+
+### DNS
+
+Kubernetes clusters include a Domain Name System (DNS) service to provide translations from names to IP addresses, for all Services and Pods. By default, the Kubernetes DNS service allows lookups across all namespaces in the cluster.
+
+In multi-tenant environments where tenants can access pods and other Kubernetes resources, or where
+stronger isolation is required, it may be necessary to prevent pods from looking up services in other
+Namespaces.
+You can restrict cross-namespace DNS lookups by configuring security rules for the DNS service.
+For example, CoreDNS (the default DNS service for Kubernetes) can leverage Kubernetes metadata
+to restrict queries to Pods and Services within a namespace. For more information, read an
+[example](https://github.com/coredns/policy#kubernetes-metadata-multi-tenancy-policy) of configuring
+this within the CoreDNS documentation.
+
+When a [Virtual Control Plane per tenant](#virtual-control-plane-per-tenant) model is used, a DNS service must be configured per tenant or a multi-tenant DNS service must be used. Here is an example of a [customized version of CoreDNS](https://github.com/kubernetes-sigs/cluster-api-provider-nested/blob/main/virtualcluster/doc/tenant-dns.md) that supports multiple tenants.
+
+### Operators
+
+[Operators](/docs/concepts/extend-kubernetes/operator/) are Kubernetes controllers that manage applications. Operators can simplify the management of multiple instances of an application, like a database service, which makes them a common building block in the multi-consumer (SaaS) multi-tenancy use case.
+
+Operators used in a multi-tenant environment should follow a stricter set of guidelines. Specifically, the Operator should:
+* Support creating resources within different tenant namespaces, rather than just in the namespace in which the Operator is deployed.
+* Ensure that the Pods are configured with resource requests and limits, to ensure scheduling and fairness.
+* Support configuration of Pods for data-plane isolation techniques such as node isolation and sandboxed containers.
+
+## Implementations
+
+{{% thirdparty-content %}}
+
+There are two primary ways to share a Kubernetes cluster for multi-tenancy: using Namespaces (i.e. a Namespace per tenant) or by virtualizing the control plane (i.e. Virtual control plane per tenant).
+
+In both cases, data plane isolation, and management of additional considerations such as API Priority and Fairness, is also recommended.
+
+Namespace isolation is well-supported by Kubernetes, has a negligible resource cost, and provides mechanisms to allow tenants to interact appropriately, such as by allowing service-to-service communication. However, it can be difficult to configure, and doesn't apply to Kubernetes resources that can't be namespaced, such as Custom Resource Definitions, Storage Classes, and Webhooks.
+
+Control plane virtualization allows for isolation of non-namespaced resources at the cost of somewhat higher resource usage and more difficult cross-tenant sharing. It is a good option when namespace isolation is insufficient but dedicated clusters are undesirable, due to the high cost of maintaining them (especially on-prem) or due to their higher overhead and lack of resource sharing. However, even within a virtualized control plane, you will likely see benefits by using namespaces as well.
+
+The two options are discussed in more detail in the following sections:
+
+### Namespace per tenant
+
+As previously mentioned, you should consider isolating each workload in its own namespace, even if you are using dedicated clusters or virtualized control planes. This ensures that each workload only has access to its own resources, such as Config Maps and Secrets, and allows you to tailor dedicated security policies for each workload. In addition, it is a best practice to give each namespace names that are unique across your entire fleet (i.e., even if they are in separate clusters), as this gives you the flexibility to switch between dedicated and shared clusters in the future, or to use multi-cluster tooling such as service meshes.
+
+Conversely, there are also advantages to assigning namespaces at the tenant level, not just the workload level, since there are often policies that apply to all workloads owned by a single tenant. However, this raises its own problems. Firstly, this makes it difficult or impossible to customize policies to individual workloads, and secondly, it may be challenging to come up with a single level of "tenancy" that should be given a namespace. For example, an organization may have divisions, teams, and subteams - which should be assigned a namespace?
+
+To solve this, Kubernetes provides the [Hierarchical Namespace Controller (HNC)](https://github.com/kubernetes-sigs/hierarchical-namespaces), which allows you to organize your namespaces into hierarchies, and share certain policies and resources between them. It also helps you manage namespace labels, namespace lifecycles, and delegated management, and share resource quotas across related namespaces. These capabilities can be useful in both multi-team and multi-customer scenarios.
+
+Other projects that provide similar capabilities and aid in managing namespaced resources are listed below:
+
+#### Multi-team tenancy
+
+* [Capsule](https://github.com/clastix/capsule)
+* [Kiosk](https://github.com/loft-sh/kiosk)
+
+#### Multi-customer tenancy
+
+* [Kubeplus](https://github.com/cloud-ark/kubeplus)
+
+#### Policy engines
+
+Policy engines provide features to validate and generate tenant configurations:
+
+* [Kyverno](https://kyverno.io/)
+* [OPA/Gatekeeper](https://github.com/open-policy-agent/gatekeeper)
+
+### Virtual control plane per tenant
+
+Another form of control-plane isolation is to use Kubernetes extensions to provide each tenant a virtual control-plane that enables segmentation of cluster-wide API resources. [Data plane isolation](#data-plane-isolation) techniques can be used with this model to securely manage worker nodes across tenants.
+
+The virtual control plane based multi-tenancy model extends namespace-based multi-tenancy by providing each tenant with dedicated control plane components, and hence complete control over cluster-wide resources and add-on services. Worker nodes are shared across all tenants, and are managed by a Kubernetes cluster that is normally inaccessible to tenants. This cluster is often referred to as a _super-cluster_ (or sometimes as a _host-cluster_). Since a tenant’s control-plane is not directly associated with underlying compute resources it is referred to as a _virtual control plane_.
+
+A virtual control plane typically consists of the Kubernetes API server, the controller manager, and the etcd data store. It interacts with the super cluster via a metadata synchronization controller which coordinates changes across tenant control planes and the control plane of the super--cluster.
+
+By using per-tenant dedicated control planes, most of the isolation problems due to sharing one API server among all tenants are solved. Examples include noisy neighbors in the control plane, uncontrollable blast radius of policy misconfigurations, and conflicts between cluster scope objects such as webhooks and CRDs. Hence, the virtual control plane model is particularly suitable for cases where each tenant requires access to a Kubernetes API server and expects the full cluster manageability.
+
+The improved isolation comes at the cost of running and maintaining an individual virtual control plane per tenant. In addition, per-tenant control planes do not solve isolation problems in the data plane, such as node-level noisy neighbors or security threats. These must still be addressed separately.
+
+The Kubernetes [Cluster API - Nested (CAPN)](https://github.com/kubernetes-sigs/cluster-api-provider-nested/tree/main/virtualcluster) project provides an implementation of virtual control planes.
+
+#### Other implementations
+* [Kamaji](https://github.com/clastix/kamaji)
+* [vcluster](https://github.com/loft-sh/vcluster)
+
diff --git a/content/en/docs/concepts/security/rbac-good-practices.md b/content/en/docs/concepts/security/rbac-good-practices.md
index 7361c3a163..cfcc8b3cb9 100644
--- a/content/en/docs/concepts/security/rbac-good-practices.md
+++ b/content/en/docs/concepts/security/rbac-good-practices.md
@@ -4,6 +4,7 @@ title: Role Based Access Control Good Practices
description: >
Principles and practices for good RBAC design for cluster operators.
content_type: concept
+weight: 60
---
diff --git a/content/en/docs/concepts/security/windows-security.md b/content/en/docs/concepts/security/windows-security.md
index 2126bdddaa..8c0704ac2b 100644
--- a/content/en/docs/concepts/security/windows-security.md
+++ b/content/en/docs/concepts/security/windows-security.md
@@ -6,7 +6,7 @@ reviewers:
- perithompson
title: Security For Windows Nodes
content_type: concept
-weight: 75
+weight: 40
---
diff --git a/content/en/docs/concepts/storage/ephemeral-volumes.md b/content/en/docs/concepts/storage/ephemeral-volumes.md
index a51984885e..27ea999ccf 100644
--- a/content/en/docs/concepts/storage/ephemeral-volumes.md
+++ b/content/en/docs/concepts/storage/ephemeral-volumes.md
@@ -207,7 +207,7 @@ because then the scheduler is free to choose a suitable node for
the Pod. With immediate binding, the scheduler is forced to select a node that has
access to the volume once it is available.
-In terms of [resource ownership](/docs/concepts/workloads/controllers/garbage-collection/#owners-and-dependents),
+In terms of [resource ownership](/docs/concepts/workloads/controllers/garbage-collection/#owners-dependents),
a Pod that has generic ephemeral storage is the owner of the PersistentVolumeClaim(s)
that provide that ephemeral storage. When the Pod is deleted,
the Kubernetes garbage collector deletes the PVC, which then usually
diff --git a/content/en/docs/concepts/windows/intro.md b/content/en/docs/concepts/windows/intro.md
index 91e9412759..a78a849931 100644
--- a/content/en/docs/concepts/windows/intro.md
+++ b/content/en/docs/concepts/windows/intro.md
@@ -121,7 +121,7 @@ section refers to several key workload abstractions and how they map to Windows.
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.
+ not be admitted by the API server.
* [Workload resources](/docs/concepts/workloads/controllers/) including:
* ReplicaSet
diff --git a/content/en/docs/concepts/windows/user-guide.md b/content/en/docs/concepts/windows/user-guide.md
index 450a1bb5e0..c9e5775da8 100644
--- a/content/en/docs/concepts/windows/user-guide.md
+++ b/content/en/docs/concepts/windows/user-guide.md
@@ -307,4 +307,4 @@ spec:
app: iis-2019
```
-[RuntimeClass]: https://kubernetes.io/docs/concepts/containers/runtime-class/
+[RuntimeClass]: /docs/concepts/containers/runtime-class/
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 fe50cf7e2d..7c10da0acb 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
@@ -417,5 +417,5 @@ You can use [Descheduler](https://github.com/kubernetes-sigs/descheduler) to reb
## {{% heading "whatsnext" %}}
-- [Blog: Introducing PodTopologySpread](https://kubernetes.io/blog/2020/05/introducing-podtopologyspread/)
+- [Blog: Introducing PodTopologySpread](/blog/2020/05/introducing-podtopologyspread/)
explains `maxSkew` in details, as well as bringing up some advanced usage examples.
diff --git a/content/en/docs/contribute/_index.md b/content/en/docs/contribute/_index.md
index 8627e8dd93..b4c7d838fa 100644
--- a/content/en/docs/contribute/_index.md
+++ b/content/en/docs/contribute/_index.md
@@ -145,7 +145,7 @@ class first,second white
{{ mermaid >}}
Figure 2. Preparation for your first contribution.
-- Read the [Contribution overview](/docs/contribute/new-content/overview/) to
+- Read the [Contribution overview](/docs/contribute/new-content/) to
learn about the different ways you can contribute.
- Check [`kubernetes/website` issues list](https://github.com/kubernetes/website/issues/)
for issues that make good entry points.
diff --git a/content/en/docs/contribute/advanced.md b/content/en/docs/contribute/advanced.md
index 34e0107035..b825ad5e2c 100644
--- a/content/en/docs/contribute/advanced.md
+++ b/content/en/docs/contribute/advanced.md
@@ -8,7 +8,7 @@ weight: 98
This page assumes that you understand how to
-[contribute to new content](/docs/contribute/new-content/overview) and
+[contribute to new content](/docs/contribute/new-content/) and
[review others' work](/docs/contribute/review/reviewing-prs/), and are ready
to learn about more ways to contribute. You need to use the Git command line
client and other tools for some of these tasks.
diff --git a/content/en/docs/contribute/localization.md b/content/en/docs/contribute/localization.md
index 7bfcbb6375..fa405372c2 100644
--- a/content/en/docs/contribute/localization.md
+++ b/content/en/docs/contribute/localization.md
@@ -13,14 +13,19 @@ card:
-This page shows you how to [localize](https://blog.mozilla.org/l10n/2011/12/14/i18n-vs-l10n-whats-the-diff/) the docs for a different language.
+This page shows you how to
+[localize](https://blog.mozilla.org/l10n/2011/12/14/i18n-vs-l10n-whats-the-diff/) the docs for a
+different language.
## Contribute to an existing localization
-You can help add or improve content to an existing localization. In [Kubernetes Slack](https://slack.k8s.io/) you'll find a channel for each localization. There is also a general [SIG Docs Localizations Slack channel](https://kubernetes.slack.com/messages/sig-docs-localizations) where you can say hello.
+You can help add or improve content to an existing localization. In [Kubernetes
+Slack](https://slack.k8s.io/) you'll find a channel for each localization. There is also a general
+[SIG Docs Localizations Slack channel](https://kubernetes.slack.com/messages/sig-docs-localizations)
+where you can say hello.
{{< note >}}
If you want to work on a localization that already exists, check
@@ -30,11 +35,14 @@ English original. You might see extra details there.
### Find your two-letter language code
-First, consult the [ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php) to find your localization's two-letter language code. For example, the two-letter code for Korean is `ko`.
+First, consult the [ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php)
+to find your localization's two-letter language code. For example, the two-letter code for Korean
+is `ko`.
### Fork and clone the repo
-First, [create your own fork](/docs/contribute/new-content/open-a-pr/#fork-the-repo) of the [kubernetes/website](https://github.com/kubernetes/website) repository.
+First, [create your own fork](/docs/contribute/new-content/open-a-pr/#fork-the-repo) of the
+[kubernetes/website](https://github.com/kubernetes/website) repository.
Then, clone your fork and `cd` into it:
@@ -43,7 +51,8 @@ git clone https://github.com/kubeadm join.
int32
bindPorti sets the secure port for the API Server to bind to.
+
bindPort sets the secure port for the API Server to bind to.
Defaults to 6443.
Using `kubeadm`, you can create a minimum viable Kubernetes cluster that conforms to best practices.
In fact, you can use `kubeadm` to set up a cluster that will pass the
-[Kubernetes Conformance tests](https://kubernetes.io/blog/2017/10/software-conformance-certification).
+[Kubernetes Conformance tests](/blog/2017/10/software-conformance-certification/).
`kubeadm` also supports other cluster lifecycle functions, such as
[bootstrap tokens](/docs/reference/access-authn-authz/bootstrap-tokens/) and cluster upgrades.
@@ -76,8 +76,9 @@ Install a {{< glossary_tooltip term_id="container-runtime" text="container runti
For detailed instructions and other prerequisites, see [Installing kubeadm](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/).
{{< note >}}
-If you have already installed kubeadm, run `apt-get update &&
-apt-get upgrade` or `yum update` to get the latest version of kubeadm.
+If you have already installed kubeadm, run
+`apt-get update && apt-get upgrade` or
+`yum update` to get the latest version of kubeadm.
When you upgrade, the kubelet restarts every few seconds as it waits in a crashloop for
kubeadm to tell it what to do. This crashloop is expected and normal.
@@ -91,7 +92,8 @@ to not download the default container images which are hosted at `k8s.gcr.io`.
Kubeadm has commands that can help you pre-pull the required images
when creating a cluster without an internet connection on its nodes.
-See [Running kubeadm without an internet connection](/docs/reference/setup-tools/kubeadm/kubeadm-init#without-internet-connection) for more details.
+See [Running kubeadm without an internet connection](/docs/reference/setup-tools/kubeadm/kubeadm-init#without-internet-connection)
+for more details.
Kubeadm allows you to use a custom image repository for the required images.
See [Using custom images](/docs/reference/setup-tools/kubeadm/kubeadm-init#custom-images)
@@ -360,7 +362,8 @@ The output is similar to this:
5didvk.d09sbcov8ph2amjw
```
-If you don't have the value of `--discovery-token-ca-cert-hash`, you can get it by running the following command chain on the control-plane node:
+If you don't have the value of `--discovery-token-ca-cert-hash`, you can get it by running the
+following command chain on the control-plane node:
```bash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
@@ -501,7 +504,7 @@ 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/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/).
* See the [Cluster Networking](/docs/concepts/cluster-administration/networking/) page for a bigger list
of Pod network add-ons.
@@ -575,7 +578,7 @@ Example for `kubeadm upgrade`:
or {{< skew currentVersion >}}
To learn more about the version skew between the different Kubernetes component see
-the [Version Skew Policy](https://kubernetes.io/releases/version-skew-policy/).
+the [Version Skew Policy](/releases/version-skew-policy/).
## Limitations {#limitations}
@@ -608,4 +611,6 @@ supports your chosen platform.
## Troubleshooting {#troubleshooting}
-If you are running into difficulties with kubeadm, please consult our [troubleshooting docs](/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/).
+If you are running into difficulties with kubeadm, please consult our
+[troubleshooting docs](/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/).
+
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 010f0aa94b..993ecf3878 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
@@ -182,7 +182,6 @@ name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
-repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
diff --git a/content/en/docs/setup/production-environment/tools/kubespray.md b/content/en/docs/setup/production-environment/tools/kubespray.md
index fd594b92f8..e0525562c6 100644
--- a/content/en/docs/setup/production-environment/tools/kubespray.md
+++ b/content/en/docs/setup/production-environment/tools/kubespray.md
@@ -6,7 +6,7 @@ weight: 30
-This quickstart helps to install a Kubernetes cluster hosted on GCE, Azure, OpenStack, AWS, vSphere, Packet (bare metal), Oracle Cloud Infrastructure (Experimental) or Baremetal with [Kubespray](https://github.com/kubernetes-sigs/kubespray).
+This quickstart helps to install a Kubernetes cluster hosted on GCE, Azure, OpenStack, AWS, vSphere, Equinix Metal (formerly Packet), Oracle Cloud Infrastructure (Experimental) or Baremetal with [Kubespray](https://github.com/kubernetes-sigs/kubespray).
Kubespray is a composition of [Ansible](https://docs.ansible.com/) playbooks, [inventory](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ansible.md), provisioning tools, and domain knowledge for generic OS/Kubernetes clusters configuration management tasks. Kubespray provides:
@@ -46,7 +46,7 @@ Kubespray provides the following utilities to help provision your environment:
* [Terraform](https://www.terraform.io/) scripts for the following cloud providers:
* [AWS](https://github.com/kubernetes-sigs/kubespray/tree/master/contrib/terraform/aws)
* [OpenStack](https://github.com/kubernetes-sigs/kubespray/tree/master/contrib/terraform/openstack)
- * [Packet](https://github.com/kubernetes-sigs/kubespray/tree/master/contrib/terraform/packet)
+ * [Equinix Metal](https://github.com/kubernetes-sigs/kubespray/tree/master/contrib/terraform/metal)
### (2/5) Compose an inventory file
diff --git a/content/en/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md b/content/en/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md
index 95066ac612..897d44a54f 100644
--- a/content/en/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md
+++ b/content/en/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md
@@ -127,7 +127,7 @@ the shared Volume is lost.
## {{% heading "whatsnext" %}}
-* Learn more about [patterns for composite containers](https://kubernetes.io/blog/2015/06/the-distributed-system-toolkit-patterns).
+* Learn more about [patterns for composite containers](/blog/2015/06/the-distributed-system-toolkit-patterns/).
* Learn about [composite containers for modular architecture](https://www.slideshare.net/Docker/slideshare-burns).
diff --git a/content/en/docs/tasks/administer-cluster/certificates.md b/content/en/docs/tasks/administer-cluster/certificates.md
index 44effe9340..f48ddaac66 100644
--- a/content/en/docs/tasks/administer-cluster/certificates.md
+++ b/content/en/docs/tasks/administer-cluster/certificates.md
@@ -4,124 +4,156 @@ content_type: task
weight: 20
---
-
When using client certificate authentication, you can generate certificates
manually through `easyrsa`, `openssl` or `cfssl`.
-
-
-
### easyrsa
**easyrsa** can manually generate certificates for your cluster.
-1. Download, unpack, and initialize the patched version of easyrsa3.
+1. Download, unpack, and initialize the patched version of `easyrsa3`.
- curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
- tar xzf easy-rsa.tar.gz
- cd easy-rsa-master/easyrsa3
- ./easyrsa init-pki
-1. Generate a new certificate authority (CA). `--batch` sets automatic mode;
- `--req-cn` specifies the Common Name (CN) for the CA's new root certificate.
+ ```shell
+ curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
+ tar xzf easy-rsa.tar.gz
+ cd easy-rsa-master/easyrsa3
+ ./easyrsa init-pki
+ ```
+1. Generate a new certificate authority (CA). `--batch` sets automatic mode;
+ `--req-cn` specifies the Common Name (CN) for the CA's new root certificate.
- ./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
-1. Generate server certificate and key.
- The argument `--subject-alt-name` sets the possible IPs and DNS names the API server will
- be accessed with. The `MASTER_CLUSTER_IP` is usually the first IP from the service CIDR
- that is specified as the `--service-cluster-ip-range` argument for both the API server and
- the controller manager component. The argument `--days` is used to set the number of days
- after which the certificate expires.
- The sample below also assumes that you are using `cluster.local` as the default
- DNS domain name.
+ ```shell
+ ./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
+ ```
- ./easyrsa --subject-alt-name="IP:${MASTER_IP},"\
- "IP:${MASTER_CLUSTER_IP},"\
- "DNS:kubernetes,"\
- "DNS:kubernetes.default,"\
- "DNS:kubernetes.default.svc,"\
- "DNS:kubernetes.default.svc.cluster,"\
- "DNS:kubernetes.default.svc.cluster.local" \
- --days=10000 \
- build-server-full server nopass
-1. Copy `pki/ca.crt`, `pki/issued/server.crt`, and `pki/private/server.key` to your directory.
-1. Fill in and add the following parameters into the API server start parameters:
+1. Generate server certificate and key.
- --client-ca-file=/yourdirectory/ca.crt
- --tls-cert-file=/yourdirectory/server.crt
- --tls-private-key-file=/yourdirectory/server.key
+ The argument `--subject-alt-name` sets the possible IPs and DNS names the API server will
+ be accessed with. The `MASTER_CLUSTER_IP` is usually the first IP from the service CIDR
+ that is specified as the `--service-cluster-ip-range` argument for both the API server and
+ the controller manager component. The argument `--days` is used to set the number of days
+ after which the certificate expires.
+ The sample below also assumes that you are using `cluster.local` as the default
+ DNS domain name.
+
+ ```shell
+ ./easyrsa --subject-alt-name="IP:${MASTER_IP},"\
+ "IP:${MASTER_CLUSTER_IP},"\
+ "DNS:kubernetes,"\
+ "DNS:kubernetes.default,"\
+ "DNS:kubernetes.default.svc,"\
+ "DNS:kubernetes.default.svc.cluster,"\
+ "DNS:kubernetes.default.svc.cluster.local" \
+ --days=10000 \
+ build-server-full server nopass
+ ```
+
+1. Copy `pki/ca.crt`, `pki/issued/server.crt`, and `pki/private/server.key` to your directory.
+
+1. Fill in and add the following parameters into the API server start parameters:
+
+ ```shell
+ --client-ca-file=/yourdirectory/ca.crt
+ --tls-cert-file=/yourdirectory/server.crt
+ --tls-private-key-file=/yourdirectory/server.key
+ ```
### openssl
**openssl** can manually generate certificates for your cluster.
-1. Generate a ca.key with 2048bit:
+1. Generate a ca.key with 2048bit:
- openssl genrsa -out ca.key 2048
-1. According to the ca.key generate a ca.crt (use -days to set the certificate effective time):
+ ```shell
+ openssl genrsa -out ca.key 2048
+ ```
- openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
-1. Generate a server.key with 2048bit:
+1. According to the ca.key generate a ca.crt (use `-days` to set the certificate effective time):
- openssl genrsa -out server.key 2048
-1. Create a config file for generating a Certificate Signing Request (CSR).
- Be sure to substitute the values marked with angle brackets (e.g. `Service маршрутизує трафік між Pod'ами, що входять до його складу. Service - це абстракція, завдяки якій Pod'и в Kubernetes "вмирають" і відтворюються, не впливаючи на роботу вашого застосунку. Services в Kubernetes здійснюють виявлення і маршрутизацію між залежними Pod'ами (як наприклад, фронтенд- і бекенд-компоненти застосунку).
有关为博客提供内容的信息,请参见 -https://kubernetes.io/zh/docs/contribute/new-content/blogs-case-studies/#write-a-blog-post +https://kubernetes.io/zh-cn/docs/contribute/new-content/blogs-case-studies/#write-a-blog-post {{< /comment >}} \ No newline at end of file diff --git a/content/zh-cn/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md b/content/zh-cn/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md index 90dd2a1317..f085117d1c 100644 --- a/content/zh-cn/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md +++ b/content/zh-cn/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md @@ -1,18 +1,13 @@ --- - title: " Kubernetes 采集视频 " date: 2015-03-23 slug: kubernetes-gathering-videos --- - + @@ -114,6 +112,6 @@ Thanks to the advent of software-defined overlay networks such as [flannel](http With the growing popularity of container-based microservice architectures, the lessons Google has learned from running such systems internally have become of increasing interest to the external DevOps community. By revealing some of the inner workings of our cluster manager Borg, and building our next-generation cluster manager as both an open-source project (Kubernetes) and a publicly available hosted service ([Google Container Engine](http://cloud.google.com/container-engine)), we hope these lessons can benefit the broader community outside of Google and advance the state-of-the-art in container scheduling and cluster management. --> 随着基于容器的微服务架构的日益普及,Google 从内部运行此类系统所汲取的经验教训已引起外部 DevOps 社区越来越多的兴趣。 -通过揭示集群管理器 Borg 的一些内部工作原理,并将下一代集群管理器构建为一个开源项目(Kubernetes)和一个公开可用的托管服务([Google Container Engine](http://cloud.google.com/container-engine)) ,我们希望这些课程可以使 Google 之外的广大社区受益,并推动容器调度和集群管理方面的最新技术发展。 +通过揭示集群管理器 Borg 的一些内部工作原理,并将下一代集群管理器构建为一个开源项目(Kubernetes)和一个公开可用的托管服务([Google Container Engine](http://cloud.google.com/container-engine)),我们希望这些课程可以使 Google 之外的广大社区受益,并推动容器调度和集群管理方面的最新技术发展。 diff --git a/content/zh-cn/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md b/content/zh-cn/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md index a95a116b49..323cdad934 100644 --- a/content/zh-cn/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/zh-cn/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md @@ -1,17 +1,15 @@ --- -title: " 每周 Kubernetes 社区例会笔记 - 2015年4月3日 " +title: " 每周 Kubernetes 社区例会笔记 - 2015 年 4 月 3 日 " date: 2015-04-04 slug: weekly-kubernetes-community-hangout -url: /zh/blog/2015/04/Weekly-Kubernetes-Community-Hangout --- + diff --git a/content/zh-cn/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md b/content/zh-cn/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md index 275cbead77..c715afe8b2 100644 --- a/content/zh-cn/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md +++ b/content/zh-cn/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md @@ -1,17 +1,15 @@ - --- title: " 通过 RKT 对 Kubernetes 的 AppC 支持 " date: 2015-05-04 slug: appc-support-for-kubernetes-through-rkt -url: /zh/blog/2015/05/Appc-Support-For-Kubernetes-Through-Rkt --- + + diff --git a/content/zh-cn/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md b/content/zh-cn/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md index 68a50e93c8..0ac0f14276 100644 --- a/content/zh-cn/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md +++ b/content/zh-cn/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md @@ -3,14 +3,11 @@ title: " OpenStack 上的 Kubernetes " date: 2015-05-19 slug: kubernetes-on-openstack --- - [](https://3.bp.blogspot.com/-EOrCHChZJZE/VVZzq43g6CI/AAAAAAAAF-E/JUilRHk369E/s1600/Untitled%2Bdrawing.jpg) diff --git a/content/zh-cn/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md b/content/zh-cn/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md index 8b7e00355d..39f88f204c 100644 --- a/content/zh-cn/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/zh-cn/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md @@ -3,14 +3,11 @@ title: " Kubernetes 社区每周聚会笔记- 2015年5月1日 " date: 2015-05-11 slug: weekly-kubernetes-community-hangout --- - +url: /blog/2015/07/Announcing-First-Kubernetes-Enterprise +--> 在谷歌,我们依赖 Linux 容器应用程序去运行我们的核心基础架构。所有服务,从搜索引擎到Gmail服务,都运行在容器中。事实上,我们非常喜欢容器,甚至我们的谷歌云计算引擎虚拟机也运行在容器上!由于容器对于我们的业务至关重要,我们已经与社区合作开发许多基本的容器技术(从 cgroups 到 Docker 的 LibContainer),甚至决定去构建谷歌的下一代开源容器调度技术,Kubernetes。 diff --git a/content/zh-cn/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md b/content/zh-cn/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md index 7e2bc24423..54f648fd5c 100644 --- a/content/zh-cn/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/zh-cn/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md @@ -1,19 +1,15 @@ - ---- -title: " Kubernetes社区每周环聊笔记-2015年7月31日 " -date: 2015-08-04 -slug: weekly-kubernetes-community-hangout -url: /zh/blog/2015/08/Weekly-Kubernetes-Community-Hangout ---- - + diff --git a/content/zh-cn/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md b/content/zh-cn/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md index 2fb1d70b9f..1eecaafae6 100644 --- a/content/zh-cn/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md +++ b/content/zh-cn/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md @@ -1,16 +1,13 @@ --- -title: " 使用 Puppet 管理 Kubernetes Pods,Services 和 Replication Controllers " +title: "使用 Puppet 管理 Kubernetes Pod、Service 和 Replication Controller" date: 2015-12-17 slug: managing-kubernetes-pods-services-and-replication-controllers-with-puppet --- - + diff --git a/content/zh-cn/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md b/content/zh-cn/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md index cab6c2b331..c30f22aa35 100644 --- a/content/zh-cn/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md +++ b/content/zh-cn/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md @@ -3,14 +3,11 @@ title: " Kubernetes 中自动缩放 " date: 2017-11-17 slug: autoscaling-in-kubernetes --- - -Kubernetes v1.10 使得可以通过 Beta 版本的[配置文件](/zh/docs/tasks/administer-cluster/kubelet-config-file/) +Kubernetes v1.10 使得可以通过 Beta 版本的[配置文件](/zh-cn/docs/tasks/administer-cluster/kubelet-config-file/) API 配置 kubelet。 Kubernetes 已经提供了用于在 API 服务器中存储任意文件数据的 ConfigMap 抽象。 diff --git a/content/zh-cn/blog/_posts/2018-10-01-health-checking-grpc.md b/content/zh-cn/blog/_posts/2018-10-01-health-checking-grpc.md index e8a2ce686b..0b98ea5baf 100644 --- a/content/zh-cn/blog/_posts/2018-10-01-health-checking-grpc.md +++ b/content/zh-cn/blog/_posts/2018-10-01-health-checking-grpc.md @@ -21,7 +21,7 @@ To learn more, see [Configure Liveness, Readiness and Startup Probes](/docs/task This article was originally written about an external tool to achieve the same task._ --> **更新(2021 年 12 月):** “Kubernetes 从 v1.23 开始具有内置 gRPC 健康探测。 -了解更多信息,请参阅[配置存活探针、就绪探针和启动探针](/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe)。 +了解更多信息,请参阅[配置存活探针、就绪探针和启动探针](/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe)。 本文最初是为有关实现相同任务的外部工具所写。” RuntimeClass 资源是将运行时属性显示到控制平面的重要基础。 例如,要对具有支持不同运行时间的异构节点的集群实施调度程序支持,我们可以在 RuntimeClass 定义中添加 -[NodeAffinity](/zh/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)条件。 +[NodeAffinity](/zh-cn/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)条件。 另一个需要解决的领域是管理可变资源需求以运行不同运行时的 Pod。 [Pod Overhead 提案](https://docs.google.com/document/d/1EJKT4gyl58-kzt2bnwkv08MIUZ6lkDpXcxkHqCvvAp4/preview) 是一项较早的尝试,与 RuntimeClass 设计非常吻合,并且可能会进一步推广。 @@ -128,7 +128,7 @@ RuntimeClass will be under active development at least through 2019, and we’re --> - 试试吧! 作为Alpha功能,还有一些其他设置步骤可以使用RuntimeClass。 - 有关如何使其运行,请参考 [RuntimeClass文档](/zh/docs/concepts/containers/runtime-class/#runtime-class) 。 + 有关如何使其运行,请参考 [RuntimeClass文档](/zh-cn/docs/concepts/containers/runtime-class/#runtime-class) 。 - 查看 [RuntimeClass Kubernetes 增强建议](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/runtime-class.md) 以获取更多细节设计细节。 - [沙盒隔离级别决策](https://docs.google.com/document/d/1fe7lQUjYKR0cijRmSbH_y0_l3CYPkwtQa5ViywuNo8Q/preview) 记录了最初使 RuntimeClass 成为 Pod 级别选项的思考过程。 diff --git a/content/zh-cn/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md b/content/zh-cn/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md index 90831b02b0..2f6895968a 100644 --- a/content/zh-cn/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md +++ b/content/zh-cn/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md @@ -63,8 +63,8 @@ Prow 根据文件路径自动添加语言标签。感谢 SIG Docs 贡献者 [Jun ### 团队审核 - -L10n 团队现在可以审查和批准他们自己的 PR。例如,英语的审核和批准权限在位于用于显示英语内容的顶级子文件夹中的 [OWNERS 文件中指定](https://github.com/kubernetes/website/blob/master/content/en/OWNERS)。 + +L10n 团队现在可以审查和批准他们自己的 PR。例如,英语的审核和批准权限在位于用于显示英语内容的顶级子文件夹中的 [OWNERS 文件中指定](https://github.com/kubernetes/website/blob/main/content/en/OWNERS)。 将 `OWNERS` 文件添加到子目录可以让本地化团队审查和批准更改,而无需由可能并不擅长该门语言的审阅者进行批准。 diff --git a/content/zh-cn/blog/_posts/2019-03-07-raw-block-volume-support-to-beta.md b/content/zh-cn/blog/_posts/2019-03-07-raw-block-volume-support-to-beta.md index 3ac5bc89c4..a14274d331 100644 --- a/content/zh-cn/blog/_posts/2019-03-07-raw-block-volume-support-to-beta.md +++ b/content/zh-cn/blog/_posts/2019-03-07-raw-block-volume-support-to-beta.md @@ -1,12 +1,12 @@ --- +layout: blog title: Raw Block Volume 支持进入 Beta date: 2019-03-07 +slug: raw-block-volume-support-to-beta --- + **作者: Zach Corleissen(Linux 基金会)** 去年我们对 Kubernetes 网站进行了优化,加入了[多语言内容的支持](https://kubernetes.io/blog/2018/11/08/kubernetes-docs-updates-international-edition/)。贡献者们踊跃响应,加入了多种新的本地化内容:截至 2019 年 4 月,Kubernetes 文档有了 9 个不同语言的未完成版本,其中有 6 个是 2019 年加入的。在每个 Kubernetes 文档页面的上方,读者都可以看到一个语言选择器,其中列出了所有可用语言。 -不论是完成度最高的[中文版 v1.12](https://v1-12.docs.kubernetes.io/zh/),还是最新加入的[葡萄牙文版 v1.14](https://kubernetes.io/pt/),各语言的本地化内容还未完成,这是一个进行中的项目。如果读者有兴趣对现有本地化工作提供支持,请继续阅读。 +不论是完成度最高的[中文版 v1.12](https://v1-12.docs.kubernetes.io/zh-cn/),还是最新加入的[葡萄牙文版 v1.14](https://kubernetes.io/pt/),各语言的本地化内容还未完成,这是一个进行中的项目。如果读者有兴趣对现有本地化工作提供支持,请继续阅读。 + ## 什么是本地化 翻译是以词表意的问题。而本地化在此基础之上,还包含了过程和设计方面的工作。 @@ -18,6 +40,15 @@ date: 2019-04-26 本地化很重要,能够有效的降低 Kubernetes 的采纳和支持门槛。如果能用母语阅读 Kubernetes 文档,就能更轻松的开始使用 Kubernetes,并对其发展作出贡献。 + ## 如何启动本地化工作 不同语言的本地化工作都是单独的功能——和其它 Kubernetes 功能一致,贡献者们在一个 SIG 中进行本地化工作,分享出来进行评审,并加入项目。 @@ -26,6 +57,27 @@ date: 2019-04-26 每个团队都有自己的工作流。有些团队手工完成所有的内容翻译;有些会使用带有翻译插件的编译器,并使用评审机来提供正确性的保障。SIG Docs 专注于输出的标准;这就给了本地化团队采用适合自己工作情况的工作流。这样一来,团队可以根据最佳实践进行协作,并以 Kubernetes 的社区精神进行分享。 + ## 为本地化工作添砖加瓦 如果你有兴趣为 Kubernetes 文档加入新语种的本地化内容,[Kubernetes contribution guide](https://kubernetes.io/docs/contribute/localization/) 中包含了这方面的相关内容。 @@ -46,6 +98,14 @@ date: 2019-04-26 |葡萄牙文|[#kubernetes-docs-pt](https://kubernetes.slack.com/messages/CJ21AS0NA/)| |西班牙文|[#kubernetes-docs-es](https://kubernetes.slack.com/messages/CH7GB2E3B/)| + + ## 下一步? 最新的[印地文本地化](https://kubernetes.slack.com/messages/CJ14B9BDJ/)工作正在启动。为什么不加入你的语言? diff --git a/content/zh-cn/blog/_posts/2019-06-12-contributor-summit-shanghai.md b/content/zh-cn/blog/_posts/2019-06-12-contributor-summit-shanghai.md index 1d136352bd..ae932956ae 100644 --- a/content/zh-cn/blog/_posts/2019-06-12-contributor-summit-shanghai.md +++ b/content/zh-cn/blog/_posts/2019-06-12-contributor-summit-shanghai.md @@ -2,6 +2,7 @@ layout: blog title: '欢迎参加在上海举行的贡献者峰会' date: 2019-06-11 +slug: join-us-at-the-contributor-summit-in-shanghai --- + diff --git a/content/zh-cn/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md b/content/zh-cn/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md index d8e9d2a49e..31554dbe91 100644 --- a/content/zh-cn/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md +++ b/content/zh-cn/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md @@ -69,9 +69,9 @@ 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: --> -- [实例类型](/zh/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) -- [地区](/zh/docs/reference/labels-annotations-taints/#topologykubernetesioregion) -- [区域](/zh/docs/reference/labels-annotations-taints/#topologykubernetesiozone) +- [实例类型](/zh-cn/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) +- [地区](/zh-cn/docs/reference/labels-annotations-taints/#topologykubernetesioregion) +- [区域](/zh-cn/docs/reference/labels-annotations-taints/#topologykubernetesiozone) -虽然在典型部署中,我们已按日志量更新了99%以上的日志条目,但仍有数千个日志需要更新。 选择一个您要改进的文件或目录,然后[迁移现有的日志调用以使用结构化日志](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/migration-to-structured-logging.md)。这是对Kubernetes做出第一笔贡献的好方法! +虽然在典型部署中,我们已按日志量更新了99%以上的日志条目,但仍有数千个日志需要更新。 选择一个您要改进的文件或目录,然后[迁移现有的日志调用以使用结构化日志](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/migration-to-structured-logging.md)。这是对Kubernetes做出第一笔贡献的好方法! diff --git a/content/zh-cn/blog/_posts/2020-09-30-writing-crl-scheduler/index.md b/content/zh-cn/blog/_posts/2020-09-30-writing-crl-scheduler/index.md index 05019ae42f..d2f1fa1e40 100644 --- a/content/zh-cn/blog/_posts/2020-09-30-writing-crl-scheduler/index.md +++ b/content/zh-cn/blog/_posts/2020-09-30-writing-crl-scheduler/index.md @@ -45,14 +45,14 @@ Most stateless systems, web servers for example, are created without the need to One of Kubernetes' responsibilities is to place "resources" (e.g, a disk or container) into the cluster and satisfy the constraints they request. For example: "I must be in availability zone _A_" (see [Running in multiple zones](/docs/setup/best-practices/multiple-zones/#nodes-are-labeled)), or "I can't be placed onto the same node as this other Pod" (see [Affinity and anti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)). --> Kubernetes 的职责之一是将 "资源"(如磁盘或容器)放入集群中,并满足其请求的约束。 -例如。"我必须在可用性区域 _A_"(见[在多个区域运行](/zh/docs/setup/best-practices/multiple-zone/#nodes-are-labeled)), +例如。"我必须在可用性区域 _A_"(见[在多个区域运行](/zh-cn/docs/setup/best-practices/multiple-zones/#nodes-are-labeled)), 或者 "我不能被放置到与某个 Pod 相同的节点上" -(见[亲和与反亲和](/zh/docs/setup/best-practices/multiple-zone/#nodes-are-labeled))。 +(见[亲和与反亲和](/zh-cn/docs/setup/best-practices/multiple-zones/#nodes-are-labeled))。 -作为对这些约束的补充,Kubernetes 提供了 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/), +作为对这些约束的补充,Kubernetes 提供了 [StatefulSets](/zh-cn/docs/concepts/workloads/controllers/statefulset/), 为 Pod 提供身份,以及 "跟随" 这些指定 Pod 的持久化存储。 在 StatefulSet 中,身份是由 Pod 名称末尾一个呈增序的整数处理的。 值得注意的是,这个整数必须始终是连续的:在一个 StatefulSet 中, @@ -91,7 +91,7 @@ When adding additional resources to the cluster we also distribute them across z Note that anti-affinities are satisfied no matter the order in which pods are assigned to Kubernetes nodes. In the example, pods 0, 1 and 2 were assigned to zones A, B, and C respectively, but pods 3 and 4 were assigned in a different order, to zones B and A respectively. The anti-affinity is still satisfied because the pods are still placed in different zones. --> 请注意,无论 Pod 被分配到 Kubernetes 节点的顺序如何,都会满足反亲和性。 -在这个例子中,Pod 0、1 、2 分别被分配到 A、B 、C 区,但 Pod 3 和 4 以不同的顺序被分配到 B 和 A 区。 +在这个例子中,Pod 0、1、2 分别被分配到 A、B、C 区,但 Pod 3 和 4 以不同的顺序被分配到 B 和 A 区。 反亲和性仍然得到满足,因为 Pod 仍然被放置在不同的区域。 现在,请记住,规模为 _n_ 的 StatefulSet 中的 Pods 一定具有 `[0,n)` 范围内的 id。 当把一个 StatefulSet 规模缩减了 _m_ 时,Kubernetes 会移除 _m_ 个 Pod,从最高的序号开始,向最低的序号移动, -[与它们被添加的顺序相反](/zh/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantees)。 +[与它们被添加的顺序相反](/zh-cn/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantees)。 考虑一下下面的集群拓扑结构。 我们对以下内容的综合认识是导致这种误解的原因。 -* Kubernetes [自动跨区分配 Pod](/zh/docs/setup/best-practices/multiple-zone/#pods-are-spread-across-zone) 的能力 +* Kubernetes [自动跨区分配 Pod](/zh-cn/docs/setup/best-practices/multiple-zones/#pods-are-spread-across-zones) 的能力 * 一个有 _n_ 个副本的 StatefulSet,当 Pod 被部署时,它们会按照 `{0...n-1}` 的顺序依次创建。 -更多细节见 [StatefulSet](/zh/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantees)。 +更多细节见 [StatefulSet](/zh-cn/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantees)。 -_**更新**:本文有[较新版本](/zh/blog/2022/02/17/dockershim-faq/)。_ +_**更新**:本文有[较新版本](/zh-cn/blog/2022/02/17/dockershim-faq/)。_ 当然可以,在 1.20 版本中仅有的改变就是:如果使用 Docker 运行时,启动 -[kubelet](/zh/docs/reference/command-line-tools-reference/kubelet/) +[kubelet](/zh-cn/docs/reference/command-line-tools-reference/kubelet/) 的过程中将打印一条警告日志。 另外还有一个需要关注的点,那就是当创建镜像时,系统维护或嵌入容器方面的任务将无法工作。 对于前者,可以用 [`crictl`](https://github.com/kubernetes-sigs/cri-tools) 工具作为临时替代方案 -(参见[从 docker 命令映射到 crictl](/zh/docs/reference/tools/map-crictl-dockercli/)); +(参见[从 docker 命令映射到 crictl](/zh-cn/docs/reference/tools/map-crictl-dockercli/)); 对于后者,可以用新的容器创建选项,比如 [cr](https://github.com/kubernetes-sigs/cri-tools)、 [img](https://github.com/genuinetools/img)、 @@ -315,7 +315,7 @@ For instructions on how to use containerd and CRI-O with Kubernetes, see the Kubernetes documentation on [Container Runtimes] --> 对于如何协同 Kubernetes 使用 containerd 和 CRI-O 的说明,参见 Kubernetes 文档中这部分: -[容器运行时](/zh/docs/setup/production-environment/container-runtimes)。 +[容器运行时](/zh-cn/docs/setup/production-environment/container-runtimes)。 **更新**:Kubernetes 通过 `dockershim` 对 Docker 的支持现已移除。 -有关更多信息,请阅读[移除 FAQ](/zh/dockershim)。 +有关更多信息,请阅读[移除 FAQ](/zh-cn/dockershim)。 你还可以通过专门的 [GitHub issue](https://github.com/kubernetes/kubernetes/issues/106917) 讨论弃用。 还在寻求更多答案吗?请参考我们附带的 -[移除 Dockershim 的常见问题](/zh/blog/2020/12/02/dockershim-faq/) _(2022年2月更新)_。 +[移除 Dockershim 的常见问题](/zh-cn/blog/2020/12/02/dockershim-faq/) _(2022年2月更新)_。 diff --git a/content/zh-cn/blog/_posts/2020-12-08-kubernetes-release-1.20.md b/content/zh-cn/blog/_posts/2020-12-08-kubernetes-release-1.20.md index c88a1cf745..ccc01f3b33 100644 --- a/content/zh-cn/blog/_posts/2020-12-08-kubernetes-release-1.20.md +++ b/content/zh-cn/blog/_posts/2020-12-08-kubernetes-release-1.20.md @@ -56,7 +56,7 @@ evergreen: true 请注意,作为新的内置命令,`kubectl debug` 优先于任何名为 “debug” 的 kubectl 插件。你必须重命名受影响的插件。 -`kubectl alpha debug` 现在不推荐使用,并将在后续版本中删除。更新你的脚本以使用 `kubectl debug`。 有关更多信息 `kubectl debug`,请参阅[调试正在运行的 Pod]((https://kubernetes.io/zh/docs/tasks/debug/debug-application/debug-running-pod/)。 +`kubectl alpha debug` 现在不推荐使用,并将在后续版本中删除。更新你的脚本以使用 `kubectl debug`。 有关更多信息 `kubectl debug`,请参阅[调试正在运行的 Pod]((https://kubernetes.io/zh-cn/docs/tasks/debug/debug-application/debug-running-pod/)。 ### 测试版:API 优先级和公平性 {#beta-api-priority-and-fairness) @@ -110,7 +110,7 @@ Kubernetes 社区写了一篇关于弃用的详细[博客文章](https://blog.k8 新引入的 `ExecProbeTimeout` 特性门控所提供的修复使集群操作员能够恢复到以前的行为,但这种行为将在后续版本中锁定并删除。为了恢复到以前的行为,集群运营商应该将此特性门控设置为 `false`。 -有关更多详细信息,请查看有关配置探针的[更新文档](/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes)。 +有关更多详细信息,请查看有关配置探针的[更新文档](/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes)。 ## 其他更新 {#other-updates} diff --git a/content/zh-cn/blog/_posts/2021-09-27-SIG-Node-Spotlight/index.md b/content/zh-cn/blog/_posts/2021-09-27-SIG-Node-Spotlight/index.md index c5da376b8d..1909f2cd33 100644 --- a/content/zh-cn/blog/_posts/2021-09-27-SIG-Node-Spotlight/index.md +++ b/content/zh-cn/blog/_posts/2021-09-27-SIG-Node-Spotlight/index.md @@ -168,7 +168,8 @@ SK/EH: It takes time and effort to get to any open source community. SIG Node ma ### 最后你有什么想法/资源要分享吗? SK/EH:进入任何开源社区都需要时间和努力。一开始 SIG Node 可能会因为参与者的数量、工作量和项目范围而让你不知所措。但这是完全值得的。 -请加入我们这个热情的社区! [SIG Node GitHub Repo](https://github.com/kubernetes/community/tree/master/sig-node)包含许多有用的资源,包括 Slack、邮件列表和其他联系信息。 +请加入我们这个热情的社区! [SIG Node GitHub Repo](https://github.com/kubernetes/community/tree/master/sig-node) +包含许多有用的资源,包括 Slack、邮件列表和其他联系信息。 -[Services](/zh/docs/concepts/services-networking/service/) 在 1.20 版本之前是单协议栈的, +[Services](/zh-cn/docs/concepts/services-networking/service/) 在 1.20 版本之前是单协议栈的, 因此,使用两个 IP 协议族意味着需为每个 IP 协议族创建一个 Service。在 1.20 版本中对用户体验进行简化, 重新实现了 Service 以支持两个 IP 协议族,这意味着一个 Service 就可以处理 IPv4 和 IPv6 协议。 对于 Service 而言,任意的 IPv4 和 IPv6 协议组合都可以实现负载均衡。 @@ -88,7 +88,7 @@ While Services are set according to what you configure, Pods default to whatever Even though dual-stack is possible, it is not mandatory to use it. Examples in the documentation show the variety possible in [dual-stack service configurations](/docs/concepts/services-networking/dual-stack/#dual-stack-service-configuration-scenarios). --> 尽管双协议栈是可用的,但并不强制你使用它。 -在[双协议栈服务配置](/zh/docs/concepts/services-networking/dual-stack/#dual-stack-service-configuration-scenarios) +在[双协议栈服务配置](/zh-cn/docs/concepts/services-networking/dual-stack/#dual-stack-service-configuration-scenarios) 文档中的示例列出了可能出现的各种场景. -虽然现在上游 Kubernetes 支持[双协议栈网络](/zh/docs/concepts/services-networking/dual-stack/) +虽然现在上游 Kubernetes 支持[双协议栈网络](/zh-cn/docs/concepts/services-networking/dual-stack/) 作为 GA 或稳定特性,但每个提供商对双协议栈 Kubernetes 的支持可能会有所不同。节点需要提供可路由的 IPv4/IPv6 网络接口。 -Pod 需要是双协议栈的。[网络插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) +Pod 需要是双协议栈的。[网络插件](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) 是用来为 Pod 分配 IP 地址的,所以集群需要支持双协议栈的网络插件。一些容器网络接口(CNI)插件支持双协议栈,例如 kubenet。 支持双协议栈的生态系统在不断壮大;你可以使用 -[kubeadm 创建双协议栈集群](/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support/), +[kubeadm 创建双协议栈集群](/zh-cn/docs/setup/production-environment/tools/kubeadm/dual-stack-support/), 在本地尝试用 [KIND 创建双协议栈集群](https://kind.sigs.k8s.io/docs/user/configuration/#ip-family), 还可以将双协议栈集群部署到云上(在查阅 CNI 或 kubenet 可用性的文档之后) diff --git a/content/zh-cn/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md b/content/zh-cn/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md index 6722e9bd4e..2f19fcae56 100644 --- a/content/zh-cn/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md +++ b/content/zh-cn/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md @@ -23,9 +23,9 @@ Kubernetes v1.23 introduced a new, alpha-level policy for StatefulSet spec template for cases when they should be deleted automatically when the StatefulSet is deleted or pods in the StatefulSet are scaled down. --> -Kubernetes v1.23 为 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/) +Kubernetes v1.23 为 [StatefulSets](/zh-cn/docs/concepts/workloads/controllers/statefulset/) 引入了一个新的 alpha 级策略,用来控制由 StatefulSet 规约模板生成的 -[PersistentVolumeClaims](/zh/docs/concepts/storage/persistent-volumes/) (PVCs) 的生命周期, +[PersistentVolumeClaims](/zh-cn/docs/concepts/storage/persistent-volumes/) (PVCs) 的生命周期, 用于当删除 StatefulSet 或减少 StatefulSet 中的 Pods 数量时 PVCs 应该被自动删除的场景。 -查阅[文档](/zh/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-policies) +查阅[文档](/zh-cn/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-policies) 获取更多详细信息。 Kubernetes 将在即将发布的 1.24 版本中移除 dockershim。我们很高兴能够通过支持开源容器运行时、支持更小的 kubelet 以及为使用 Kubernetes 的团队提高工程速度来重申我们的社区价值。 -如果你[使用 Docker Engine 作为 Kubernetes 集群的容器运行时](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/), +如果你[使用 Docker Engine 作为 Kubernetes 集群的容器运行时](/zh-cn/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 对你的影响](/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/)。 ## 弃用时间线 {#deprecation-timeline} -我们[正式宣布](/zh/blog/2020/12/08/kubernetes-1-20-release-announcement/)于 +我们[正式宣布](/zh-cn/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)一致, +此时间线与我们的[弃用策略](/zh-cn/docs/reference/using-api/deprecation-policy/#deprecating-a-feature-or-behavior)一致, 即规定已弃用的行为必须在其宣布弃用后至少运行 1 年。 -在这一点上,我们相信你(和 Kubernetes)从移除 dockershim 中获得的价值可以弥补你将要进行的迁移工作。 +在这一点上,我们相信你(和 Kubernetes)从移除 dockershim 中获得的价值可以弥补你将要进行的迁移工作。 现在就开始计划以避免出现意外。在 Kubernetes 1.24 发布之前,我们将提供更多更新信息和指南。 diff --git a/content/zh-cn/blog/_posts/2022-01-19-Securing-Admission-Controllers.md b/content/zh-cn/blog/_posts/2022-01-19-Securing-Admission-Controllers.md index 99dad347e5..caf4c05423 100644 --- a/content/zh-cn/blog/_posts/2022-01-19-Securing-Admission-Controllers.md +++ b/content/zh-cn/blog/_posts/2022-01-19-Securing-Admission-Controllers.md @@ -23,7 +23,7 @@ slug: secure-your-admission-controllers-and-webhooks [Admission control](/docs/reference/access-authn-authz/admission-controllers/) is a key part of Kubernetes security, alongside authentication and authorization. Webhook admission controllers are extensively used to help improve the security of Kubernetes clusters in a variety of ways including restricting the privileges of workloads and ensuring that images deployed to the cluster meet organization’s security requirements. --> -[准入控制](/zh/docs/reference/access-authn-authz/admission-controllers/)和认证、授权都是 Kubernetes 安全性的关键部分。 +[准入控制](/zh-cn/docs/reference/access-authn-authz/admission-controllers/)和认证、授权都是 Kubernetes 安全性的关键部分。 Webhook 准入控制器被广泛用于以多种方式帮助提高 Kubernetes 集群的安全性, 包括限制工作负载权限和确保部署到集群的镜像满足组织安全要求。 @@ -109,7 +109,7 @@ In most cases, the admission controller webhook used by a cluster will be instal -* **限制 [RBAC](/zh/docs/reference/access-authn-authz/rbac/) 权限**。 +* **限制 [RBAC](/zh-cn/docs/reference/access-authn-authz/rbac/) 权限**。 任何有权修改 webhook 对象的配置或准入控制器使用的工作负载的用户都可以破坏其运行。 因此,确保只有集群管理员拥有这些权限非常重要。 diff --git a/content/zh-cn/blog/_posts/2022-02-17-updated-dockershim-faq.md b/content/zh-cn/blog/_posts/2022-02-17-updated-dockershim-faq.md index 8023f68989..cca8050a31 100644 --- a/content/zh-cn/blog/_posts/2022-02-17-updated-dockershim-faq.md +++ b/content/zh-cn/blog/_posts/2022-02-17-updated-dockershim-faq.md @@ -21,7 +21,7 @@ aliases: [ '/dockershim' ] published in late 2020. The article includes updates from the v1.24 release of Kubernetes.** --> -**本文是针对 2020 年末发布的[弃用 Dockershim 的常见问题](/zh/blog/2020/12/02/dockershim-faq/)的博客更新。 +**本文是针对 2020 年末发布的[弃用 Dockershim 的常见问题](/zh-cn/blog/2020/12/02/dockershim-faq/)的博客更新。 本文包括 Kubernetes v1.24 版本的更新。** --- @@ -36,7 +36,7 @@ from Kubernetes. --> 本文介绍了一些关于从 Kubernetes 中移除 _dockershim_ 的常见问题。 该移除最初是作为 Kubernetes v1.20 -版本的一部分[宣布](/zh/blog/2020/12/08/kubernetes-1-20-release-announcement/)的。 +版本的一部分[宣布](/zh-cn/blog/2020/12/08/kubernetes-1-20-release-announcement/)的。 Kubernetes 在 [v1.24 版](/releases/#release-v1-24)移除了 dockershim。 关于细节请参考博文 -[别慌: Kubernetes 和 Docker](/zh/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。 +[别慌: Kubernetes 和 Docker](/zh-cn/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。 要确定移除 dockershim 是否会对你或你的组织的影响,可以查阅: -[检查弃用 Dockershim 对你的影响](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/) +[检查弃用 Dockershim 对你的影响](/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/) 这篇文章。 - 一篇详细说明[承诺和后续操作](/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/)的博文。 -- 检查是否存在迁移到其他 [容器运行时](/zh/docs/setup/production-environment/container-runtimes/#container-runtimes) 的主要障碍。 +- 检查是否存在迁移到其他 [容器运行时](/zh-cn/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/)。 +- 创建了一个[有关 dockershim 移除和使用 CRI 兼容运行时的列表](/zh-cn/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes/)。 该列表包括一些已经提到的文档,还涵盖了选定的外部资源(包括供应商指南)。 可以使用,在 1.20 版本中唯一的改动是,如果使用 Docker Engine, -在 [kubelet](/zh/docs/reference/command-line-tools-reference/kubelet/) +在 [kubelet](/zh-cn/docs/reference/command-line-tools-reference/kubelet/) 启动时会打印一个警告日志。 你将在 1.23 版本及以前版本看到此警告,dockershim 已在 Kubernetes 1.24 版本中移除 。 如果你运行的是 Kubernetes v1.24 或更高版本,请参阅 [我仍然可以使用 Docker Engine 作为我的容器运行时吗?](#can-i-still-use-docker-engine-as-my-container-runtime) @@ -341,7 +341,7 @@ and for the latter you can use newer container build options like [img], [builda --> 另外还有一个需要关注的点,那就是当创建镜像时,系统维护或嵌入容器方面的任务将无法工作。 对于前者,可以用 [`crictl`](https://github.com/kubernetes-sigs/cri-tools) 工具作为临时替代方案 -(参阅[从 docker cli 到 crictl 的映射](/zh/docs/tasks/debug/debug-cluster/crictl/#mapping-from-docker-cli-to-crictl))。 +(参阅[从 docker cli 到 crictl 的映射](/zh-cn/docs/tasks/debug/debug-cluster/crictl/#mapping-from-docker-cli-to-crictl))。 对于后者,可以用新的容器创建选项,例如 [img](https://github.com/genuinetools/img)、 [buildah](https://github.com/containers/buildah)、 diff --git a/content/zh-cn/blog/_posts/2022-03-31-ready-for-dockershim-removal.md b/content/zh-cn/blog/_posts/2022-03-31-ready-for-dockershim-removal.md index d5b6d10ae5..99de335164 100644 --- a/content/zh-cn/blog/_posts/2022-03-31-ready-for-dockershim-removal.md +++ b/content/zh-cn/blog/_posts/2022-03-31-ready-for-dockershim-removal.md @@ -20,12 +20,12 @@ slug: ready-for-dockershim-removal -早在 2020 年 12 月,Kubernetes 就宣布[弃用 Dockershim](/zh/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。 +早在 2020 年 12 月,Kubernetes 就宣布[弃用 Dockershim](/zh-cn/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。 在 Kubernetes 中,dockershim 是一个软件 shim, 它允许你将整个 Docker 引擎用作 Kubernetes 中的容器运行时。 在即将发布的 v1.24 版本中,我们将移除 Dockershim - 在宣布弃用之后到彻底移除这段时间内,我们至少预留了一年的时间继续支持此功能, -这符合相关的[项目策略](/zh/docs/reference/using-api/deprecation-policy/)。 +这符合相关的[项目策略](/zh-cn/docs/reference/using-api/deprecation-policy/)。 如果你是集群操作员,则该指南包含你在此版本中需要了解的实际情况。 另外还包括你需要做些什么来确保你的集群不会崩溃! @@ -38,7 +38,7 @@ Way back in December of 2020, Kubernetes announced the [deprecation of Dockershi 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. --> 如果你正在管理自己的集群或不确定此删除是否会影响到你, -请保持安全状态并[检查你对 Docker Engine 是否有依赖](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/)。 +请保持安全状态并[检查你对 Docker Engine 是否有依赖](/zh-cn/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 基金会的一种治理架构,负责围绕容器格式和运行时定义行业标准。 @@ -51,13 +51,13 @@ If you are using a managed Kubernetes service from a cloud provider, and you hav 并且你确定没有更改过容器运行时,那么你可能不需要做任何事情。 Amazon EKS、Azure AKS 和 Google GKE 现在都默认使用 containerd, 但如果你的集群中有任何自定义的节点,你要确保它们不需要被更新。 -要检查节点的运行时,请参考[查明节点上所使用的容器运行时](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/)。 +要检查节点的运行时,请参考[查明节点上所使用的容器运行时](/zh-cn/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 Engine 的遥测或安全代理](/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents/)。 -如果你仍有疑问,请先查看[弃用 Dockershim 的常见问题](/zh/blog/2022/02/17/dockershim-faq/)。 +如果你仍有疑问,请先查看[弃用 Dockershim 的常见问题](/zh-cn/blog/2022/02/17/dockershim-faq/)。 diff --git a/content/zh-cn/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md b/content/zh-cn/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md index ed73904af3..3963d3915a 100644 --- a/content/zh-cn/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md +++ b/content/zh-cn/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md @@ -67,7 +67,7 @@ the authors succinctly captured the change's impact and encouraged users to rema > Container Runtime Interface (CRI) created for Kubernetes. Docker-produced images > will continue to work in your cluster with all runtimes, as they always have. --> -在文章[别慌: Kubernetes 和 Docker](/zh/blog/2020/12/02/dont-panic-kubernetes-and-docker/) 中, +在文章[别慌: Kubernetes 和 Docker](/zh-cn/blog/2020/12/02/dont-panic-kubernetes-and-docker/) 中, 作者简洁地记述了变化的影响,并鼓励用户保持冷静: >弃用 Docker 这个底层运行时,转而支持符合为 Kubernetes 创建的容器运行接口 >Container Runtime Interface (CRI) 的运行时。 @@ -80,7 +80,7 @@ to container runtimes that are directly compatible with Kubernetes. You can find page in the Kubernetes documentation. --> 已经有一些文档指南,提供了关于从 dockershim 迁移到与 Kubernetes 直接兼容的容器运行时的有用信息。 -你可以在 Kubernetes 文档中的[从 dockershim 迁移](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/) +你可以在 Kubernetes 文档中的[从 dockershim 迁移](/zh-cn/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/)。 +和[最新的弃用 Dockershim 的常见问题](/zh-cn/blog/2022/02/17/dockershim-faq/)。 查看[你的集群准备好使用 v1.24 了吗?](/blog/2022/03/31/ready-for-dockershim-removal/) 一文, 了解如何确保你的集群在从 1.23 版本升级到 1.24 版本后继续工作。 @@ -113,7 +113,7 @@ same API is available and that APIs have a minimum lifetime as indicated by the ## Kubernetes API 删除和弃用流程 {#the-Kubernetes-api-removal-and-deprecation-process} Kubernetes 包含大量随时间演变的组件。在某些情况下,这种演变会导致 API、标志或整个特性被删除。 -为了防止用户面对重大变化,Kubernetes 贡献者采用了一项特性[弃用策略](/zh/docs/reference/using-api/deprecation-policy/)。 +为了防止用户面对重大变化,Kubernetes 贡献者采用了一项特性[弃用策略](/zh-cn/docs/reference/using-api/deprecation-policy/)。 此策略确保仅当同一 API 的较新稳定版本可用并且 API 具有以下稳定性级别所指示的最短生命周期时,才可能弃用稳定版本 API: @@ -212,14 +212,14 @@ Docker Engine dependencies. Before upgrading to v1.24, you decide to either rema ## 需要做什么 {#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 迁移](/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/)的指南。 +你可以[从查明节点上所使用的容器运行时](/zh-cn/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/) +你可以按照[检查弃用 Dockershim 对你的影响](/zh-cn/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/) 的指南。 +要么迁移到与 CRI 兼容的运行时。这是[将节点上的容器运行时从 Docker Engine 更改为 containerd](/zh-cn/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/) +kubectl 的 [`kubectl convert`](/zh-cn/docs/tasks/tools/included/kubectl-convert-overview/) 插件有助于解决弃用 API 的迁移问题。该插件方便了不同 API 版本之间清单的转换, 例如,从弃用的 API 版本到非弃用的 API 版本。关于 API 迁移过程的更多信息可以在 [已弃用 API 的迁移指南](/docs/reference/using-api/deprecation-guide/)中找到。按照 @@ -258,7 +258,7 @@ Kubernetes API 的 beta 版本,这些 API 当前为稳定版。1.25 版本还 -[Kubernetes 1.25 计划移除的 API 的官方列表](/zh/docs/reference/using-api/deprecation-guide/#v1-25)是: +[Kubernetes 1.25 计划移除的 API 的官方列表](/zh-cn/docs/reference/using-api/deprecation-guide/#v1-25)是: * The beta CronJob API (batch/v1beta1) * The beta EndpointSlice API (discovery.k8s.io/v1beta1) @@ -274,7 +274,7 @@ The official [list of API removals planned for Kubernetes 1.26](/docs/reference/ * The beta FlowSchema and PriorityLevelConfiguration APIs (flowcontrol.apiserver.k8s.io/v1beta1) * The beta HorizontalPodAutoscaler API (autoscaling/v2beta2) --> -[Kubernetes 1.25 计划移除的 API 的官方列表](/zh/docs/reference/using-api/deprecation-guide/#v1-25)是: +[Kubernetes 1.25 计划移除的 API 的官方列表](/zh-cn/docs/reference/using-api/deprecation-guide/#v1-25)是: * The beta FlowSchema 和 PriorityLevelConfiguration API (flowcontrol.apiserver.k8s.io/v1beta1) * The beta HorizontalPodAutoscaler API (autoscaling/v2beta2) @@ -297,5 +297,5 @@ Kubernetes 发行说明中宣告了弃用信息。你可以在以下版本的发 * 我们将正式宣布 [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) 文档。 +有关弃用和删除过程的信息,请查看 Kubernetes 官方[弃用策略](/zh-cn/docs/reference/using-api/deprecation-policy/#deprecating-parts-of-the-api) 文档。 diff --git a/content/zh-cn/blog/_posts/2022-05-03-dockershim-historical-context.md b/content/zh-cn/blog/_posts/2022-05-03-dockershim-historical-context.md index 5a99445271..1243b46d77 100644 --- a/content/zh-cn/blog/_posts/2022-05-03-dockershim-historical-context.md +++ b/content/zh-cn/blog/_posts/2022-05-03-dockershim-historical-context.md @@ -21,11 +21,12 @@ So what is the dockershim, and why is it going away? --> **作者:** Kat Cosgrove -自 Kubernetes v1.24 起,Dockershim 已被删除,这对项目来说是一个积极的举措。 -然而,背景对于充分理解某事很重要,无论是社交还是软件开发,这值得更深入的审查。 -除了 Kubernetes v1.24 中的 dockershim 移除之外,我们在社区中看到了一些 -混乱(有时处于恐慌级别)和对这一决定的不满,主要是由于缺乏有关此删除背景的了解。 -弃用并最终从 Kubernetes 中删除 dockershim 的决定并不是迅速或轻率地做出的。 +自 Kubernetes v1.24 起,Dockershim 已被删除,这对项目来说是一个积极的举措。 +然而,背景对于充分理解某事很重要,无论是社交还是软件开发,这值得更深入的审查。 +除了 Kubernetes v1.24 中的 dockershim 移除之外, +我们在社区中看到了一些混乱(有时处于恐慌级别)和对这一决定的不满, +主要是由于缺乏有关此删除背景的了解。弃用并最终从 Kubernetes 中删除 +dockershim 的决定并不是迅速或轻率地做出的。 尽管如此,它已经工作了很长时间,以至于今天的许多用户都比这个决定更新, 更不用提当初为何引入 dockershim 了。 @@ -34,55 +35,57 @@ So what is the dockershim, and why is it going away? -在 Kubernetes 的早期,我们只支持一个容器运行时,那个运行时就是 Docker Engine。 -那时,并没有太多其他选择,而 Docker 是使用容器的主要工具,所以这不是一个有争议的选择。 -最终,我们开始添加更多的容器运行时,比如 rkt 和 hypernetes,很明显 Kubernetes 用户 -希望选择最适合他们的运行时。 因此,Kubernetes 需要一种方法来允许集群操作员灵活地使用 -他们选择的任何运行时。 +在 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 之间的空白, +作为容器运行时的使用早于 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 的发布,正式弃用。 +然而,这个小软件 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/)。 +我们没有很好地传达这一点,不幸的是,弃用公告在社区内引起了一些恐慌。关于这对 +Docker作为一家公司意味着什么,Docker 构建的容器镜像是否仍然可以运行,以及 +Docker Engine 究竟是什么导致了社交媒体上的一场大火,人们感到困惑。 +这是我们的错;我们应该更清楚地传达当时发生的事情和原因。为了解决这个问题, +我们发布了[一篇博客](/zh-cn/blog/2020/12/02/dont-panic-kubernetes-and-docker/)和[相应的 FAQ](/zh-cn/blog/2020/12/02/dockershim-faq/) +以减轻社区的恐惧并纠正对 Docker 是什么以及容器如何在 Kubernetes 中工作的一些误解。 +由于社区的关注,Docker 和 Mirantis 共同决定继续以 +[cri-dockerd](https://www.mirantis.com/blog/the-future-of-dockershim-is-cri-dockerd/) +的形式支持 dockershim 代码,允许你在需要时继续使用 Docker Engine 作为容器运行时。 +对于想要尝试其他运行时(如 containerd 或 cri-o)的用户, +[已编写迁移文档](/zh-cn/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 承诺通过扩展文档和其他程序来解决这些问题。 事实上,这篇博文是 -这个计划的一部分。 随着如此多的最终用户成功迁移到其他运行时,以及改进的文档,我们相信每个人现在都为迁移铺平了道路。 +我们后来[调查了社区](https://kubernetes.io/blog/2021/11/12/are-you-ready-for-dockershim-removal/)[发现还有很多用户有疑问和顾虑](/zh-cn/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim)。 +作为回应,Kubernetes 维护人员和 CNCF 承诺通过扩展文档和其他程序来解决这些问题。 +事实上,这篇博文是这个计划的一部分。随着如此多的最终用户成功迁移到其他运行时,以及改进的文档, +我们相信每个人现在都为迁移铺平了道路。 -Docker 不会消失,无论是作为一种工具还是作为一家公司。 它是云原生社区的重要组成部分, -也是 Kubernetes 项目的历史。 没有他们,我们就不会是现在的样子。 也就是说,从 kubelet -中删除 dockershim 最终对社区、生态系统、项目和整个开源都有好处。 这是我们所有人齐心协力 -支持开放标准的机会,我们很高兴在 Docker 和社区的帮助下这样做。 \ No newline at end of file +Docker 不会消失,无论是作为一种工具还是作为一家公司。它是云原生社区的重要组成部分, +也是 Kubernetes 项目的历史。没有他们,我们就不会是现在的样子。也就是说,从 kubelet +中删除 dockershim 最终对社区、生态系统、项目和整个开源都有好处。 +这是我们所有人齐心协力支持开放标准的机会,我们很高兴在 Docker 和社区的帮助下这样做。 diff --git a/content/zh-cn/blog/_posts/2022-05-05-volume-expansion-ga.md b/content/zh-cn/blog/_posts/2022-05-05-volume-expansion-ga.md index 7b1872e34e..3a5ae01872 100644 --- a/content/zh-cn/blog/_posts/2022-05-05-volume-expansion-ga.md +++ b/content/zh-cn/blog/_posts/2022-05-05-volume-expansion-ga.md @@ -111,7 +111,7 @@ CSI 驱动必须在控制器或节点服务(如果合适,二者兼备) 请参阅 CSI 驱动的文档,了解其是否支持卷扩充。 有关支持卷扩充的树内(intree)卷类型, -请参阅卷扩充文档:[扩充 PVC 申领](/zh/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims)。 +请参阅卷扩充文档:[扩充 PVC 申领](/zh-cn/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims)。 -在 Kubernetes v1.24 版本中,[存储容量](/zh/docs/concepts/storage/storage-capacity/)跟踪已经成为一项正式发布的功能。 +在 Kubernetes v1.24 版本中,[存储容量](/zh-cn/docs/concepts/storage/storage-capacity/)跟踪已经成为一项正式发布的功能。 + + +**作者**:Sergey Kanzhelev (Google) + + +在 Kubernetes 1.24 中,gRPC 探针(probe)功能进入了 beta 阶段,默认情况下可用。 +现在,你可以为 gRPC 应用程序配置启动、活跃和就绪探测,而无需公开任何 HTTP 端点, +也不需要可执行文件。Kubernetes 可以通过 gRPC 直接连接到你的工作负载并查询其状态。 + + +## 一些历史 + +让管理你的工作负载的系统检查应用程序是否健康、启动是否正常,以及应用程序是否认为自己可以接收流量,是很有用的。 +在添加 gRPC 探针支持之前,Kubernetes 已经允许你通过从容器镜像内部运行可执行文件、发出 HTTP +请求或检查 TCP 连接是否成功来检查健康状况。 + + +对于大多数应用程序来说,这些检查就足够了。如果你的应用程序提供了用于运行状况(或准备就绪)检查的 +gRPC 端点,则很容易重新调整 `exec` 探针的用途,将其用于 gRPC 运行状况检查。 +在博文[在 Kubernetes 上对 gRPC 服务器进行健康检查](/zh-cn/blog/2018/10/01/health-checking-grpc-servers-on-kubernetes/)中, +Ahmet Alp Balkan 描述了如何做到这一点 —— 这种机制至今仍在工作。 + + +2018 年 8 月 21 日所[创建](https://github.com/grpc-ecosystem/grpc-health-probe/commit/2df4478982e95c9a57d5fe3f555667f4365c025d)的一种常用工具可以启用此功能, +工具于 [2018 年 9 月 19 日](https://github.com/grpc-ecosystem/grpc-health-probe/releases/tag/v0.1.0-alpha.1)首次发布。 + + +这种 gRPC 应用健康检查的方法非常受欢迎。使用 GitHub 上的基本搜索,发现了带有 `grpc_health_probe` +的 [3,626 个 Dockerfile 文件](https://github.com/search?l=Dockerfile&q=grpc_health_probe&type=code)和 +[6,621 个 yaml 文件](https://github.com/search?l=YAML&q=grpc_health_probe&type=Code)(在撰写本文时)。 +这很好地表明了该工具的受欢迎程度,以及对其本地支持的需求。 + + +Kubernetes v1.23 引入了一个 alpha 质量的实现,原生支持使用 gRPC 查询工作负载状态。 +因为这是一个 alpha 特性,所以在 1.23 版中默认是禁用的。 + + +## 使用该功能 + +我们用与其他探针类似的方式构建了 gRPC 健康检查,相信如果你熟悉 Kubernetes 中的其他探针类型, +它会[很容易使用](/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe)。 +与涉及 `grpc_health_probe` 可执行文件的解决办法相比,原生支持的健康探针有许多好处。 + + +有了原生 gRPC 支持,你不需要在镜像中下载和携带 `10MB` 的额外可执行文件。 +Exec 探针通常比 gRPC 调用慢,因为它们需要实例化一个新进程来运行可执行文件。 +当 Pod 在最大资源下运行并且在实例化新进程时遇到困难时,它还使得对边界情况的检查变得不那么智能。 + + +不过有一些限制。由于为探针配置客户端证书很难,因此不支持依赖客户端身份验证的服务。 +内置探针也不检查服务器证书,并忽略相关问题。 + + +内置检查也不能配置为忽略某些类型的错误(`grpc_health_probe` 针对不同的错误返回不同的退出代码), +并且不能“串接”以在单个探测中对多个服务运行健康检查。 + + +但是所有这些限制对于 gRPC 来说都是相当标准的,并且有简单的解决方法。 + + +## 自己试试 + +### 集群级设置 + +你现在可以尝试这个功能。要尝试原生 gRPC 探针,你可以自己启动一个启用了 +`GRPCContainerProbe` 特性门控的 Kubernetes 集群,可用的[工具](/zh-cn/docs/tasks/tools/)有很多。 + + +由于特性门控 `GRPCContainerProbe` 在 1.24 版本中是默认启用的,因此许多供应商支持此功能开箱即用。 +因此,你可以在自己选择的平台上创建 1.24 版本集群。一些供应商允许在 1.23 版本集群上启用 alpha 特性。 + + +例如,在编写本文时,你可以在 GKE 上运行测试集群来进行快速测试。 +其他供应商可能也有类似的功能,尤其是当你在 Kubernetes 1.24 版本发布很久后才阅读这篇博客时。 + + +在 GKE 上使用以下命令(注意,版本是 `1.23`,并且指定了 `enable-kubernetes-alpha`)。 + +```shell +gcloud container clusters create test-grpc \ + --enable-kubernetes-alpha \ + --no-enable-autorepair \ + --no-enable-autoupgrade \ + --release-channel=rapid \ + --cluster-version=1.23 +``` + + +你还需要配置 kubectl 来访问集群: + +```shell +gcloud container clusters get-credentials test-grpc +``` + + +### 试用该功能 + +让我们创建 Pod 来测试 gRPC 探针是如何工作的。对于这个测试,我们将使用 `agnhost` 镜像。 +这是一个 k8s 维护的镜像,可用于各种工作负载测试。例如,它有一个有用的 +[grpc-health-checking](https://github.com/kubernetes/kubernetes/blob/b2c5bd2a278288b5ef19e25bf7413ecb872577a4/test/images/agnhost/README.md#grpc-health-checking) +模块,该模块暴露了两个端口:一个是提供健康检查服务的端口,另一个是对 `make-serving` 和 +`make-not-serving` 命令做出反应的 http 端口。 + + +下面是一个 Pod 定义示例。它启用 `grpc-health-checking` 模块,暴露 5000 和 8080 端口,并配置 gRPC 就绪探针: + +``` 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 +``` + + +如果文件名为 `test.yaml`,你可以用以下命令创建 Pod,并检查它的状态。如输出片段所示,Pod 将处于就绪状态。 + +```shell +kubectl apply -f test.yaml +kubectl describe test-grpc +``` + + +输出将包含如下内容: + +``` +Conditions: + Type Status + Initialized True + Ready True + ContainersReady True + PodScheduled True +``` + + +现在让我们将健康检查端点状态更改为 `NOT_SERVING`。为了调用 Pod 的 http 端口,让我们创建一个端口转发: + +```shell +kubectl port-forward test-grpc 8080:8080 +``` + + +你可以用 `curl` 来调用这个命令。 + +```shell +curl http://localhost:8080/make-not-serving +``` + + +几秒钟后,端口状态将切换到未就绪。 + +```shell +kubectl describe pod test-grpc +``` + + +现在的输出将显示: + +``` +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") +``` + + +一旦切换回来,Pod 将在大约一秒钟后恢复到就绪状态: + +``` bsh +curl http://localhost:8080/make-serving +kubectl describe test-grpc +``` + + +输出表明 Pod 恢复为 `Ready`: + +``` +Conditions: + Type Status + Initialized True + Ready True + ContainersReady True + PodScheduled True +``` + + +Kubernetes 上这种新的内置 gRPC 健康探测,使得通过 gRPC 实现健康检查比依赖使用额外的 `exec` +探测的旧方法更容易。请阅读官方 +[文档](/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe) +了解更多信息并在该功能正式发布(GA)之前提供反馈。 + + +## 总结 + +Kubernetes 是一个流行的工作负载编排平台,我们根据反馈和需求添加功能。 +像 gRPC 探针支持这样的特性是一个小的改进,它将使许多应用程序开发人员的生活更容易,应用程序更有弹性。 +在该功能 GA(正式发布)之前,现在就试试,并给出反馈。 diff --git a/content/zh-cn/blog/_posts/2022-05-16-volume-populators-beta.md b/content/zh-cn/blog/_posts/2022-05-16-volume-populators-beta.md index 7f4e5f5b38..cb867f9837 100644 --- a/content/zh-cn/blog/_posts/2022-05-16-volume-populators-beta.md +++ b/content/zh-cn/blog/_posts/2022-05-16-volume-populators-beta.md @@ -245,7 +245,7 @@ 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. --> -[卷填充器与数据源](/zh/docs/concepts/storage/persistent-volumes/#volume-populators-and-data-sources), +[卷填充器与数据源](/zh-cn/docs/concepts/storage/persistent-volumes/#volume-populators-and-data-sources), 在有关持久卷的文档主题中,解释了如何在集群中使用此功能。 Kubernetes v1.24 引入了一个新的 alpha 级特性,可以防止未经授权的用户修改基于 Kubernetes -集群中已有的 [`VolumeSnapshot`](/zh/docs/concepts/storage/volume-snapshots/) -创建的 [`PersistentVolumeClaim`](/zh/docs/concepts/storage/persistent-volumes/) 的卷模式。 +集群中已有的 [`VolumeSnapshot`](/zh-cn/docs/concepts/storage/volume-snapshots/) +创建的 [`PersistentVolumeClaim`](/zh-cn/docs/concepts/storage/persistent-volumes/) 的卷模式。 -[卷模式](/zh/docs/concepts/storage/persistent-volumes/#volume-mode)确定卷是格式化为文件系统还是显示为原始块设备。 +[卷模式](/zh-cn/docs/concepts/storage/persistent-volumes/#volume-mode)确定卷是格式化为文件系统还是显示为原始块设备。 3. 给 `VolumeSnapshotContent` 添加 - [`snapshot.storage.kubernetes.io/allowVolumeModeChange`](/zh/docs/reference/labels-annotations-taints/#snapshot-storage-kubernetes-io-allowvolumemodechange) + [`snapshot.storage.kubernetes.io/allowVolumeModeChange`](/zh-cn/docs/reference/labels-annotations-taints/#snapshot-storage-kubernetes-io-allowvolumemodechange) 注解。 -在 Kubernetes 中,[Services](/zh/docs/concepts/services-networking/service/) +在 Kubernetes 中,[Services](/zh-cn/docs/concepts/services-networking/service/) 是一种抽象,用来暴露运行在一组 Pod 上的应用。 Service 可以有一个集群范围的虚拟 IP 地址(使用 `type: ClusterIP` 的 Service)。 客户端可以使用该虚拟 IP 地址进行连接, Kubernetes 为对该 Service 的访问流量提供负载均衡,以访问不同的后端 Pod。 diff --git a/content/zh-cn/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md b/content/zh-cn/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md index 4752273dad..a0565b93f8 100644 --- a/content/zh-cn/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md +++ b/content/zh-cn/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md @@ -22,7 +22,7 @@ block for running complex stateful applications. As the use of Kubernetes has gr 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. --> -Kubernetes [StatefulSet](/zh/docs/concepts/workloads/controllers/statefulset/), +Kubernetes [StatefulSet](/zh-cn/docs/concepts/workloads/controllers/statefulset/), 自 1.5 版本中引入并在 1.9 版本中变得稳定以来,已被广泛用于运行有状态应用。它提供固定的 Pod 身份标识、 每个 Pod 的持久存储以及 Pod 的有序部署、扩缩容和滚动更新功能。你可以将 StatefulSet 视为运行复杂有状态应用程序的原子构建块。随着 Kubernetes 的使用增多,需要 StatefulSet 的场景也越来越多。 @@ -233,7 +233,7 @@ break applications or catch them by surprise? Please [open an issue](https://git - [Enhancement Tracking Issue](https://github.com/kubernetes/enhancements/issues/961) --> ## 进一步阅读和后续步骤 {#next-steps} -- [最多不可用 Pod 数](/zh/docs/concepts/workloads/controllers/statefulset/#maximum-unavailable-pods) +- [最多不可用 Pod 数](/zh-cn/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-cn/blog/_posts/2022-06-01-annual-report-2021.md b/content/zh-cn/blog/_posts/2022-06-01-annual-report-2021.md new file mode 100644 index 0000000000..93c119560b --- /dev/null +++ b/content/zh-cn/blog/_posts/2022-06-01-annual-report-2021.md @@ -0,0 +1,51 @@ +--- +layout: blog +title: "2021 年度总结报告" +date: 2022-06-01 +slug: annual-report-summary-2021 +--- + + + +**作者:**Paris Pittman(指导委员会) + + +去年,我们发布了第一期 +[2020 年度总结报告](/blog/2021/06/28/announcing-kubernetes-community-group-annual-reports/), +现在已经是时候发布第二期了! + +[2021 年度总结报告](https://www.cncf.io/reports/kubernetes-annual-report-2021/) + + +这份总结反映了 2021 年已完成的工作以及 2022 下半年置于台面上的倡议。 +请将这份总结转发给正参与上游活动、计划云原生战略和寻求帮助的那些组织和个人。 +若要查阅特定社区小组的完整报告,请访问 +[kubernetes/community 仓库](https://github.com/kubernetes/community)查找各小组的文件夹。例如: +[sig-api-machinery/annual-report-2021.md](https://github.com/kubernetes/community/blob/master/sig-api-machinery/annual-report-2021.md) + + +你将看到这份总结报告本身涵盖的领域在增长。我们准备和制作这份报告大约用了 6 个月的时间。 +作为一个随着长短期需求而快速发展的项目,这么长的制作周期对任何人来说可能帮助都不大, +报告的价值也有所缩水。我等苦思无良策,请诸君不吝赐教: +https://github.com/kubernetes/steering/issues/242 + +参考: +[年度报告文献](https://github.com/kubernetes/community/blob/master/committee-steering/governance/annual-reports.md) diff --git a/content/zh-cn/community/code-of-conduct.md b/content/zh-cn/community/code-of-conduct.md index e5942dc439..3dc283fec8 100644 --- a/content/zh-cn/community/code-of-conduct.md +++ b/content/zh-cn/community/code-of-conduct.md @@ -15,13 +15,13 @@ community_styles_migrated: true
Kubernetes 遵循
-CNCF 行为规范。
+CNCF 行为规范。
CNCF 社区规范文本如下链接
commit 0ce4694。
如果你发现这个 CNCF 社区规范文本已经过时,请
diff --git a/content/zh-cn/docs/concepts/architecture/cloud-controller.md b/content/zh-cn/docs/concepts/architecture/cloud-controller.md
index 05caa7690f..2e1e65850f 100644
--- a/content/zh-cn/docs/concepts/architecture/cloud-controller.md
+++ b/content/zh-cn/docs/concepts/architecture/cloud-controller.md
@@ -93,12 +93,12 @@ hosts running inside your tenancy with the cloud provider. The node controller p
cluster.
-->
1. 使用从云平台 API 获取的对应服务器的唯一标识符更新 Node 对象;
-2. 利用特定云平台的信息为 Node 对象添加注解和标签,例如节点所在的
- 区域(Region)和所具有的资源(CPU、内存等等);
+2. 利用特定云平台的信息为 Node 对象添加注解和标签,例如节点所在的区域
+ (Region)和所具有的资源(CPU、内存等等);
3. 获取节点的网络地址和主机名;
-4. 检查节点的健康状况。如果节点无响应,控制器通过云平台 API 查看该节点是否
- 已从云中禁用、删除或终止。如果节点已从云中删除,则控制器从 Kubernetes 集群
- 中删除 Node 对象。
+4. 检查节点的健康状况。如果节点无响应,控制器通过云平台 API
+ 查看该节点是否已从云中禁用、删除或终止。如果节点已从云中删除,
+ 则控制器从 Kubernetes 集群中删除 Node 对象。
### 路由控制器 {#route-controller}
-Route 控制器负责适当地配置云平台中的路由,以便 Kubernetes 集群中不同节点上的
-容器之间可以相互通信。
+Route 控制器负责适当地配置云平台中的路由,以便 Kubernetes 集群中不同节点上的容器之间可以相互通信。
取决于云驱动本身,路由控制器可能也会为 Pod 网络分配 IP 地址块。
@@ -195,12 +194,14 @@ To set up Endpoints resources for the Services, it requires access to Create, Li
-->
### 服务控制器 {#authorization-service-controller}
-服务控制器监测 Service 对象的 Create、Update 和 Delete 事件,并配置
-对应服务的 Endpoints 对象。
-为了访问 Service 对象,它需要 List、Watch 访问权限;为了更新 Service 对象
-它需要 Patch 和 Update 访问权限。
-为了能够配置 Service 对应的 Endpoints 资源,它需要 Create、List、Get、Watch
-和 Update 等访问权限。
+服务控制器监测 Service 对象的 Create、Update 和 Delete 事件,
+并配置对应服务的 Endpoints 对象。
+
+为了访问 Service 对象,它需要 List 和 Watch 访问权限。
+为了更新 Service 对象,它需要 Patch 和 Update 访问权限。
+
+为了能够配置 Service 对应的 Endpoints 资源,
+它需要 Create、List、Get、Watch 和 Update 等访问权限。
`v1/Service`:
@@ -230,8 +231,8 @@ controller manager looks like:
-->
### 其他 {#authorization-miscellaneous}
-云控制器管理器的实现中,其核心部分需要创建 Event 对象的访问权限以及
-创建 ServiceAccount 资源以保证操作安全性的权限。
+在云控制器管理器的实现中,其核心部分需要创建 Event 对象的访问权限,
+并创建 ServiceAccount 资源以保证操作安全性的权限。
`v1/Event`:
@@ -318,10 +319,10 @@ To upgrade a HA control plane to use the cloud controller manager, see [Migrate
Want to know how to implement your own cloud controller manager, or extend an existing project?
-->
-[云控制器管理器的管理](/zh/docs/tasks/administer-cluster/running-cloud-controller/#cloud-controller-manager)
+[云控制器管理器的管理](/zh-cn/docs/tasks/administer-cluster/running-cloud-controller/#cloud-controller-manager)
给出了运行和管理云控制器管理器的指南。
-要升级 HA 控制平面以使用云控制器管理器,请参见 [将复制的控制平面迁移以使用云控制器管理器](/zh/docs/tasks/administer-cluster/controller-manager-leader-migration/)
+要升级 HA 控制平面以使用云控制器管理器,请参见[将复制的控制平面迁移以使用云控制器管理器](/zh-cn/docs/tasks/administer-cluster/controller-manager-leader-migration/)。
想要了解如何实现自己的云控制器管理器,或者对现有项目进行扩展么?
@@ -338,11 +339,11 @@ The implementation of the shared controllers highlighted in this document (Node,
For more information about developing plugins, see [Developing Cloud Controller Manager](/docs/tasks/administer-cluster/developing-cloud-controller-manager/).
-->
-本文中列举的共享控制器(节点控制器、路由控制器和服务控制器等)的实现以及
-其他一些生成具有 CloudProvider 接口的框架的代码,都是 Kubernetes 的核心代码。
+本文中列举的共享控制器(节点控制器、路由控制器和服务控制器等)的实现以及其他一些生成具有
+CloudProvider 接口的框架的代码,都是 Kubernetes 的核心代码。
特定于云驱动的实现虽不是 Kubernetes 核心成分,仍要实现 `CloudProvider` 接口。
关于如何开发插件的详细信息,可参考
-[开发云控制器管理器](/zh/docs/tasks/administer-cluster/developing-cloud-controller-manager/)
+[开发云控制器管理器](/zh-cn/docs/tasks/administer-cluster/developing-cloud-controller-manager/)
文档。
diff --git a/content/zh-cn/docs/concepts/architecture/control-plane-node-communication.md b/content/zh-cn/docs/concepts/architecture/control-plane-node-communication.md
index 8a92d69f2e..e8d99338ff 100644
--- a/content/zh-cn/docs/concepts/architecture/control-plane-node-communication.md
+++ b/content/zh-cn/docs/concepts/architecture/control-plane-node-communication.md
@@ -1,11 +1,11 @@
---
-title: 控制面到节点通信
+title: 节点与控制面之间的通信
content_type: concept
weight: 20
---
本文列举控制面节点(确切说是 API 服务器)和 Kubernetes 集群之间的通信路径。
-目的是为了让用户能够自定义他们的安装,以实现对网络配置的加固,使得集群能够在不可信的网络上
-(或者在一个云服务商完全公开的 IP 上)运行。
+目的是为了让用户能够自定义他们的安装,以实现对网络配置的加固,
+使得集群能够在不可信的网络上(或者在一个云服务商完全公开的 IP 上)运行。
+
-## 节点到控制面
+## 节点到控制面 {#node-to-control-plane}
Kubernetes 采用的是中心辐射型(Hub-and-Spoke)API 模式。
-所有从集群(或所运行的 Pods)发出的 API 调用都终止于 API 服务器。
+所有从节点(或运行于其上的 Pod)发出的 API 调用都终止于 API 服务器。
其它控制面组件都没有被设计为可暴露远程服务。
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)
-或[服务账号令牌](/zh/docs/reference/access-authn-authz/authentication/#service-account-tokens)的时候。
+并启用一种或多种形式的客户端[身份认证](/zh-cn/docs/reference/access-authn-authz/authentication/)机制。
+一种或多种客户端[鉴权机制](/zh-cn/docs/reference/access-authn-authz/authorization/)应该被启用,
+特别是在允许使用[匿名请求](/zh-cn/docs/reference/access-authn-authz/authentication/#anonymous-requests)
+或[服务账户令牌](/zh-cn/docs/reference/access-authn-authz/authentication/#service-account-tokens)的时候。
应该使用集群的公共根证书开通节点,这样它们就能够基于有效的客户端凭据安全地连接 API 服务器。
一种好的方法是以客户端证书的形式将客户端凭据提供给 kubelet。
-请查看 [kubelet TLS 启动引导](/zh/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/)
+请查看 [kubelet TLS 启动引导](/zh-cn/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/)
以了解如何自动提供 kubelet 客户端证书。
想要连接到 API 服务器的 Pod 可以使用服务账号安全地进行连接。
当 Pod 被实例化时,Kubernetes 自动把公共根证书和一个有效的持有者令牌注入到 Pod 里。
-`kubernetes` 服务(位于 `default` 名字空间中)配置了一个虚拟 IP 地址,用于(通过 kube-proxy)转发
-请求到 API 服务器的 HTTPS 末端。
+`kubernetes` 服务(位于 `default` 名字空间中)配置了一个虚拟 IP 地址,
+用于(通过 kube-proxy)转发请求到 API 服务器的 HTTPS 末端。
控制面组件也通过安全端口与集群的 API 服务器通信。
这样,从集群节点和节点上运行的 Pod 到控制面的连接的缺省操作模式即是安全的,
能够在不可信的网络或公网上运行。
@@ -68,26 +89,31 @@ As a result, the default operating mode for connections from the nodes and pods
-## 控制面到节点
+## 控制面到节点 {#control-plane-to-node}
从控制面(API 服务器)到节点有两种主要的通信路径。
第一种是从 API 服务器到集群中每个节点上运行的 kubelet 进程。
第二种是从 API 服务器通过它的代理功能连接到任何节点、Pod 或者服务。
-### API 服务器到 kubelet
+### API 服务器到 kubelet {#api-server-to-kubelet}
从 API 服务器到 kubelet 的连接用于:
@@ -100,29 +126,37 @@ These connections terminate at the kubelet's HTTPS endpoint. By default, the api
在非受信网络或公开网络上运行也是 **不安全的**。
-为了对这个连接进行认证,使用 `--kubelet-certificate-authority` 标志给 API
-服务器提供一个根证书包,用于 kubelet 的服务证书。
+为了对这个连接进行认证,使用 `--kubelet-certificate-authority` 标志给
+API 服务器提供一个根证书包,用于 kubelet 的服务证书。
如果无法实现这点,又要求避免在非受信网络或公共网络上进行连接,可在 API 服务器和
kubelet 之间使用 [SSH 隧道](#ssh-tunnels)。
最后,应该启用
-[kubelet 用户认证和/或鉴权](/zh/docs/reference/access-authn-authz/kubelet-authn-authz/)
+[kubelet 用户认证和/或鉴权](/zh-cn/docs/reference/access-authn-authz/kubelet-authn-authz/)
来保护 kubelet API。
-### API 服务器到节点、Pod 和服务
+### API 服务器到节点、Pod 和服务 {#api-server-to-nodes-pods-and-services}
从 API 服务器到节点、Pod 或服务的连接默认为纯 HTTP 方式,因此既没有认证,也没有加密。
这些连接可通过给 API URL 中的节点、Pod 或服务名称添加前缀 `https:` 来运行在安全的 HTTPS 连接上。
@@ -133,40 +167,53 @@ The connections from the apiserver to a node, pod, or service default to plain H
### SSH 隧道 {#ssh-tunnels}
-Kubernetes 支持使用 SSH 隧道来保护从控制面到节点的通信路径。在这种配置下,API
-服务器建立一个到集群中各节点的 SSH 隧道(连接到在 22 端口监听的 SSH 服务)
+Kubernetes 支持使用 SSH 隧道来保护从控制面到节点的通信路径。在这种配置下,
+API 服务器建立一个到集群中各节点的 SSH 隧道(连接到在 22 端口监听的 SSH 服务器)
并通过这个隧道传输所有到 kubelet、节点、Pod 或服务的请求。
这一隧道保证通信不会被暴露到集群节点所运行的网络之外。
+{{< note >}}
+
SSH 隧道目前已被废弃。除非你了解个中细节,否则不应使用。
Konnectivity 服务是对此通信通道的替代品。
+{{< /note >}}
-### Konnectivity 服务
+### Konnectivity 服务 {#konnectivity-service}
{{< feature-state for_k8s_version="v1.18" state="beta" >}}
+
作为 SSH 隧道的替代方案,Konnectivity 服务提供 TCP 层的代理,以便支持从控制面到集群的通信。
-Konnectivity 服务包含两个部分:Konnectivity 服务器和 Konnectivity 代理,分别运行在
-控制面网络和节点网络中。Konnectivity 代理建立并维持到 Konnectivity 服务器的网络连接。
+Konnectivity 服务包含两个部分:Konnectivity 服务器和 Konnectivity 代理,
+分别运行在控制面网络和节点网络中。
+Konnectivity 代理建立并维持到 Konnectivity 服务器的网络连接。
启用 Konnectivity 服务之后,所有控制面到节点的通信都通过这些连接传输。
-请浏览 [Konnectivity 服务任务](/zh/docs/tasks/extend-kubernetes/setup-konnectivity/)
+请浏览 [Konnectivity 服务任务](/zh-cn/docs/tasks/extend-kubernetes/setup-konnectivity/)
在你的集群中配置 Konnectivity 服务。
diff --git a/content/zh-cn/docs/concepts/architecture/controller.md b/content/zh-cn/docs/concepts/architecture/controller.md
index 7c11a5a0d2..fecf82269a 100644
--- a/content/zh-cn/docs/concepts/architecture/controller.md
+++ b/content/zh-cn/docs/concepts/architecture/controller.md
@@ -50,7 +50,7 @@ detail.
## 控制器模式 {#controller-pattern}
一个控制器至少追踪一种类型的 Kubernetes 资源。这些
-[对象](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/)
+[对象](/zh-cn/docs/concepts/overview/working-with-objects/kubernetes-objects/)
有一个代表期望状态的 `spec` 字段。
该资源的控制器负责确保其当前状态接近期望状态。
@@ -96,7 +96,7 @@ and eventually the work is done.
Job 是一种 Kubernetes 资源,它运行一个或者多个 {{< glossary_tooltip term_id="pod" >}},
来执行一个任务然后停止。
-(一旦[被调度了](/zh/docs/concepts/scheduling-eviction/),对 `kubelet` 来说 Pod
+(一旦[被调度了](/zh-cn/docs/concepts/scheduling-eviction/),对 `kubelet` 来说 Pod
对象就会变成了期望状态的一部分)。
在集群中,当 Job 控制器拿到新任务时,它会保证一组 Node 节点上的 `kubelet`
@@ -175,7 +175,7 @@ cloud provider APIs, and other services by
-->
在温度计的例子中,如果房间很冷,那么某个控制器可能还会启动一个防冻加热器。
就 Kubernetes 集群而言,控制面间接地与 IP 地址管理工具、存储服务、云驱动
-APIs 以及其他服务协作,通过[扩展 Kubernetes](/zh/docs/concepts/extend-kubernetes/)
+APIs 以及其他服务协作,通过[扩展 Kubernetes](/zh-cn/docs/concepts/extend-kubernetes/)
来实现这点。
-* 阅读 [Kubernetes 控制平面组件](/zh/docs/concepts/overview/components/#control-plane-components)
-* 了解 [Kubernetes 对象](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/)
+* 阅读 [Kubernetes 控制平面组件](/zh-cn/docs/concepts/overview/components/#control-plane-components)
+* 了解 [Kubernetes 对象](/zh-cn/docs/concepts/overview/working-with-objects/kubernetes-objects/)
的一些基本知识
-* 进一步学习 [Kubernetes API](/zh/docs/concepts/overview/kubernetes-api/)
+* 进一步学习 [Kubernetes API](/zh-cn/docs/concepts/overview/kubernetes-api/)
* 如果你想编写自己的控制器,请看 Kubernetes 的
- [扩展模式](/zh/docs/concepts/extend-kubernetes/#extension-patterns)。
+ [扩展模式](/zh-cn/docs/concepts/extend-kubernetes/#extension-patterns)。
diff --git a/content/zh-cn/docs/concepts/architecture/cri.md b/content/zh-cn/docs/concepts/architecture/cri.md
index 68cd082fc0..c0b3579578 100644
--- a/content/zh-cn/docs/concepts/architecture/cri.md
+++ b/content/zh-cn/docs/concepts/architecture/cri.md
@@ -46,7 +46,7 @@ flags](/docs/reference/command-line-tools-reference/kubelet)
-->
当通过 gRPC 连接到容器运行时时,kubelet 充当客户端。
运行时和镜像服务端点必须在容器运行时中可用,可以使用
-[命令行标志](/zh/docs/reference/command-line-tools-reference/kubelet)的
+[命令行标志](/zh-cn/docs/reference/command-line-tools-reference/kubelet)的
`--image-service-endpoint` 和 `--container-runtime-endpoint`
在 kubelet 中单独配置。
diff --git a/content/zh-cn/docs/concepts/architecture/garbage-collection.md b/content/zh-cn/docs/concepts/architecture/garbage-collection.md
index c095601354..d45b98fa8f 100644
--- a/content/zh-cn/docs/concepts/architecture/garbage-collection.md
+++ b/content/zh-cn/docs/concepts/architecture/garbage-collection.md
@@ -32,16 +32,16 @@ allows the clean up of resources like the following:
manager
* [Node Lease objects](/docs/concepts/architecture/nodes/#heartbeats)
-->
-* [失败的 Pod](/zh/docs/concepts/workloads/pods/pod-lifecycle/#pod-garbage-collection)
-* [已完成的 Job](/zh/docs/concepts/workloads/controllers/ttlafterfinished/)
+* [失败的 Pod](/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#pod-garbage-collection)
+* [已完成的 Job](/zh-cn/docs/concepts/workloads/controllers/ttlafterfinished/)
* [不再存在属主引用的对象](#owners-dependents)
* [未使用的容器和容器镜像](#containers-images)
-* [动态制备的、StorageClass 回收策略为 Delete 的 PV 卷](/zh/docs/concepts/storage/persistent-volumes/#delete)
-* [阻滞或者过期的 CertificateSigningRequest (CSRs)](/zh/docs/reference/access-authn-authz/certificate-signing-requests/#request-signing-process)
+* [动态制备的、StorageClass 回收策略为 Delete 的 PV 卷](/zh-cn/docs/concepts/storage/persistent-volumes/#delete)
+* [阻滞或者过期的 CertificateSigningRequest (CSRs)](/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests/#request-signing-process)
* 在以下情形中删除了的{{ 限制的字段 Allowed Values 准许的取值 Windows Pod 提供了运行
- HostProcess 容器 的能力,
- 这使得对 Windows 节点的特权访问成为可能。
- 基线策略中对宿主的特权访问是被禁止的。
- HostProcess Pod 是 Kubernetes v1.22 版本的
- alpha 特性。 限制的字段 允许的值 必须禁止共享宿主上的名字空间。 限制的字段 Allowed Values 准许的取值 必须禁止共享宿主名字空间。 限制的字段 允许的值 特权 Pod 关闭了大多数安全性机制,必须被禁止。 限制的字段 特权 Pod 会使大多数安全性机制失效,必须被禁止。 限制的字段 允许的值 准许的取值 必须禁止添加除下列字段之外的权能。 限制的字段 必须禁止添加除下列字段之外的权能。 限制的字段 允许的值 准许的取值 必须禁止 HostPath 卷。 限制的字段 必须禁止 HostPath 卷。 限制的字段 允许的值 准许的取值 应该禁止使用宿主端口,或者至少限制只能使用某确定列表中的端口。 限制的字段 Allowed Values 准许的取值 应禁止使用宿主端口,或者至少限定为已知列表。 限制的字段 允许的值 在受支持的主机上,默认使用 限制的字段 在受支持的主机上,默认使用 限制的字段 允许的值 准许的取值 设置 SELinux 类型的操作是被限制的,设置自定义的 SELinux 用户或角色选项是被禁止的。 限制的字段 设置 SELinux 类型的操作是被限制的,设置自定义的 SELinux 用户或角色选项是被禁止的。 限制的字段 允许的值 准许的取值 限制的字段 限制的字段 允许的值 准许的取值 要求使用默认的 限制的字段 要求使用默认的 限制的字段 允许的值 准许的取值 限制的字段 Allowed Values 准许的取值 Seccomp Profile 禁止被显式设置为 限制的字段 允许的值 Sysctls 可以禁用安全机制或影响宿主上所有容器,因此除了若干“安全”的子集之外,应该被禁止。
- 如果某 sysctl 是受容器或 Pod 的名字空间限制,且与节点上其他 Pod 或进程相隔离,可认为是安全的。 限制的字段 Sysctls 可以禁用安全机制或影响宿主上所有容器,因此除了若干“安全”的子集之外,应该被禁止。如果某 sysctl 是受容器或 Pod 的名字空间限制,且与节点上其他 Pod 或进程相隔离,可认为是安全的。 限制的字段 允许的值 准许的取值 In addition to restricting HostPath volumes, the restricted policy limits usage of non-core volume types to those defined through PersistentVolumes. Restricted Fields 除了限制 HostPath 卷之外,此类策略还限制可以通过 PersistentVolumes 定义的非核心卷类型。 限制的字段 Allowed Values 除了限制 HostPath 卷之外,此类策略还限制可以通过 PersistentVolumes 定义的非核心卷类型。 限制的字段 允许的值 准许的取值 Privilege escalation (such as via set-user-ID or set-group-ID file mode) should not be allowed. Restricted Fields 禁止(通过 SetUID 或 SetGID 文件模式)获得特权提升。 限制的字段 Allowed Values 禁止(通过 SetUID 或 SetGID 文件模式)获得特权提升。 限制的字段 允许的值 允许的取值 容器必须以非 root 账号运行。 限制的字段 Allowed Values 准许的取值 必须要求容器以非 root 用户运行。 限制的字段 允许的值 限制的字段 Allowed Values 准许的取值 Containers 不可以将 runAsUser 设置为 0 限制的字段 允许的字段 限制的字段 Allowed Values 准许的取值 Seccomp Profile 必须被显式设置成一个允许的值。禁止使用 限制的字段 允许的值
- Containers must drop Restricted Fields 限制的字段 Allowed Values 准许的取值 Restricted Fields 限制的字段 Allowed Values 准许的取值
- 容器组必须弃用 限制的字段 允许的值 限制的字段 允许的值 默认值:"" 默认值:"cgroupfs" 目前仅支持 CPU 和内存。更多细节可参见 http://kubernetes.io/zh/docs/user-guide/compute-resources。 目前仅支持 CPU 和内存。更多细节可参见
+ https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/ 。 默认值:Nil Service 通过一组 Pod 路由通信。Service 是一种抽象,它允许 Pod 死亡并在 Kubernetes 中复制,而不会影响应用程序。在依赖的 Pod (如应用程序中的前端和后端组件)之间进行发现和路由是由Kubernetes Service 处理的。 Service 匹配一组 Pod 是使用 标签(Label)和选择器(Selector), 它们是允许对 Kubernetes 中的对象进行逻辑操作的一种分组原语。标签(Label)是附加在对象上的键/值对,可以以多种方式使用: 本页面中的条目引用了第三方产品或项目,这些产品(项目)提供了 Kubernetes 所需的功能。Kubernetes 项目的开发人员不对这些第三方产品(项目)负责。请参阅CNCF 网站指南了解更多细节。 在提交更改建议,向本页添加新的第三方链接之前,你应该先阅读内容指南。 本页面中的条目引用了第三方产品或项目,这些产品(项目)提供了 Kubernetes 所需的功能。Kubernetes 项目的开发人员不对这些第三方产品(项目)负责。请参阅CNCF 网站指南了解更多细节。 在提交更改建议,向本页添加新的第三方链接之前,你应该先阅读内容指南。
-
-
-
-
-#### Pod 配置文件
-
-执行此映射的一种方法是使用声明式 Pod 配置。
-
-以下示例描述了如何将服务账户凭据映射到应用程序中。名为 `sa-key` 的密钥保存在一个名为
-`provider-cloud-key` 的卷中,应用程序会将该卷挂载在 `/var/secrets/provider/key.json`
-路径下。环境变量 `PROVIDER_APPLICATION_CREDENTIALS` 将映射为挂载文件的路径。
-
-```yaml
-...
- spec:
- volumes:
- - name: provider-cloud-key
- secret:
- secretName: sa-key
- containers:
-...
- volumeMounts:
- - name: provider-cloud-key
- mountPath: /var/secrets/provider
- env:
- - name: PROVIDER_APPLICATION_CREDENTIALS
- value: "/var/secrets/provider/key.json"
-```
-
-
-以下示例描述了如何将 Secret 值映射为应用程序的环境变量。
-在这个示例中,消息队列的主题名从 Secret `provider-queue-credentials` 中名为
-`topic` 的主键映射到环境变量 `TOPIC` 中。
-
-```yaml
-...
- env:
- - name: "TOPIC"
- valueFrom:
- secretKeyRef:
- name: provider-queue-credentials
- key: topic
-```
-
-## {{% heading "whatsnext" %}}
-
-
-* 如果你熟悉 {{< glossary_tooltip text="Helm Charts" term_id="helm-chart" >}},
- 可以[使用 Helm 安装服务目录](/zh/docs/tasks/service-catalog/install-service-catalog-using-helm/)
- 到 Kubernetes 集群中。或者,你可以
- [使用 SC 工具安装服务目录](/zh/docs/tasks/service-catalog/install-service-catalog-using-sc/)。
-* 查看[服务代理示例](https://github.com/openservicebrokerapi/servicebroker/blob/master/gettingStarted.md#sample-service-brokers)
-* 浏览 [kubernetes-sigs/service-catalog](https://github.com/kubernetes-sigs/service-catalog) 项目
-
-
diff --git a/content/zh-cn/docs/concepts/overview/components.md b/content/zh-cn/docs/concepts/overview/components.md
index 902edf5cd3..e7f844aaa6 100644
--- a/content/zh-cn/docs/concepts/overview/components.md
+++ b/content/zh-cn/docs/concepts/overview/components.md
@@ -63,7 +63,7 @@ for an example control plane setup that runs across multiple machines.
控制平面组件可以在集群中的任何节点上运行。
然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件,
并且不会在此计算机上运行用户容器。
-请参阅[使用 kubeadm 构建高可用性集群](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/)
+请参阅[使用 kubeadm 构建高可用性集群](/zh-cn/docs/setup/production-environment/tools/kubeadm/high-availability/)
中关于跨多机器控制平面设置的示例。
### kube-apiserver
@@ -177,7 +177,7 @@ Selected addons are described below; for an extended list of available addons, p
see [Addons](/docs/concepts/cluster-administration/addons/).
-->
下面描述众多插件中的几种。有关可用插件的完整列表,请参见
-[插件(Addons)](/zh/docs/concepts/cluster-administration/addons/)。
+[插件(Addons)](/zh-cn/docs/concepts/cluster-administration/addons/)。
### Web 界面(仪表盘) {#web-ui-dashboard}
-[Dashboard](/zh/docs/tasks/access-application-cluster/web-ui-dashboard/)
+[Dashboard](/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/)
是 Kubernetes 集群的通用的、基于 Web 的用户界面。
它使用户可以管理集群中运行的应用程序以及集群本身,
并进行故障排除。
@@ -218,7 +218,7 @@ about containers in a central database, and provides a UI for browsing that data
-->
### 容器资源监控 {#container-resource-monitoring}
-[容器资源监控](/zh/docs/tasks/debug/debug-cluster/resource-usage-monitoring/)
+[容器资源监控](/zh-cn/docs/tasks/debug/debug-cluster/resource-usage-monitoring/)
将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,
并提供浏览这些数据的界面。
@@ -230,7 +230,7 @@ saving container logs to a central log store with search/browsing interface.
-->
### 集群层面日志 {#cluster-level-logging}
-[集群层面日志](/zh/docs/concepts/cluster-administration/logging/)
+[集群层面日志](/zh-cn/docs/concepts/cluster-administration/logging/)
机制负责将容器的日志数据保存到一个集中的日志存储中,
这种集中日志存储提供搜索和浏览接口。
@@ -242,7 +242,7 @@ saving container logs to a central log store with search/browsing interface.
* Learn about [kube-scheduler](/docs/concepts/scheduling-eviction/kube-scheduler/)
* Read etcd's official [documentation](https://etcd.io/docs/)
-->
-* 进一步了解[节点](/zh/docs/concepts/architecture/nodes/)
-* 进一步了解[控制器](/zh/docs/concepts/architecture/controller/)
-* 进一步了解 [kube-scheduler](/zh/docs/concepts/scheduling-eviction/kube-scheduler/)
+* 进一步了解[节点](/zh-cn/docs/concepts/architecture/nodes/)
+* 进一步了解[控制器](/zh-cn/docs/concepts/architecture/controller/)
+* 进一步了解 [kube-scheduler](/zh-cn/docs/concepts/scheduling-eviction/kube-scheduler/)
* 阅读 etcd 官方[文档](https://etcd.io/docs/)
diff --git a/content/zh-cn/docs/concepts/overview/kubernetes-api.md b/content/zh-cn/docs/concepts/overview/kubernetes-api.md
index 52b9c32b1e..ce6a1575d7 100644
--- a/content/zh-cn/docs/concepts/overview/kubernetes-api.md
+++ b/content/zh-cn/docs/concepts/overview/kubernetes-api.md
@@ -35,8 +35,8 @@ API 服务器负责提供 HTTP API,以供用户、集群中的不同部分和
Kubernetes API 使你可以查询和操纵 Kubernetes API
中对象(例如:Pod、Namespace、ConfigMap 和 Event)的状态。
-大部分操作都可以通过 [kubectl](/zh/docs/reference/kubectl/) 命令行接口或
-类似 [kubeadm](/zh/docs/reference/setup-tools/kubeadm/) 这类命令行工具来执行,
+大部分操作都可以通过 [kubectl](/zh-cn/docs/reference/kubectl/) 命令行接口或
+类似 [kubeadm](/zh-cn/docs/reference/setup-tools/kubeadm/) 这类命令行工具来执行,
这些工具在背后也是调用 API。不过,你也可以使用 REST 调用来访问这些 API。
如果你正在编写程序来访问 Kubernetes API,可以考虑使用
-[客户端库](/zh/docs/reference/using-api/client-libraries/)之一。
+[客户端库](/zh-cn/docs/reference/using-api/client-libraries/)之一。
@@ -157,7 +157,7 @@ for the kube-apiserver component.
Kubernetes {{< param "version" >}} 提供将其 API 以 OpenAPI v3 形式发布的 beta 支持;
这一功能特性处于 beta 状态,默认被开启。
你可以通过为 kube-apiserver 组件关闭 `OpenAPIV3`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)来禁用此 beta 特性。
+[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)来禁用此 beta 特性。
一般而言,新的 API 资源和新的资源字段可以被频繁地添加进来。
删除资源或者字段则要遵从
-[API 废弃策略](/zh/docs/reference/using-api/deprecation-policy/)。
+[API 废弃策略](/zh-cn/docs/reference/using-api/deprecation-policy/)。
关于 API 版本分级的定义细节,请参阅
-[API 版本参考](/zh/docs/reference/using-api/#api-versioning)页面。
+[API 版本参考](/zh-cn/docs/reference/using-api/#api-versioning)页面。
-1. 你可以使用[自定义资源](/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
+1. 你可以使用[自定义资源](/zh-cn/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
来以声明式方式定义 API 服务器如何提供你所选择的资源 API。
1. 你也可以选择实现自己的
- [聚合层](/zh/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/)
+ [聚合层](/zh-cn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/)
来扩展 Kubernetes API。
## {{% heading "whatsnext" %}}
@@ -323,11 +323,11 @@ The Kubernetes API can be extended in one of two ways:
[API changes](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#readme).
-->
- 了解如何通过添加你自己的
- [CustomResourceDefinition](/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/)
+ [CustomResourceDefinition](/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/)
来扩展 Kubernetes API。
-- [控制 Kubernetes API 访问](/zh/docs/concepts/security/controlling-access/)页面描述了集群如何针对
+- [控制 Kubernetes API 访问](/zh-cn/docs/concepts/security/controlling-access/)页面描述了集群如何针对
API 访问管理身份认证和鉴权。
-- 通过阅读 [API 参考](/zh/docs/reference/kubernetes-api/)了解 API 端点、资源类型以及示例。
+- 通过阅读 [API 参考](/zh-cn/docs/reference/kubernetes-api/)了解 API 端点、资源类型以及示例。
- 阅读 [API 变更(英文)](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#readme)
以了解什么是兼容性的变更以及如何变更 API。
diff --git a/content/zh-cn/docs/concepts/overview/what-is-kubernetes.md b/content/zh-cn/docs/concepts/overview/what-is-kubernetes.md
index e26ea7c861..25feebb7fc 100644
--- a/content/zh-cn/docs/concepts/overview/what-is-kubernetes.md
+++ b/content/zh-cn/docs/concepts/overview/what-is-kubernetes.md
@@ -273,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-cn/docs/concepts/overview/components/)
+* 开始[Kubernetes 的建置](/zh-cn/docs/setup/)吧!
diff --git a/content/zh-cn/docs/concepts/overview/working-with-objects/annotations.md b/content/zh-cn/docs/concepts/overview/working-with-objects/annotations.md
index 4d2ff7fc6f..c8a03e0bc6 100644
--- a/content/zh-cn/docs/concepts/overview/working-with-objects/annotations.md
+++ b/content/zh-cn/docs/concepts/overview/working-with-objects/annotations.md
@@ -163,5 +163,5 @@ spec:
-* 进一步了解[标签和选择算符](/zh/docs/concepts/overview/working-with-objects/labels/)。
+* 进一步了解[标签和选择算符](/zh-cn/docs/concepts/overview/working-with-objects/labels/)。
diff --git a/content/zh-cn/docs/concepts/overview/working-with-objects/field-selectors.md b/content/zh-cn/docs/concepts/overview/working-with-objects/field-selectors.md
index f5a78976da..35fc5cdda4 100644
--- a/content/zh-cn/docs/concepts/overview/working-with-objects/field-selectors.md
+++ b/content/zh-cn/docs/concepts/overview/working-with-objects/field-selectors.md
@@ -11,7 +11,7 @@ weight: 60
_Field selectors_ let you [select Kubernetes resources](/docs/concepts/overview/working-with-objects/kubernetes-objects) based on the value of one or more resource fields. Here are some example field selector queries:
-->
“字段选择器(Field selectors)”允许你根据一个或多个资源字段的值
-[筛选 Kubernetes 资源](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects)。
+[筛选 Kubernetes 资源](/zh-cn/docs/concepts/overview/working-with-objects/kubernetes-objects)。
下面是一些使用字段选择器查询的例子:
* `metadata.name=my-service`
@@ -21,7 +21,7 @@ _Field selectors_ let you [select Kubernetes resources](/docs/concepts/overview/
-下面这个 `kubectl` 命令将筛选出 [`status.phase`](/zh/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase)
+下面这个 `kubectl` 命令将筛选出 [`status.phase`](/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase)
字段值为 `Running` 的所有 Pod:
```shell
@@ -81,7 +81,7 @@ As with [label](/docs/concepts/overview/working-with-objects/labels) and other s
-->
## 链式选择器 {#chained-selectors}
-同[标签](/zh/docs/concepts/overview/working-with-objects/labels/)和其他选择器一样,
+同[标签](/zh-cn/docs/concepts/overview/working-with-objects/labels/)和其他选择器一样,
字段选择器可以通过使用逗号分隔的列表组成一个选择链。
下面这个 `kubectl` 命令将筛选 `status.phase` 字段不等于 `Running` 同时
`spec.restartPolicy` 字段等于 `Always` 的所有 Pod:
diff --git a/content/zh-cn/docs/concepts/overview/working-with-objects/finalizers.md b/content/zh-cn/docs/concepts/overview/working-with-objects/finalizers.md
index 6a0a784fcf..21654acda9 100644
--- a/content/zh-cn/docs/concepts/overview/working-with-objects/finalizers.md
+++ b/content/zh-cn/docs/concepts/overview/working-with-objects/finalizers.md
@@ -87,7 +87,7 @@ Kubernetes 清除 `pv-protection` Finalizer,控制器就会删除该卷。
## Owner references, labels, and finalizers {#owners-labels-finalizers}
Like {{控制(Control)
策略(Policy)
-
+
-
HostProcess
-
+ Windows Pod 提供了运行 HostProcess 容器 的能力,这使得对 Windows 节点的特权访问成为可能。Baseline 策略中禁止对宿主的特权访问。{{< feature-state for_k8s_version="v1.23" state="beta" >}}
+
+
- spec.securityContext.windowsOptions.hostProcessspec.containers[*].securityContext.windowsOptions.hostProcessspec.initContainers[*].securityContext.windowsOptions.hostProcessspec.ephemeralContainers[*].securityContext.windowsOptions.hostProcess
-
- -->
- false
-
-
- spec.securityContext.windowsOptions.hostProcessspec.containers[*].securityContext.windowsOptions.hostProcessspec.initContainers[*].securityContext.windowsOptions.hostProcessspec.ephemeralContainers[*].securityContext.windowsOptions.hostProcess
-
false
-
-
宿主名字空间
- 宿主名字空间
+
+
- -->
-
- spec.hostNetworkspec.hostPIDspec.hostIPC
-
- false
-
-
- spec.hostNetworkspec.hostPIDspec.hostIPC
-
false
-
-
特权容器
-
+ 特权容器
-
- spec.containers[*].securityContext.privilegedspec.initContainers[*].securityContext.privilegedspec.ephemeralContainers[*].securityContext.privileged
-
false
-
-
权能
-
+ 权能
-
- spec.containers[*].securityContext.capabilities.addspec.initContainers[*].securityContext.capabilities.addspec.ephemeralContainers[*].securityContext.capabilities.add
-
AUDIT_WRITECHOWNDAC_OVERRIDE
-
-
HostPath 卷
-
+ HostPath 卷
-
+
- spec.volumes[*].hostPath
-
-
-
宿主端口
- 宿主端口
+
+ -->
-
- spec.containers[*].ports[*].hostPortspec.initContainers[*].ports[*].hostPortspec.ephemeralContainers[*].ports[*].hostPort
-
- 0
-
-
- spec.containers[*].ports[*].hostPortspec.initContainers[*].ports[*].hostPortspec.ephemeralContainers[*].ports[*].hostPort
-
0
-
AppArmor
-
-
runtime/default AppArmor Profile。
- 基线策略应避免覆盖或者禁用默认策略,以及限制覆盖一些 Profile 集合的权限。runtime/default AppArmor 配置。Baseline 策略应避免覆盖或者禁用默认策略,以及限制覆盖一些配置集合的权限。
- metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"]
-
runtime/defaultlocalhost/*
-
SELinux
-
-
- spec.securityContext.seLinuxOptions.typespec.containers[*].securityContext.seLinuxOptions.typespec.initContainers[*].securityContext.seLinuxOptions.typespec.ephemeralContainers[*].securityContext.seLinuxOptions.type
-
container_tcontainer_init_tcontainer_kvm_t
-
- spec.securityContext.seLinuxOptions.userspec.containers[*].securityContext.seLinuxOptions.userspec.initContainers[*].securityContext.seLinuxOptions.rolespec.ephemeralContainers[*].securityContext.seLinuxOptions.role
-
-
-
-
+ /proc 挂载类型/proc挂载类型
-
/proc 掩码以减小攻击面。/proc 掩码以减小攻击面。
- spec.containers[*].securityContext.procMountspec.initContainers[*].securityContext.procMountspec.ephemeralContainers[*].securityContext.procMount
-
Default
Seccomp
- Seccomp 配置必须不能显式设置为 Unconfined。
+
- spec.securityContext.seccompProfile.typespec.containers[*].securityContext.seccompProfile.typespec.initContainers[*].securityContext.seccompProfile.typespec.ephemeralContainers[*].securityContext.seccompProfile.type
-
- -->
- RuntimeDefaultLocalhost
- Unconfined。
-
- spec.securityContext.seccompProfile.typespec.containers[*].securityContext.seccompProfile.typespec.initContainers[*].securityContext.seccompProfile.typespec.ephemeralContainers[*].securityContext.seccompProfile.type
-
@@ -488,32 +305,15 @@ fail validation.
RuntimeDefaultLocalhost
Sysctls
-
-
- spec.securityContext.sysctls[*].name
-
kernel.shm_rmid_forcednet.ipv4.ip_local_port_rangenet.ipv4.ip_unprivileged_port_start
-
-
+
-
-
控制(Control)
-
- 策略(Policy)
+ 控制
+ 策略
-
-
基线策略的所有要求。
+ Baseline 策略的所有要求。
- 卷类型
- -->
-
- spec.volumes[*]spec.volumes[*] list must set one of the following fields to a non-null value:
-
-
- spec.volumes[*].configMapspec.volumes[*].csispec.volumes[*].downwardAPIspec.volumes[*].emptyDirspec.volumes[*].ephemeralspec.volumes[*].persistentVolumeClaimspec.volumes[*].projectedspec.volumes[*].secret卷类型
-
-
-
- spec.volumes[*]spec.volumes[*] 列表中的每个条目必须将下面字段之一设置为非空值:
+ spec.volumes[*] 列表中的每个条目必须将下面字段之一设置为非空值:
spec.volumes[*].configMapspec.volumes[*].csi
- 特权提升(v1.8+)
- -->
-
- spec.containers[*].securityContext.allowPrivilegeEscalationspec.initContainers[*].securityContext.allowPrivilegeEscalationspec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation
-
- false特权提升(v1.8+)
-
-
-
-
- spec.containers[*].securityContext.allowPrivilegeEscalationspec.initContainers[*].securityContext.allowPrivilegeEscalationspec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation
false
-
-
以非 root 账号运行
- 以非 root 账号运行
+
+ -->
-
- spec.securityContext.runAsNonRootspec.containers[*].securityContext.runAsNonRootspec.initContainers[*].securityContext.runAsNonRootspec.ephemeralContainers[*].securityContext.runAsNonRoot
- The container fields may be undefined/truenil if the pod-level
- spec.securityContext.runAsNonRoot is set to true.
-
-
-
-
- spec.securityContext.runAsNonRootspec.containers[*].securityContext.runAsNonRootspec.initContainers[*].securityContext.runAsNonRootspec.ephemeralContainers[*].securityContext.runAsNonRoot
-
-
- 如果 Pod 级别 truespec.securityContext.runAsNonRoot 设置为
- true,则允许容器组的安全上下文字段设置为 未定义/nil。
+ 如果 Pod 级别 spec.securityContext.runAsNonRoot 设置为 true,则允许容器组的安全上下文字段设置为 未定义/nil。
-
-
非 root 用户(v1.23+)
+ 非 root 用户(v1.23+)
- 容器不可以将 runAsUser 设置为 0
+ -->
-
- spec.securityContext.runAsUserspec.containers[*].securityContext.runAsUserspec.initContainers[*].securityContext.runAsUserspec.ephemeralContainers[*].securityContext.runAsUser
-
- undefined/null
-
- spec.securityContext.runAsUserspec.containers[*].securityContext.runAsUserspec.initContainers[*].securityContext.runAsUserspec.ephemeralContainers[*].securityContext.runAsUser
-
未定义/空值
- Seccomp (v1.19+)
- Seccomp Profile 必须被显式设置成一个允许的值。禁止使用 -->
- Unconfined Profile 或者指定 不存在的 Profile。
+
- spec.securityContext.seccompProfile.typespec.containers[*].securityContext.seccompProfile.typespec.initContainers[*].securityContext.seccompProfile.typespec.ephemeralContainers[*].securityContext.seccompProfile.type
- The container fields may be undefined/RuntimeDefaultLocalhostnil if the pod-level
- spec.securityContext.seccompProfile.type field is set appropriately.
- Conversely, the pod-level field may be undefined/nil if _all_ container-
- level fields are set.
+ 如果 Pod 级别的 spec.securityContext.seccompProfile.type 已设置得当,容器级别的安全上下文字段可以为 未定义/nil。反而言之,如果 nil。
- Unconfined
- Profile 或者指定 不存在的 Profile。
-
- spec.securityContext.seccompProfile.typespec.containers[*].securityContext.seccompProfile.typespec.initContainers[*].securityContext.seccompProfile.typespec.ephemeralContainers[*].securityContext.seccompProfile.type
-
-
- 如果 Pod 级别的 RuntimeDefaultLocalhostspec.securityContext.seccompProfile.type
- 已设置得当,容器级别的安全上下文字段可以为 未定义/nil。
- 反过来说,如果 _所有的_ 容器级别的安全上下文字段已设置,则 Pod 级别的字段可为 未定义/nil。
-
-
+
-
- 权能(v1.22+)
- 权能(v1.22+)
+
-->
- ALL capabilities, and are only permitted to add back
- the NET_BIND_SERVICE capability.
+ 容器必须弃用 ALL 权能,并且只允许添加 NET_BIND_SERVICE 权能。
- spec.containers[*].securityContext.capabilities.dropspec.initContainers[*].securityContext.capabilities.dropspec.ephemeralContainers[*].securityContext.capabilities.drop
-
ALLALL 在内的任意权能列表。
-
- spec.containers[*].securityContext.capabilities.addspec.initContainers[*].securityContext.capabilities.addspec.ephemeralContainers[*].securityContext.capabilities.add
-
- NET_BIND_SERVICE
-
@@ -833,13 +507,19 @@ of individual policies are not defined here.
随着相关机制的成熟,这些机制会按策略分别定义在下面。特定策略的实施方法不在这里定义。
-[**Pod 安全性准入控制器**](/zh/docs/concepts/security/pod-security-admission/)
+
+[**Pod 安全性准入控制器**](/zh-cn/docs/concepts/security/pod-security-admission/)
- {{< example file="security/podsecurity-privileged.yaml" >}}Privileged 名字空间{{< /example >}}
- {{< example file="security/podsecurity-baseline.yaml" >}}Baseline 名字空间{{< /example >}}
- {{< example file="security/podsecurity-restricted.yaml" >}}Restricted 名字空间{{< /example >}}
-[**PodSecurityPolicy**](/zh/docs/concepts/security/pod-security-policy/) (已弃用)
+
+[**PodSecurityPolicy**](/zh-cn/docs/concepts/security/pod-security-policy/) (已弃用)
- {{< example file="policy/privileged-psp.yaml" >}}Privileged{{< /example >}}
- {{< example file="policy/baseline-psp.yaml" >}}Baseline{{< /example >}}
@@ -896,7 +576,7 @@ in the Pod manifest, and represent parameters to the container runtime.
-->
### 安全策略与安全上下文的区别是什么?
-[安全上下文](/zh/docs/tasks/configure-pod-container/security-context/)在运行时配置 Pod
+[安全上下文](/zh-cn/docs/tasks/configure-pod-container/security-context/)在运行时配置 Pod
和容器。安全上下文是在 Pod 清单中作为 Pod 和容器规约的一部分来定义的,
所代表的是传递给容器运行时的参数。
@@ -908,8 +588,8 @@ built-in [Pod Security Admission Controller](/docs/concepts/security/pod-securit
-->
安全策略则是控制面用来对安全上下文以及安全性上下文之外的参数实施某种设置的机制。
在 2020 年 7 月,
-[Pod 安全性策略](/zh/docs/concepts/security/pod-security-policy/)已被废弃,
-取而代之的是内置的 [Pod 安全性准入控制器](/zh/docs/concepts/security/pod-security-admission/)。
+[Pod 安全性策略](/zh-cn/docs/concepts/security/pod-security-policy/)已被废弃,
+取而代之的是内置的 [Pod 安全性准入控制器](/zh-cn/docs/concepts/security/pod-security-admission/)。
-### 沙箱(Sandboxed) Pod 怎么处理?
+### 沙箱(Sandboxed)Pod 怎么处理? {#what-about-sandboxed-pods}
现在还没有 API 标准来控制 Pod 是否被视作沙箱化 Pod。
沙箱 Pod 可以通过其是否使用沙箱化运行时(如 gVisor 或 Kata Container)来辨别,
diff --git a/content/zh-cn/docs/concepts/security/rbac-good-practices.md b/content/zh-cn/docs/concepts/security/rbac-good-practices.md
index 3e9ed6ef07..a8ccbaca4e 100644
--- a/content/zh-cn/docs/concepts/security/rbac-good-practices.md
+++ b/content/zh-cn/docs/concepts/security/rbac-good-practices.md
@@ -3,6 +3,7 @@ title: 基于角色的访问控制良好实践
description: >
为集群操作人员提供的良好的 RBAC 设计原则和实践。
content_type: concept
+weight: 60
---
@@ -31,7 +33,7 @@ Kubernetes {{< glossary_tooltip text="RBAC" term_id="rbac" >}}
降低因过多权限而导致安全事件的风险。
此文档的良好实践应该与通用
-[RBAC 文档](/zh/docs/reference/access-authn-authz/rbac/#restrictions-on-role-creation-or-update)一起阅读。
+[RBAC 文档](/zh-cn/docs/reference/access-authn-authz/rbac/#restrictions-on-role-creation-or-update)一起阅读。
@@ -74,7 +76,7 @@ some general rules that can be applied are :
由于 Kubernetes 是一个可扩展的系统,因此通过通配符来授予访问权限不仅会授予集群中当前的所有对象类型,
还包含所有未来被创建的所有对象类型。
- 管理员不应使用 `cluster-admin` 账号,除非特别需要。为低特权帐户提供
- [伪装权限](/zh/docs/reference/access-authn-authz/authentication/#user-impersonation)
+ [伪装权限](/zh-cn/docs/reference/access-authn-authz/authentication/#user-impersonation)
可以避免意外修改集群资源。
- 避免将用户添加到 `system:masters` 组。任何属于此组成员的用户都会绕过所有 RBAC 权限检查,
始终具有不受限制的超级用户访问权限,并且不能通过删除 `RoleBinding` 或 `ClusterRoleBinding`
@@ -102,9 +104,9 @@ In cases where a workload requires powerful permissions, consider the following
- 限制运行此类 Pod 的节点数量。确保你运行的任何 DaemonSet 都是必需的,
并且以最小权限运行,以限制容器逃逸的影响范围。
- 避免将此类 Pod 与不可信任或公开的 Pod 在一起运行。
- 考虑使用[污点和容忍度](/zh/docs/concepts/scheduling-eviction/taint-and-toleration/)、
- [节点亲和性](/zh/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)或
- [Pod 反亲和性](/zh/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity)确保
+ 考虑使用[污点和容忍度](/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/)、
+ [节点亲和性](/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)或
+ [Pod 反亲和性](/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity)确保
Pod 不会与不可信或不太受信任的 Pod 一起运行。
特别注意可信度不高的 Pod 不符合 **Restricted** Pod 安全标准的情况。
### 工作负载的创建 {#workload-creation}
-能够创建工作负载的用户(Pod 或管理 Pod 的[工作负载资源](/zh/docs/concepts/workloads/controllers/))
+能够创建工作负载的用户(Pod 或管理 Pod 的[工作负载资源](/zh-cn/docs/concepts/workloads/controllers/))
能够访问下层的节点,除非基于 Kubernetes 的
-[Pod 安全标准](/zh/docs/concepts/security/pod-security-standards/)做限制。
+[Pod 安全标准](/zh-cn/docs/concepts/security/pod-security-standards/)做限制。
-可以为 Windows Pod 或容器指定 [RunAsUsername](/zh/docs/tasks/configure-pod-container/configure-runasusername)
+可以为 Windows Pod 或容器指定 [RunAsUsername](/zh-cn/docs/tasks/configure-pod-container/configure-runasusername)
以作为特定用户执行容器进程。这大致相当于 [RunAsUser](/zh-cn/docs/concepts/security/pod-security-policy/#users-and-groups)。
-Windows 容器还可以通过使用[组管理的服务账号](/zh/docs/tasks/configure-pod-container/configure-gmsa/)作为
+Windows 容器还可以通过使用[组管理的服务账号](/zh-cn/docs/tasks/configure-pod-container/configure-gmsa/)作为
Active Directory 身份运行。
-* 进一步了解如何[使用 Service 访问集群中的应用](/zh/docs/tasks/access-application-cluster/service-access-application-cluster/)
-* 进一步了解如何[使用 Service 将前端连接到后端](/zh/docs/tasks/access-application-cluster/connecting-frontend-backend/)
-* 进一步了解如何[创建外部负载均衡器](/zh/docs/tasks/access-application-cluster/create-external-load-balancer/)
+* 进一步了解如何[使用 Service 访问集群中的应用](/zh-cn/docs/tasks/access-application-cluster/service-access-application-cluster/)
+* 进一步了解如何[使用 Service 将前端连接到后端](/zh-cn/docs/tasks/access-application-cluster/connecting-frontend-backend/)
+* 进一步了解如何[创建外部负载均衡器](/zh-cn/docs/tasks/access-application-cluster/create-external-load-balancer/)
diff --git a/content/zh-cn/docs/concepts/services-networking/dns-pod-service.md b/content/zh-cn/docs/concepts/services-networking/dns-pod-service.md
index 2bee2ba425..9946a88eb3 100644
--- a/content/zh-cn/docs/concepts/services-networking/dns-pod-service.md
+++ b/content/zh-cn/docs/concepts/services-networking/dns-pod-service.md
@@ -168,7 +168,7 @@ of the form `auto-generated-name.my-svc.my-namespace.svc.cluster-domain.example`
#### SRV 记录 {#srv-records}
Kubernetes 根据普通 Service 或
-[Headless Service](/zh/docs/concepts/services-networking/service/#headless-services)
+[Headless Service](/zh-cn/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`。
@@ -370,7 +370,7 @@ Pod 会一直出于 `Pending` 状态(通过 `kubectl` 所看到的 `ContainerC
(无法基于 Pod 主机名和集群域名构造 FQDN,FQDN `long-FQDN` 过长,至多 64
字符,请求字符数为 70)。
对于这种场景而言,改善用户体验的一种方式是创建一个
-[准入 Webhook 控制器](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks),
+[准入 Webhook 控制器](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks),
在用户创建顶层对象(如 Deployment)的时候控制 FQDN 的长度。
{{< /note >}}
@@ -405,11 +405,11 @@ DNS 策略可以逐个 Pod 来设定。目前 Kubernetes 支持以下特定 Pod
这些策略可以在 Pod 规约中的 `dnsPolicy` 字段设置:
- "`Default`": Pod 从运行所在的节点继承名称解析配置。参考
- [相关讨论](/zh/docs/tasks/administer-cluster/dns-custom-nameservers)
+ [相关讨论](/zh-cn/docs/tasks/administer-cluster/dns-custom-nameservers)
获取更多信息。
- "`ClusterFirst`": 与配置的集群域后缀不匹配的任何 DNS 查询(例如 "www.kubernetes.io")
都将转发到从节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。
- 参阅[相关讨论](/zh/docs/tasks/administer-cluster/dns-custom-nameservers)
+ 参阅[相关讨论](/zh-cn/docs/tasks/administer-cluster/dns-custom-nameservers)
了解在这些场景中如何处理 DNS 查询的信息。
- "`ClusterFirstWithHostNet`":对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略
"`ClusterFirstWithHostNet`"。
@@ -609,5 +609,5 @@ For guidance on administering DNS configurations, check
[Configure DNS Service](/docs/tasks/administer-cluster/dns-custom-nameservers/)
-->
有关管理 DNS 配置的指导,请查看
-[配置 DNS 服务](/zh/docs/tasks/administer-cluster/dns-custom-nameservers/)
+[配置 DNS 服务](/zh-cn/docs/tasks/administer-cluster/dns-custom-nameservers/)
diff --git a/content/zh-cn/docs/concepts/services-networking/endpoint-slices.md b/content/zh-cn/docs/concepts/services-networking/endpoint-slices.md
index 05f808a1a9..b3f0949298 100644
--- a/content/zh-cn/docs/concepts/services-networking/endpoint-slices.md
+++ b/content/zh-cn/docs/concepts/services-networking/endpoint-slices.md
@@ -82,7 +82,7 @@ Kubernetes Service.
这些 EndpointSlice 将包含对与 Service 选择算符匹配的所有 Pod 的引用。
EndpointSlice 通过唯一的协议、端口号和 Service 名称将网络端点组织在一起。
EndpointSlice 的名称必须是合法的
-[DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
+[DNS 子域名](/zh-cn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
例如,下面是 Kubernetes Service `example` 的 EndpointSlice 资源示例。
@@ -459,5 +459,5 @@ implementation in `kube-proxy`.
-* 阅读[使用 Service 连接到应用](/zh/docs/concepts/services-networking/connect-applications-service/)
+* 阅读[使用 Service 连接到应用](/zh-cn/docs/concepts/services-networking/connect-applications-service/)
diff --git a/content/zh-cn/docs/concepts/services-networking/ingress-controllers.md b/content/zh-cn/docs/concepts/services-networking/ingress-controllers.md
index 06a4c948bd..1e2d6ae078 100644
--- a/content/zh-cn/docs/concepts/services-networking/ingress-controllers.md
+++ b/content/zh-cn/docs/concepts/services-networking/ingress-controllers.md
@@ -143,13 +143,13 @@ You may deploy any number of ingress controllers using [ingress class](/docs/con
within a cluster. Note the `.metadata.name` of your ingress class resource. When you create an ingress you would need that name to specify the `ingressClassName` field on your Ingress object (refer to [IngressSpec v1 reference](/docs/reference/kubernetes-api/service-resources/ingress-v1/#IngressSpec). `ingressClassName` is a replacement of the older [annotation method](/docs/concepts/services-networking/ingress/#deprecated-annotation).
-->
你可以使用
-[Ingress 类](/zh/docs/concepts/services-networking/ingress/#ingress-class)在集群中部署任意数量的
+[Ingress 类](/zh-cn/docs/concepts/services-networking/ingress/#ingress-class)在集群中部署任意数量的
Ingress 控制器。
请注意你的 Ingress 类资源的 `.metadata.name` 字段。
当你创建 Ingress 时,你需要用此字段的值来设置 Ingress 对象的 `ingressClassName` 字段(请参考
[IngressSpec v1 reference](/docs/reference/kubernetes-api/service-resources/ingress-v1/#IngressSpec))。
`ingressClassName`
-是之前的[注解](/zh/docs/concepts/services-networking/ingress/#deprecated-annotation)做法的替代。
+是之前的[注解](/zh-cn/docs/concepts/services-networking/ingress/#deprecated-annotation)做法的替代。
如果你不为 Ingress 指定 IngressClass,并且你的集群中只有一个 IngressClass 被标记为默认,那么
Kubernetes 会将此集群的默认 IngressClass
-[应用](/zh/docs/concepts/services-networking/ingress/#default-ingress-class)到 Ingress 上。
+[应用](/zh-cn/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)
+[`ingressclass.kubernetes.io/is-default-class` 注解](/zh-cn/docs/reference/labels-annotations-taints/#ingressclass-kubernetes-io-is-default-class)
的值设置为 `"true"` 来将一个 IngressClass 标记为集群默认。
理想情况下,所有 Ingress 控制器都应满足此规范,但各种 Ingress 控制器的操作略有不同。
@@ -181,6 +181,6 @@ Make sure you review your ingress controller's documentation to understand the c
* Learn more about [Ingress](/docs/concepts/services-networking/ingress/).
* [Set up Ingress on Minikube with the NGINX Controller](/docs/tasks/access-application-cluster/ingress-minikube).
-->
-* 进一步了解 [Ingress](/zh/docs/concepts/services-networking/ingress/)。
-* [在 Minikube 上使用 NGINX 控制器安装 Ingress](/zh/docs/tasks/access-application-cluster/ingress-minikube)。
+* 进一步了解 [Ingress](/zh-cn/docs/concepts/services-networking/ingress/)。
+* [在 Minikube 上使用 NGINX 控制器安装 Ingress](/zh-cn/docs/tasks/access-application-cluster/ingress-minikube)。
diff --git a/content/zh-cn/docs/concepts/services-networking/ingress.md b/content/zh-cn/docs/concepts/services-networking/ingress.md
index e14cd79ef8..6b5bf60c38 100644
--- a/content/zh-cn/docs/concepts/services-networking/ingress.md
+++ b/content/zh-cn/docs/concepts/services-networking/ingress.md
@@ -36,7 +36,7 @@ For clarity, this guide defines the following terms:
在此示例和在大多数常见的 Kubernetes 部署环境中,集群中的节点都不在公共网络中。
* 边缘路由器(Edge Router): 在集群中强制执行防火墙策略的路由器。可以是由云提供商管理的网关,也可以是物理硬件。
* 集群网络(Cluster Network): 一组逻辑的或物理的连接,根据 Kubernetes
- [网络模型](/zh/docs/concepts/cluster-administration/networking/)在集群内实现通信。
+ [网络模型](/zh-cn/docs/concepts/cluster-administration/networking/)在集群内实现通信。
* 服务(Service):Kubernetes {{< glossary_tooltip term_id="service" >}},
使用{{< glossary_tooltip text="标签" term_id="label" >}}选择器(selectors)辨认一组 Pod。
除非另有说明,否则假定服务只具有在集群网络中可路由的虚拟 IP。
@@ -51,7 +51,7 @@ Traffic routing is controlled by rules defined on the Ingress resource.
## Ingress 是什么? {#what-is-ingress}
[Ingress](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#ingress-v1beta1-networking-k8s-io)
-公开从集群外部到集群内[服务](/zh/docs/concepts/services-networking/service/)的
+公开从集群外部到集群内[服务](/zh-cn/docs/concepts/services-networking/service/)的
HTTP 和 HTTPS 路由。
流量路由由 Ingress 资源上定义的规则控制。
@@ -66,7 +66,7 @@ Here is a simple example where an Ingress sends all its traffic to one Service:
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.
-->
Ingress 可为 Service 提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及基于名称的虚拟托管。
-[Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers)
+[Ingress 控制器](/zh-cn/docs/concepts/services-networking/ingress-controllers)
通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。
Ingress 不会公开任意端口或协议。
将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用
-[Service.Type=NodePort](/zh/docs/concepts/services-networking/service/#type-nodeport)
-或 [Service.Type=LoadBalancer](/zh/docs/concepts/services-networking/service/#loadbalancer)
+[Service.Type=NodePort](/zh-cn/docs/concepts/services-networking/service/#type-nodeport)
+或 [Service.Type=LoadBalancer](/zh-cn/docs/concepts/services-networking/service/#loadbalancer)
类型的 Service。
## 环境准备
-你必须拥有一个 [Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers) 才能满足 Ingress 的要求。
+你必须拥有一个 [Ingress 控制器](/zh-cn/docs/concepts/services-networking/ingress-controllers) 才能满足 Ingress 的要求。
仅创建 Ingress 资源本身没有任何效果。
你可能需要部署 Ingress 控制器,例如 [ingress-nginx](https://kubernetes.github.io/ingress-nginx/deploy/)。
-你可以从许多 [Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers) 中进行选择。
+你可以从许多 [Ingress 控制器](/zh-cn/docs/concepts/services-networking/ingress-controllers) 中进行选择。
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/)、
-[管理资源](/zh/docs/concepts/cluster-administration/manage-deployment/)。
+Ingress 对象的命名必须是合法的 [DNS 子域名名称](/zh-cn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
+关于如何使用配置文件,请参见[部署应用](/zh-cn/docs/tasks/run-application/run-stateless-application-deployment/)、
+[配置容器](/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/)、
+[管理资源](/zh-cn/docs/concepts/cluster-administration/manage-deployment/)。
Ingress 经常使用注解(annotations)来配置一些选项,具体取决于 Ingress
控制器,例如[重写目标注解](https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/rewrite/README.md)。
-不同的 [Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers)支持不同的注解。
+不同的 [Ingress 控制器](/zh-cn/docs/concepts/services-networking/ingress-controllers)支持不同的注解。
查看你所选的 Ingress 控制器的文档,以了解其支持哪些注解。
{{< note >}}
-取决于你所使用的 [Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers),
-你可能需要创建默认 HTTP 后端[服务](/zh/docs/concepts/services-networking/service/)。
+取决于你所使用的 [Ingress 控制器](/zh-cn/docs/concepts/services-networking/ingress-controllers),
+你可能需要创建默认 HTTP 后端[服务](/zh-cn/docs/concepts/services-networking/service/)。
{{< /note >}}
值得注意的是,尽管健康检查不是通过 Ingress 直接暴露的,在 Kubernetes
中存在并行的概念,比如
-[就绪检查](/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/),
+[就绪检查](/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/),
允许你实现相同的目的。
请检查特定控制器的说明文档([nginx](https://git.k8s.io/ingress-nginx/README.md)、
[GCE](https://git.k8s.io/ingress-gce/README.md#health-checks))以了解它们是怎样处理健康检查的。
@@ -1000,7 +1000,7 @@ Please check the documentation of the relevant [Ingress controller](/docs/concep
## 跨可用区失败 {#failing-across-availability-zones}
不同的云厂商使用不同的技术来实现跨故障域的流量分布。详情请查阅相关 Ingress 控制器的文档。
-请查看相关 [Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers)的文档以了解详细信息。
+请查看相关 [Ingress 控制器](/zh-cn/docs/concepts/services-networking/ingress-controllers)的文档以了解详细信息。
-* 使用 [Service.Type=LoadBalancer](/zh/docs/concepts/services-networking/service/#loadbalancer)
-* 使用 [Service.Type=NodePort](/zh/docs/concepts/services-networking/service/#nodeport)
+* 使用 [Service.Type=LoadBalancer](/zh-cn/docs/concepts/services-networking/service/#loadbalancer)
+* 使用 [Service.Type=NodePort](/zh-cn/docs/concepts/services-networking/service/#nodeport)
## {{% heading "whatsnext" %}}
@@ -1026,6 +1026,6 @@ You can expose a Service in multiple ways that don't directly involve the Ingres
* [Set up Ingress on Minikube with the NGINX Controller](/docs/tasks/access-application-cluster/ingress-minikube/)
-->
* 进一步了解 [Ingress](/docs/reference/kubernetes-api/service-resources/ingress-v1/) API
-* 进一步了解 [Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers/)
-* [使用 NGINX 控制器在 Minikube 上安装 Ingress](/zh/docs/tasks/access-application-cluster/ingress-minikube/)
+* 进一步了解 [Ingress 控制器](/zh-cn/docs/concepts/services-networking/ingress-controllers/)
+* [使用 NGINX 控制器在 Minikube 上安装 Ingress](/zh-cn/docs/tasks/access-application-cluster/ingress-minikube/)
diff --git a/content/zh-cn/docs/concepts/services-networking/network-policies.md b/content/zh-cn/docs/concepts/services-networking/network-policies.md
index ef2884c281..88bbebdfaa 100644
--- a/content/zh-cn/docs/concepts/services-networking/network-policies.md
+++ b/content/zh-cn/docs/concepts/services-networking/network-policies.md
@@ -58,7 +58,7 @@ Network policies are implemented by the [network plugin](/docs/concepts/extend-k
-->
## 前置条件 {#prerequisites}
-网络策略通过[网络插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)
+网络策略通过[网络插件](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)
来实现。要使用网络策略,你必须使用支持 NetworkPolicy 的网络解决方案。
创建一个 NetworkPolicy 资源对象而没有控制器来使它生效的话,是没有任何作用的。
@@ -144,8 +144,8 @@ __podSelector__: Each NetworkPolicy includes a `podSelector` which selects the g
-->
__必需字段__:与所有其他的 Kubernetes 配置一样,NetworkPolicy 需要 `apiVersion`、
`kind` 和 `metadata` 字段。关于配置文件操作的一般信息,请参考
-[配置 Pod 以使用 ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/),
-和[对象管理](/zh/docs/concepts/overview/working-with-objects/object-management)。
+[配置 Pod 以使用 ConfigMap](/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/),
+和[对象管理](/zh-cn/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 +204,7 @@ See the [Declare Network Policy](/docs/tasks/administer-cluster/declare-network-
3. (Egress 规则)允许 “default” 命名空间中任何带有标签 “role=db” 的 Pod 到 CIDR
10.0.0.0/24 下 5978 TCP 端口的连接。
-参阅[声明网络策略](/zh/docs/tasks/administer-cluster/declare-network-policy/)演练
+参阅[声明网络策略](/zh-cn/docs/tasks/administer-cluster/declare-network-policy/)演练
了解更多示例。
你的集群所使用的 {{< glossary_tooltip text="CNI" term_id="cni" >}} 插件
必须支持在 NetworkPolicy 规约中使用 `endPort` 字段。
-如果你的[网络插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)
+如果你的[网络插件](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)
不支持 `endPort` 字段,而你指定了一个包含 `endPort` 字段的 NetworkPolicy,
策略只对单个 `port` 字段生效。
{{< /note >}}
@@ -530,7 +530,7 @@ While NetworkPolicy cannot target a namespace by its name with some object field
standardized label to target a specific namespace.
-->
只要 `NamespaceDefaultLabelName`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
+[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)
被启用,Kubernetes 控制面会在所有名字空间上设置一个不可变更的标签
`kubernetes.io/metadata.name`。该标签的值是名字空间的名称。
@@ -540,11 +540,11 @@ standardized label to target a specific namespace.
## 通过网络策略(至少目前还)无法完成的工作 {#what-you-can-t-do-with-network-policies-at-least-not-yet}
-到 Kubernetes {{< skew latestVersion >}} 为止,NetworkPolicy API 还不支持以下功能,不过
+到 Kubernetes {{< skew currentVersion >}} 为止,NetworkPolicy API 还不支持以下功能,不过
你可能可以使用操作系统组件(如 SELinux、OpenVSwitch、IPTables 等等)
或者第七层技术(Ingress 控制器、服务网格实现)或准入控制器来实现一些
替代方案。
@@ -588,7 +588,7 @@ As of Kubernetes {{< skew latestVersion >}}, the following functionality does no
walkthrough for further examples.
- See more [recipes](https://github.com/ahmetb/kubernetes-network-policy-recipes) for common scenarios enabled by the NetworkPolicy resource.
-->
-- 参阅[声明网络策略](/zh/docs/tasks/administer-cluster/declare-network-policy/)
+- 参阅[声明网络策略](/zh-cn/docs/tasks/administer-cluster/declare-network-policy/)
演练了解更多示例;
- 有关 NetworkPolicy 资源所支持的常见场景的更多信息,请参见
[此指南](https://github.com/ahmetb/kubernetes-network-policy-recipes)。
diff --git a/content/zh-cn/docs/concepts/services-networking/service-topology.md b/content/zh-cn/docs/concepts/services-networking/service-topology.md
index 4ab71cee41..e899786565 100644
--- a/content/zh-cn/docs/concepts/services-networking/service-topology.md
+++ b/content/zh-cn/docs/concepts/services-networking/service-topology.md
@@ -25,7 +25,7 @@ introduced in Kubernetes v1.21, provide similar functionality.
-->
此功能特性,尤其是 Alpha 阶段的 `topologyKeys` API,在 Kubernetes v1.21
版本中已被废弃。Kubernetes v1.21 版本中引入的
-[拓扑感知的提示](/zh/docs/concepts/services-networking/topology-aware-hints/),
+[拓扑感知的提示](/zh-cn/docs/concepts/services-networking/topology-aware-hints/),
提供类似的功能。
{{ note >}}
@@ -104,7 +104,7 @@ as the last value in the list.
## 使用服务拓扑 {#using-service-topology}
如果集群启用了 `ServiceTopology`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/),
你就可以在 Service 规约中设定 `topologyKeys` 字段,从而控制其流量路由。
此字段是 `Node` 标签的优先顺序字段,将用于在访问这个 `Service` 时对端点进行排序。
流量会被定向到第一个标签值和源 `Node` 标签值相匹配的 `Node`。
@@ -300,6 +300,6 @@ spec:
* Read about [enabling Service Topology](/docs/tasks/administer-cluster/enabling-service-topology)
* Read [Connecting Applications with Services](/docs/concepts/services-networking/connect-applications-service/)
-->
-* 阅读关于[启用服务拓扑](/zh/docs/tasks/administer-cluster/enabling-service-topology/)
-* 阅读[用服务连接应用程序](/zh/docs/concepts/services-networking/connect-applications-service/)
+* 阅读关于[启用服务拓扑](/zh-cn/docs/tasks/administer-cluster/enabling-service-topology/)
+* 阅读[用服务连接应用程序](/zh-cn/docs/concepts/services-networking/connect-applications-service/)
diff --git a/content/zh-cn/docs/concepts/services-networking/service-traffic-policy.md b/content/zh-cn/docs/concepts/services-networking/service-traffic-policy.md
index dad9dcc79b..b291c17758 100644
--- a/content/zh-cn/docs/concepts/services-networking/service-traffic-policy.md
+++ b/content/zh-cn/docs/concepts/services-networking/service-traffic-policy.md
@@ -43,7 +43,7 @@ When the feature is enabled, you can enable the internal-only traffic policy for
This tells kube-proxy to only use node local endpoints for cluster internal traffic.
-->
`ServiceInternalTrafficPolicy`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/) 是 Beta 功能,默认启用。
+[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) 是 Beta 功能,默认启用。
启用该功能后,你就可以通过将 {{< glossary_tooltip text="Services" term_id="service" >}} 的
`.spec.internalTrafficPolicy` 项设置为 `Local`,
来为它指定一个内部专用的流量策略。
@@ -99,7 +99,7 @@ When the [feature gate](/docs/reference/command-line-tools-reference/feature-gat
kube-proxy 基于 `spec.internalTrafficPolicy` 的设置来过滤路由的目标服务端点。
当它的值设为 `Local` 时,只选择节点本地的服务端点。
当它的值设为 `Cluster` 或缺省时,则选择所有的服务端点。
-启用[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
+启用[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)
`ServiceInternalTrafficPolicy` 后,
`spec.internalTrafficPolicy` 的值默认设为 `Cluster`。
@@ -123,6 +123,6 @@ kube-proxy 基于 `spec.internalTrafficPolicy` 的设置来过滤路由的目标
* Read about [Service External Traffic Policy](/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip)
* Read [Connecting Applications with Services](/docs/concepts/services-networking/connect-applications-service/)
-->
-* 请阅读[拓扑感知提示](/zh/docs/concepts/services-networking/topology-aware-hints)
-* 请阅读[Service 的外部流量策略](/zh/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip)
-* 请阅读[用 Service 连接应用](/zh/docs/concepts/services-networking/connect-applications-service/)
+* 请阅读[拓扑感知提示](/zh-cn/docs/concepts/services-networking/topology-aware-hints)
+* 请阅读[Service 的外部流量策略](/zh-cn/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip)
+* 请阅读[用 Service 连接应用](/zh-cn/docs/concepts/services-networking/connect-applications-service/)
diff --git a/content/zh-cn/docs/concepts/services-networking/service.md b/content/zh-cn/docs/concepts/services-networking/service.md
index 71140bf426..bedb122737 100644
--- a/content/zh-cn/docs/concepts/services-networking/service.md
+++ b/content/zh-cn/docs/concepts/services-networking/service.md
@@ -320,7 +320,7 @@ The name of the Endpoints object must be a valid
[DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
-->
Endpoints 对象的名称必须是合法的
-[DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
+[DNS 子域名](/zh-cn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
如果你启用了 kube-proxy 的 `ProxyTerminatingEndpoints`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/),
kube-proxy 会检查节点是否有本地的端点,以及是否所有的本地端点都被标记为终止中。
-你可以(几乎总是应该)使用[附加组件](/zh/docs/concepts/cluster-administration/addons/)
+你可以(几乎总是应该)使用[附加组件](/zh-cn/docs/concepts/cluster-administration/addons/)
为 Kubernetes 集群设置 DNS 服务。
支持集群的 DNS 服务器(例如 CoreDNS)监视 Kubernetes API 中的新服务,并为每个服务创建一组 DNS 记录。
@@ -905,7 +905,7 @@ Kubernetes 还支持命名端口的 DNS SRV(服务)记录。
Kubernetes DNS 服务器是唯一的一种能够访问 `ExternalName` 类型的 Service 的方式。
更多关于 `ExternalName` 信息可以查看
-[DNS Pod 和 Service](/zh/docs/concepts/services-networking/dns-pod-service/)。
+[DNS Pod 和 Service](/zh-cn/docs/concepts/services-networking/dns-pod-service/)。
-你也可以使用 [Ingress](/zh/docs/concepts/services-networking/ingress/) 来暴露自己的服务。
+你也可以使用 [Ingress](/zh-cn/docs/concepts/services-networking/ingress/) 来暴露自己的服务。
Ingress 不是一种服务类型,但它充当集群的入口点。
它可以将路由规则整合到一个资源中,因为它可以在同一IP地址下公开多个服务。
@@ -1407,6 +1407,17 @@ metadata:
[...]
```
+{{% /tab %}}
+{{% tab name="OCI" %}}
+
+```yaml
+[...]
+metadata:
+ name: my-service
+ annotations:
+ service.beta.kubernetes.io/oci-load-balancer-internal: true
+[...]
+```
{{% /tab %}}
{{< /tabs >}}
@@ -1735,10 +1746,10 @@ groups are modified with the following IP rules:
-->
为了获得均衡流量,请使用 DaemonSet 或指定
-[Pod 反亲和性](/zh/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)
+[Pod 反亲和性](/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)
使其不在同一节点上。
-你还可以将 NLB 服务与[内部负载平衡器](/zh/docs/concepts/services-networking/service/#internal-load-balancer)
+你还可以将 NLB 服务与[内部负载平衡器](/zh-cn/docs/concepts/services-networking/service/#internal-load-balancer)
注解一起使用。
为了使客户端流量能够到达 NLB 后面的实例,使用以下 IP 规则修改了节点安全组:
@@ -2089,7 +2100,7 @@ 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.
-->
-如果启用 `ServiceIPStaticSubrange`[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+如果启用 `ServiceIPStaticSubrange`[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/),
分配策略根据配置的 `service-cluster-ip-range` 的大小,使用以下公式
`min(max(16, cidrSize / 16), 256)` 进行划分,该公式可描述为
“在不小于 16 且不大于 256 之间有一个步进量(Graduated Step)”,将
@@ -2351,7 +2362,7 @@ followed by the data from the client.
* Read about [Ingress](/docs/concepts/services-networking/ingress/)
* Read about [Endpoint Slices](/docs/concepts/services-networking/endpoint-slices/)
-->
-* 阅读[使用服务访问应用](/zh/docs/concepts/services-networking/connect-applications-service/)
-* 阅读了解 [Ingress](/zh/docs/concepts/services-networking/ingress/)
-* 阅读了解[端点切片(Endpoint Slices)](/zh/docs/concepts/services-networking/endpoint-slices/)
+* 阅读[使用服务访问应用](/zh-cn/docs/concepts/services-networking/connect-applications-service/)
+* 阅读了解 [Ingress](/zh-cn/docs/concepts/services-networking/ingress/)
+* 阅读了解[端点切片(Endpoint Slices)](/zh-cn/docs/concepts/services-networking/endpoint-slices/)
diff --git a/content/zh-cn/docs/concepts/services-networking/topology-aware-hints.md b/content/zh-cn/docs/concepts/services-networking/topology-aware-hints.md
index f0b28aca2a..a867c2a537 100644
--- a/content/zh-cn/docs/concepts/services-networking/topology-aware-hints.md
+++ b/content/zh-cn/docs/concepts/services-networking/topology-aware-hints.md
@@ -41,7 +41,7 @@ by default. To try out this feature, you have to enable the `TopologyAwareHints`
{{< note >}}
“拓扑感知提示”特性处于 Beta 阶段,并且默认情况下**未**启用。
要试用此特性,你必须启用 `TopologyAwareHints`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
+[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)。
{{< /note >}}
@@ -117,7 +117,7 @@ as many endpoints to the zone with 2 CPU cores.
此特性开启后,EndpointSlice 控制器负责在 EndpointSlice 上设置提示信息。
控制器按比例给每个区域分配一定比例数量的端点。
这个比例来源于此区域中运行节点的
-[可分配](/zh/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)
+[可分配](/zh-cn/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)
CPU 核心数。
例如,如果一个区域拥有 2 CPU 核心,而另一个区域只有 1 CPU 核心,
那控制器将给那个有 2 CPU 的区域分配两倍数量的端点。
@@ -292,4 +292,4 @@ Kubernetes 控制平面和每个节点上的 kube-proxy,在使用拓扑感知
* Read [Connecting Applications with Services](/docs/concepts/services-networking/connect-applications-service/)
-->
-* 参阅[通过服务连通应用](/zh/docs/concepts/services-networking/connect-applications-service/)
+* 参阅[通过服务连通应用](/zh-cn/docs/concepts/services-networking/connect-applications-service/)
diff --git a/content/zh-cn/docs/concepts/services-networking/windows-networking.md b/content/zh-cn/docs/concepts/services-networking/windows-networking.md
index b6a7662461..ea2df2e815 100644
--- a/content/zh-cn/docs/concepts/services-networking/windows-networking.md
+++ b/content/zh-cn/docs/concepts/services-networking/windows-networking.md
@@ -42,7 +42,7 @@ is responsible for the management of networking resources such as:
-->
## Windows 容器网络 {#networking}
-Windows 容器网络通过 [CNI 插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)暴露。
+Windows 容器网络通过 [CNI 插件](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)暴露。
Windows 容器网络的工作方式与虚拟机类似。
每个容器都有一个连接到 Hyper-V 虚拟交换机(vSwitch)的虚拟网络适配器(vNIC)。
主机网络服务(Host Networking Service,HNS)和主机计算服务(Host Comute Service,HCS)
diff --git a/content/zh-cn/docs/concepts/storage/dynamic-provisioning.md b/content/zh-cn/docs/concepts/storage/dynamic-provisioning.md
index f673dfa5f5..f256992599 100644
--- a/content/zh-cn/docs/concepts/storage/dynamic-provisioning.md
+++ b/content/zh-cn/docs/concepts/storage/dynamic-provisioning.md
@@ -23,7 +23,7 @@ automatically provisions storage when it is requested by users.
动态卷供应允许按需创建存储卷。
如果没有动态供应,集群管理员必须手动地联系他们的云或存储提供商来创建新的存储卷,
然后在 Kubernetes 集群创建
-[`PersistentVolume` 对象](/zh/docs/concepts/storage/persistent-volumes/)来表示这些卷。
+[`PersistentVolume` 对象](/zh-cn/docs/concepts/storage/persistent-volumes/)来表示这些卷。
动态供应功能消除了集群管理员预先配置存储的需要。 相反,它在用户请求时自动供应存储。
@@ -58,7 +58,7 @@ have the ability to select from multiple storage options.
More information on storage classes can be found
[here](/docs/concepts/storage/storage-classes/).
-->
-点击[这里](/zh/docs/concepts/storage/storage-classes/)查阅有关存储类的更多信息。
+点击[这里](/zh-cn/docs/concepts/storage/storage-classes/)查阅有关存储类的更多信息。
要启用动态供应功能,集群管理员需要为用户预先创建一个或多个 `StorageClass` 对象。
`StorageClass` 对象定义当动态供应被调用时,哪一个驱动将被使用和哪些参数将被传递给驱动。
-StorageClass 对象的名字必须是一个合法的 [DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
+StorageClass 对象的名字必须是一个合法的 [DNS 子域名](/zh-cn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
以下清单创建了一个 `StorageClass` 存储类 "slow",它提供类似标准磁盘的永久磁盘。
```yaml
@@ -172,7 +172,7 @@ can enable this behavior by:
is enabled on the API server.
-->
- 标记一个 `StorageClass` 为 *默认*;
-- 确保 [`DefaultStorageClass` 准入控制器](/zh/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)在 API 服务端被启用。
+- 确保 [`DefaultStorageClass` 准入控制器](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)在 API 服务端被启用。
-在[多区域](/zh/docs/setup/best-practices/multiple-zones/)集群中,Pod 可以被分散到多个区域。
+在[多区域](/zh-cn/docs/setup/best-practices/multiple-zones/)集群中,Pod 可以被分散到多个区域。
单区域存储后端应该被供应到 Pod 被调度到的区域。
-这可以通过设置[卷绑定模式](/zh/docs/concepts/storage/storage-classes/#volume-binding-mode)来实现。
+这可以通过设置[卷绑定模式](/zh-cn/docs/concepts/storage/storage-classes/#volume-binding-mode)来实现。
diff --git a/content/zh-cn/docs/concepts/storage/ephemeral-volumes.md b/content/zh-cn/docs/concepts/storage/ephemeral-volumes.md
index f92c561bdb..2e7c7980df 100644
--- a/content/zh-cn/docs/concepts/storage/ephemeral-volumes.md
+++ b/content/zh-cn/docs/concepts/storage/ephemeral-volumes.md
@@ -23,7 +23,7 @@ with [volumes](/docs/concepts/storage/volumes/) is suggested, in
particular PersistentVolumeClaim and PersistentVolume.
-->
本文档描述 Kubernetes 中的 _临时卷(Ephemeral Volume)_。
-建议先了解[卷](/zh/docs/concepts/storage/volumes/),特别是 PersistentVolumeClaim 和 PersistentVolume。
+建议先了解[卷](/zh-cn/docs/concepts/storage/volumes/),特别是 PersistentVolumeClaim 和 PersistentVolume。
Kubernetes 为了不同的目的,支持几种不同类型的临时卷:
-- [emptyDir](/zh/docs/concepts/storage/volumes/#emptydir):
+- [emptyDir](/zh-cn/docs/concepts/storage/volumes/#emptydir):
Pod 启动时为空,存储空间来自本地的 kubelet 根目录(通常是根磁盘)或内存
-- [configMap](/zh/docs/concepts/storage/volumes/#configmap)、
- [downwardAPI](/zh/docs/concepts/storage/volumes/#downwardapi)、
- [secret](/zh/docs/concepts/storage/volumes/#secret):
+- [configMap](/zh-cn/docs/concepts/storage/volumes/#configmap)、
+ [downwardAPI](/zh-cn/docs/concepts/storage/volumes/#downwardapi)、
+ [secret](/zh-cn/docs/concepts/storage/volumes/#secret):
将不同类型的 Kubernetes 数据注入到 Pod 中
-- [CSI 临时卷](/zh/docs/concepts/storage/volumes/#csi-ephemeral-volumes):
+- [CSI 临时卷](/zh-cn/docs/concepts/storage/volumes/#csi-ephemeral-volumes):
类似于前面的卷类型,但由专门[支持此特性](https://kubernetes-csi.github.io/docs/drivers.html)
的指定
[CSI 驱动程序](https://github.com/container-storage-interface/spec/blob/master/spec.md)提供
@@ -103,7 +103,7 @@ CSI ephemeral volumes *must* be provided by third-party CSI storage
drivers.
-->
`emptyDir`、`configMap`、`downwardAPI`、`secret` 是作为
-[本地临时存储](/zh/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage)
+[本地临时存储](/zh-cn/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage)
提供的。它们由各个节点上的 kubelet 管理。
CSI 临时卷 *必须* 由第三方 CSI 存储驱动程序提供。
@@ -144,7 +144,7 @@ shows which drivers support ephemeral volumes.
-->
该特性需要启用参数 `CSIInlineVolume`
-[特性门控(feature gate)](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
+[特性门控(feature gate)](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)。
该参数从 Kubernetes 1.16 开始默认启用。
{{< note >}}
@@ -171,7 +171,7 @@ Here's an example manifest for a Pod that uses CSI ephemeral storage:
从概念上讲,CSI 临时卷类似于 `configMap`、`downwardAPI` 和 `secret` 类型的卷:
其存储在每个节点本地管理,并在将 Pod 调度到节点后与其他本地资源一起创建。
在这个阶段,Kubernetes 没有重新调度 Pods 的概念。卷创建不太可能失败,否则 Pod 启动将会受阻。
-特别是,这些卷 **不** 支持[感知存储容量的 Pod 调度](/zh/docs/concepts/storage/storage-capacity/)。
+特别是,这些卷 **不** 支持[感知存储容量的 Pod 调度](/zh-cn/docs/concepts/storage/storage-capacity/)。
它们目前也没包括在 Pod 的存储资源使用限制中,因为 kubelet 只能对它自己管理的存储强制执行。
下面是使用 CSI 临时存储的 Pod 的示例清单:
@@ -226,7 +226,7 @@ CSI 临时卷允许用户直接向 CSI 驱动程序提供 `volumeAttributes`,
例如,通常在 StorageClass 中定义的参数不应通过使用内联临时卷向用户公开。
作为一个集群管理员,你可以使用
-[PodSecurityPolicy](/zh/docs/concepts/security/pod-security-policy/)
+[PodSecurityPolicy](/zh-cn/docs/concepts/security/pod-security-policy/)
来控制在 Pod 中可以使用哪些 CSI 驱动程序,
具体则是通过 [`allowedCSIDrivers` 字段](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritypolicyspec-v1beta1-policy)
指定。
@@ -239,7 +239,7 @@ allowed to be used as inline volumes within a Pod spec may do so by:
-->
如果集群管理员需要限制 CSI 驱动程序在 Pod 规约中被作为内联卷使用,可以这样做:
- 从 CSIDriver 规约的 `volumeLifecycleModes` 中删除 `Ephemeral`,这可以防止驱动程序被用作内联临时卷。
-- 使用[准入 Webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/)
+- 使用[准入 Webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/)
来限制如何使用此驱动程序。
-就[资源所有权](/zh/docs/concepts/workloads/controllers/garbage-collection/#owners-and-dependents)而言,
+就[资源所有权](/zh-cn/docs/concepts/workloads/controllers/garbage-collection/#owners-and-dependents)而言,
拥有通用临时存储的 Pod 是提供临时存储 (ephemeral storage) 的 PersistentVolumeClaim 的所有者。
当 Pod 被删除时,Kubernetes 垃圾收集器会删除 PVC,
然后 PVC 通常会触发卷的删除,因为存储类的默认回收策略是删除卷。
@@ -436,7 +436,7 @@ use an [admission webhook](/docs/reference/access-authn-authz/extensible-admissi
启用 GenericEphemeralVolume 特性会导致那些没有 PVCs 创建权限的用户,
在创建 Pods 时,被允许间接的创建 PVCs。
集群管理员必须意识到这一点。
-如果这不符合他们的安全模型,他们应该使用一个[准入 Webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/)
+如果这不符合他们的安全模型,他们应该使用一个[准入 Webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/)
拒绝包含通用临时卷的 Pods。
-[为 PVC 卷所设置的逐名字空间的配额](/zh/docs/concepts/policy/resource-quotas/#storage-resource-quota)
+[为 PVC 卷所设置的逐名字空间的配额](/zh-cn/docs/concepts/policy/resource-quotas/#storage-resource-quota)
仍然有效,因此即使允许用户使用这种新机制,他们也不能使用它来规避其他策略。
## {{% heading "whatsnext" %}}
@@ -456,7 +456,7 @@ See [local ephemeral storage](/docs/concepts/configuration/manage-resources-cont
-->
### kubelet 管理的临时卷 {#ephemeral-volumes-managed-by-kubelet}
-参阅[本地临时存储](/zh/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage)。
+参阅[本地临时存储](/zh-cn/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage)。
本文描述 Kubernetes 中的 _持久卷(Persistent Volume)_ 。
-建议先熟悉[卷(Volume)](/zh/docs/concepts/storage/volumes/)的概念。
+建议先熟悉[卷(Volume)](/zh-cn/docs/concepts/storage/volumes/)的概念。
@@ -52,7 +52,7 @@ PersistentVolumeClaim。
A _PersistentVolume_ (PV) is a piece of storage in the cluster that has been provisioned by an administrator or dynamically provisioned using [Storage Classes](/docs/concepts/storage/storage-classes/). It is a resource in the cluster just like a node is a cluster resource. PVs are volume plugins like Volumes, but have a lifecycle independent of any individual Pod that uses the PV. This API object captures the details of the implementation of the storage, be that NFS, iSCSI, or a cloud-provider-specific storage system.
-->
持久卷(PersistentVolume,PV)是集群中的一块存储,可以由管理员事先供应,或者
-使用[存储类(Storage Class)](/zh/docs/concepts/storage/storage-classes/)来动态供应。
+使用[存储类(Storage Class)](/zh-cn/docs/concepts/storage/storage-classes/)来动态供应。
持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样,也是使用
卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。
此 API 对象中记述了存储的实现细节,无论其背后是 NFS、iSCSI 还是特定于云平台的存储系统。
@@ -77,7 +77,7 @@ See the [detailed walkthrough with working examples](/docs/tasks/configure-pod-c
仅限于卷大小和访问模式,同时又不能将卷是如何实现的这些细节暴露给用户。
为了满足这类需求,就有了 _存储类(StorageClass)_ 资源。
-参见[基于运行示例的详细演练](/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/)。
+参见[基于运行示例的详细演练](/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-storage/)。
为了基于存储类完成动态的存储供应,集群管理员需要在 API 服务器上启用
-`DefaultStorageClass` [准入控制器](/zh/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)。
+`DefaultStorageClass` [准入控制器](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)。
举例而言,可以通过保证 `DefaultStorageClass` 出现在 API 服务器组件的
`--enable-admission-plugins` 标志值中实现这点;该标志的值可以是逗号
分隔的有序列表。关于 API 服务器标志的更多信息,可以参考
-[kube-apiserver](/zh/docs/reference/command-line-tools-reference/kube-apiserver/)
+[kube-apiserver](/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/)
文档。
不过,管理员可以按
-[参考资料](/zh/docs/reference/command-line-tools-reference/kube-controller-manager/)
+[参考资料](/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager/)
中所述,使用 Kubernetes 控制器管理器命令行参数来配置一个定制的回收器(Recycler)
Pod 模板。此定制的回收器 Pod 模板必须包含一个 `volumes` 规约,如下例所示:
@@ -484,7 +484,7 @@ The control plane still checks that [storage class](/docs/concepts/storage/stora
-->
绑定操作不会考虑某些卷匹配条件是否满足,包括节点亲和性等等。
控制面仍然会检查
-[存储类](/zh/docs/concepts/storage/storage-classes/)、访问模式和所请求的
+[存储类](/zh-cn/docs/concepts/storage/storage-classes/)、访问模式和所请求的
存储尺寸都是合法的。
```yaml
@@ -720,7 +720,7 @@ Recovery from failing PVC expansion by users is available as an alpha feature si
{{< note >}}
Kubernetes 从 1.23 版本开始将允许用户恢复失败的 PVC 扩展这一能力作为
alpha 特性支持。 `RecoverVolumeExpansionFailure` 必须被启用以允许使用此特性。
-可参考[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
+可参考[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)
文档了解更多信息。
{{< /note >}}
@@ -787,23 +787,23 @@ PV 持久卷是用插件的形式来实现的。Kubernetes 目前支持以下插
* [`rbd`](/docs/concepts/storage/volumes/#rbd) - Rados Block Device (RBD) volume
* [`vsphereVolume`](/docs/concepts/storage/volumes/#vspherevolume) - vSphere VMDK volume
-->
-* [`awsElasticBlockStore`](/zh/docs/concepts/storage/volumes/#awselasticblockstore) - AWS 弹性块存储(EBS)
-* [`azureDisk`](/zh/docs/concepts/storage/volumes/#azuredisk) - Azure Disk
-* [`azureFile`](/zh/docs/concepts/storage/volumes/#azurefile) - Azure File
-* [`cephfs`](/zh/docs/concepts/storage/volumes/#cephfs) - CephFS volume
-* [`csi`](/zh/docs/concepts/storage/volumes/#csi) - 容器存储接口 (CSI)
-* [`fc`](/zh/docs/concepts/storage/volumes/#fc) - Fibre Channel (FC) 存储
-* [`gcePersistentDisk`](/zh/docs/concepts/storage/volumes/#gcepersistentdisk) - GCE 持久化盘
-* [`glusterfs`](/zh/docs/concepts/storage/volumes/#glusterfs) - Glusterfs 卷
-* [`hostPath`](/zh/docs/concepts/storage/volumes/#hostpath) - HostPath 卷
+* [`awsElasticBlockStore`](/zh-cn/docs/concepts/storage/volumes/#awselasticblockstore) - AWS 弹性块存储(EBS)
+* [`azureDisk`](/zh-cn/docs/concepts/storage/volumes/#azuredisk) - Azure Disk
+* [`azureFile`](/zh-cn/docs/concepts/storage/volumes/#azurefile) - Azure File
+* [`cephfs`](/zh-cn/docs/concepts/storage/volumes/#cephfs) - CephFS volume
+* [`csi`](/zh-cn/docs/concepts/storage/volumes/#csi) - 容器存储接口 (CSI)
+* [`fc`](/zh-cn/docs/concepts/storage/volumes/#fc) - Fibre Channel (FC) 存储
+* [`gcePersistentDisk`](/zh-cn/docs/concepts/storage/volumes/#gcepersistentdisk) - GCE 持久化盘
+* [`glusterfs`](/zh-cn/docs/concepts/storage/volumes/#glusterfs) - Glusterfs 卷
+* [`hostPath`](/zh-cn/docs/concepts/storage/volumes/#hostpath) - HostPath 卷
(仅供单节点测试使用;不适用于多节点集群;
请尝试使用 `local` 卷作为替代)
-* [`iscsi`](/zh/docs/concepts/storage/volumes/#iscsi) - iSCSI (SCSI over IP) 存储
-* [`local`](/zh/docs/concepts/storage/volumes/#local) - 节点上挂载的本地存储设备
-* [`nfs`](/zh/docs/concepts/storage/volumes/#nfs) - 网络文件系统 (NFS) 存储
-* [`portworxVolume`](/zh/docs/concepts/storage/volumes/#portworxvolume) - Portworx 卷
-* [`rbd`](/zh/docs/concepts/storage/volumes/#rbd) - Rados 块设备 (RBD) 卷
-* [`vsphereVolume`](/zh/docs/concepts/storage/volumes/#vspherevolume) - vSphere VMDK 卷
+* [`iscsi`](/zh-cn/docs/concepts/storage/volumes/#iscsi) - iSCSI (SCSI over IP) 存储
+* [`local`](/zh-cn/docs/concepts/storage/volumes/#local) - 节点上挂载的本地存储设备
+* [`nfs`](/zh-cn/docs/concepts/storage/volumes/#nfs) - 网络文件系统 (NFS) 存储
+* [`portworxVolume`](/zh-cn/docs/concepts/storage/volumes/#portworxvolume) - Portworx 卷
+* [`rbd`](/zh-cn/docs/concepts/storage/volumes/#rbd) - Rados 块设备 (RBD) 卷
+* [`vsphereVolume`](/zh-cn/docs/concepts/storage/volumes/#vspherevolume) - vSphere VMDK 卷
{{< note >}}
对大多数类型的卷而言,你不需要设置节点亲和性字段。
-[AWS EBS](/zh/docs/concepts/storage/volumes/#awselasticblockstore)、
-[GCE PD](/zh/docs/concepts/storage/volumes/#gcepersistentdisk) 和
-[Azure Disk](/zh/docs/concepts/storage/volumes/#azuredisk) 卷类型都能
+[AWS EBS](/zh-cn/docs/concepts/storage/volumes/#awselasticblockstore)、
+[GCE PD](/zh-cn/docs/concepts/storage/volumes/#gcepersistentdisk) 和
+[Azure Disk](/zh-cn/docs/concepts/storage/volumes/#azuredisk) 卷类型都能
自动设置相关字段。
-你需要为 [local](/zh/docs/concepts/storage/volumes/#local) 卷显式地设置
+你需要为 [local](/zh-cn/docs/concepts/storage/volumes/#local) 卷显式地设置
此属性。
{{< /note >}}
@@ -1221,7 +1221,7 @@ The name of a PersistentVolumeClaim object must be a valid
-->
每个 PVC 对象都有 `spec` 和 `status` 部分,分别对应申领的规约和状态。
PersistentVolumeClaim 对象的名称必须是合法的
-[DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
+[DNS 子域名](/zh-cn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
```yaml
@@ -1280,7 +1280,7 @@ Claims can specify a [label selector](/docs/concepts/overview/working-with-objec
-->
### 选择算符 {#selector}
-申领可以设置[标签选择算符](/zh/docs/concepts/overview/working-with-objects/labels/#label-selectors)
+申领可以设置[标签选择算符](/zh-cn/docs/concepts/overview/working-with-objects/labels/#label-selectors)
来进一步过滤卷集合。只有标签与选择算符相匹配的卷能够绑定到申领上。
选择算符包含两个字段:
@@ -1309,7 +1309,7 @@ be bound to the PVC.
### 类 {#class}
申领可以通过为 `storageClassName` 属性设置
-[StorageClass](/zh/docs/concepts/storage/storage-classes/) 的名称来请求特定的存储类。
+[StorageClass](/zh-cn/docs/concepts/storage/storage-classes/) 的名称来请求特定的存储类。
只有所请求的类的 PV 卷,即 `storageClassName` 值与 PVC 设置相同的 PV 卷,
才能绑定到 PVC 申领。
@@ -1327,7 +1327,7 @@ PVC 申领不必一定要请求某个类。如果 PVC 的 `storageClassName` 属
存储类的 PV 卷(未设置注解或者注解值为 `""` 的 PersistentVolume(PV)对象在系统中不会被删除,因为这样做可能会引起数据丢失。
未设置 `storageClassName` 的 PVC 与此大不相同,也会被集群作不同处理。
具体筛查方式取决于
-[`DefaultStorageClass` 准入控制器插件](/zh/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)
+[`DefaultStorageClass` 准入控制器插件](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)
是否被启用。
卷快照(Volume Snapshot)特性的添加仅是为了支持 CSI 卷插件。
-有关细节可参阅[卷快照](/zh/docs/concepts/storage/volume-snapshots/)文档。
+有关细节可参阅[卷快照](/zh-cn/docs/concepts/storage/volume-snapshots/)文档。
要启用从卷快照数据源恢复数据卷的支持,可在 API 服务器和控制器管理器上启用
`VolumeSnapshotDataSource` 特性门控。
@@ -1757,7 +1757,7 @@ spec:
-->
## 卷克隆 {#volume-cloning}
-[卷克隆](/zh/docs/concepts/storage/volume-pvc-datasource/)功能特性仅适用于
+[卷克隆](/zh-cn/docs/concepts/storage/volume-pvc-datasource/)功能特性仅适用于
CSI 卷插件。
-* 进一步了解[创建持久卷](/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume).
-* 进一步学习[创建 PVC 申领](/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolumeclaim).
+* 进一步了解[创建持久卷](/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume).
+* 进一步学习[创建 PVC 申领](/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolumeclaim).
* 阅读[持久存储的设计文档](https://github.com/kubernetes/design-proposals-archive/blob/main/storage/persistent-storage.md).
本文档描述 Kubernetes 中的*投射卷(Projected Volumes)*。
-建议先熟悉[卷](/zh/docs/concepts/storage/volumes/)概念。
+建议先熟悉[卷](/zh-cn/docs/concepts/storage/volumes/)概念。
@@ -42,9 +42,9 @@ Currently, the following types of volume sources can be projected:
目前,以下类型的卷源可以被投射:
-* [`secret`](/zh/docs/concepts/storage/volumes/#secret)
-* [`downwardAPI`](/zh/docs/concepts/storage/volumes/#downwardapi)
-* [`configMap`](/zh/docs/concepts/storage/volumes/#configmap)
+* [`secret`](/zh-cn/docs/concepts/storage/volumes/#secret)
+* [`downwardAPI`](/zh-cn/docs/concepts/storage/volumes/#downwardapi)
+* [`configMap`](/zh-cn/docs/concepts/storage/volumes/#configmap)
* [`serviceAccountToken`](#serviceaccounttoken)
## serviceAccountToken 投射卷 {#serviceaccounttoken}
当 `TokenRequestProjection` 特性被启用时,你可以将当前
-[服务账号](/zh/docs/reference/access-authn-authz/authentication/#service-account-tokens)
+[服务账号](/zh-cn/docs/reference/access-authn-authz/authentication/#service-account-tokens)
的令牌注入到 Pod 中特定路径下。例如:
{{< codenew file="pods/storage/projected-service-account-token.yaml" >}}
@@ -108,7 +108,7 @@ is optional and it defaults to the identifier of the API server.
-->
示例 Pod 中包含一个投射卷,其中包含注入的服务账号令牌。
此 Pod 中的容器可以使用该令牌访问 Kubernetes API 服务器, 使用
-[pod 的 ServiceAccount](/zh/docs/tasks/configure-pod-container/configure-service-account/)
+[pod 的 ServiceAccount](/zh-cn/docs/tasks/configure-pod-container/configure-service-account/)
进行身份验证。`audience` 字段包含令牌所针对的受众。
收到令牌的主体必须使用令牌受众中所指定的某个标识符来标识自身,否则应该拒绝该令牌。
此字段是可选的,默认值为 API 服务器的标识。
@@ -130,7 +130,7 @@ of the projected volume.
A container using a projected volume source as a [`subPath`](/docs/concepts/storage/volumes/#using-subpath)
volume mount will not receive updates for those volume sources.
-->
-以 [`subPath`](/zh/docs/concepts/storage/volumes/#using-subpath)
+以 [`subPath`](/zh-cn/docs/concepts/storage/volumes/#using-subpath)
形式使用投射卷源的容器无法收到对应卷源的更新。
{{< /note >}}
diff --git a/content/zh-cn/docs/concepts/storage/storage-capacity.md b/content/zh-cn/docs/concepts/storage/storage-capacity.md
index 7cf604cf56..c89d98e3bc 100644
--- a/content/zh-cn/docs/concepts/storage/storage-capacity.md
+++ b/content/zh-cn/docs/concepts/storage/storage-capacity.md
@@ -25,7 +25,7 @@ multiple scheduling retries will be needed.
{{< feature-state for_k8s_version="v1.24" state="stable" >}}
本页面描述了 Kubernetes 如何跟踪存储容量以及调度程序如何为了余下的尚未挂载的卷使用该信息将
-[Pod 调度](/zh/docs/concepts/scheduling-eviction/)到能够访问到足够存储容量的节点上。
+[Pod 调度](/zh-cn/docs/concepts/scheduling-eviction/)到能够访问到足够存储容量的节点上。
如果没有跟踪存储容量,调度程序可能会选择一个没有足够容量来提供卷的节点,并且需要多次调度重试。
## {{% heading "prerequisites" %}}
@@ -100,7 +100,7 @@ significant resources there.
如果有以下情况,存储容量信息将会被 Kubernetes 调度程序使用:
- Pod 使用的卷还没有被创建,
- 卷使用引用了 CSI 驱动的 {{< glossary_tooltip text="StorageClass" term_id="storage-class" >}},
-并且使用了 `WaitForFirstConsumer` [卷绑定模式](/zh/docs/concepts/storage/storage-classes/#volume-binding-mode),
+并且使用了 `WaitForFirstConsumer` [卷绑定模式](/zh-cn/docs/concepts/storage/storage-classes/#volume-binding-mode),
- 驱动程序的 `CSIDriver` 对象的 `StorageCapacity` 被设置为 true。
在这种情况下,调度程序仅考虑将 Pod 调度到有足够存储容量的节点上。这个检测非常简单,
@@ -109,7 +109,7 @@ significant resources there.
对于具有 `Immediate` 卷绑定模式的卷,存储驱动程序将决定在何处创建该卷,而不取决于将使用该卷的 Pod。
然后,调度程序将 Pod 调度到创建卷后可使用该卷的节点上。
-对于 [CSI 临时卷](/zh/docs/concepts/storage/volumes/#csi),调度总是在不考虑存储容量的情况下进行。
+对于 [CSI 临时卷](/zh-cn/docs/concepts/storage/volumes/#csi),调度总是在不考虑存储容量的情况下进行。
这是基于这样的假设:该卷类型仅由节点本地的特殊 CSI 驱动程序使用,并且不需要大量资源。
本文描述了 Kubernetes 中 StorageClass 的概念。建议先熟悉
-[卷](/zh/docs/concepts/storage/volumes/)和
-[持久卷](/zh/docs/concepts/storage/persistent-volumes)的概念。
+[卷](/zh-cn/docs/concepts/storage/volumes/)和
+[持久卷](/zh-cn/docs/concepts/storage/persistent-volumes)的概念。
@@ -74,7 +74,7 @@ for details.
-->
管理员可以为没有申请绑定到特定 StorageClass 的 PVC 指定一个默认的存储类:
更多详情请参阅
-[PersistentVolumeClaim 章节](/zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。
+[PersistentVolumeClaim 章节](/zh-cn/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。
```yaml
apiVersion: storage.k8s.io/v1
@@ -249,7 +249,7 @@ the class or PV, If a mount option is invalid, the PV mount fails.
The `volumeBindingMode` field controls when [volume binding and dynamic
provisioning](/docs/concepts/storage/persistent-volumes/#provisioning) should occur.
-->
-`volumeBindingMode` 字段控制了[卷绑定和动态制备](/zh/docs/concepts/storage/persistent-volumes/#provisioning)
+`volumeBindingMode` 字段控制了[卷绑定和动态制备](/zh-cn/docs/concepts/storage/persistent-volumes/#provisioning)
应该发生在什么时候。
-动态配置和预先创建的 PV 也支持 [CSI卷](/zh/docs/concepts/storage/volumes/#csi),
+动态配置和预先创建的 PV 也支持 [CSI卷](/zh-cn/docs/concepts/storage/volumes/#csi),
但是你需要查看特定 CSI 驱动程序的文档以查看其支持的拓扑键名和例子。
{{< note >}}
@@ -770,7 +770,7 @@ vSphere 存储类有两种制备器
[弃用](/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/#why-are-we-migrating-in-tree-plugins-to-csi)。
更多关于 CSI 制备器的详情,请参阅
[Kubernetes vSphere CSI 驱动](https://vsphere-csi-driver.sigs.k8s.io/)
-和 [vSphereVolume CSI 迁移](/zh/docs/concepts/storage/volumes/#csi-migration-5)。
+和 [vSphereVolume CSI 迁移](/zh-cn/docs/concepts/storage/volumes/#csi-migration-5)。
在存储制备期间,为挂载凭证创建一个名为 `secretName` 的 Secret。如果集群同时启用了
-[RBAC](/zh/docs/reference/access-authn-authz/rbac/) 和
-[控制器角色](/zh/docs/reference/access-authn-authz/rbac/#controller-roles),
+[RBAC](/zh-cn/docs/reference/access-authn-authz/rbac/) 和
+[控制器角色](/zh-cn/docs/reference/access-authn-authz/rbac/#controller-roles),
为 `system:controller:persistent-volume-binder` 的 clusterrole 添加
`Secret` 资源的 `create` 权限。
diff --git a/content/zh-cn/docs/concepts/storage/volume-health-monitoring.md b/content/zh-cn/docs/concepts/storage/volume-health-monitoring.md
index 0b7f5924a4..bf1c732fd6 100644
--- a/content/zh-cn/docs/concepts/storage/volume-health-monitoring.md
+++ b/content/zh-cn/docs/concepts/storage/volume-health-monitoring.md
@@ -64,7 +64,7 @@ You need to enable the `CSIVolumeHealth` [feature gate](/docs/reference/command-
-->
{{< note >}}
你需要启用 `CSIVolumeHealth`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/),
才能在节点上使用此特性。
{{< /note >}}
diff --git a/content/zh-cn/docs/concepts/storage/volume-pvc-datasource.md b/content/zh-cn/docs/concepts/storage/volume-pvc-datasource.md
index 06454b6234..d50dcdd99c 100644
--- a/content/zh-cn/docs/concepts/storage/volume-pvc-datasource.md
+++ b/content/zh-cn/docs/concepts/storage/volume-pvc-datasource.md
@@ -21,7 +21,7 @@ weight: 60
This document describes the concept of cloning existing CSI Volumes in Kubernetes. Familiarity with [Volumes](/docs/concepts/storage/volumes) is suggested.
-->
本文档介绍 Kubernetes 中克隆现有 CSI 卷的概念。阅读前建议先熟悉
-[卷](/zh/docs/concepts/storage/volumes)。
+[卷](/zh-cn/docs/concepts/storage/volumes)。
diff --git a/content/zh-cn/docs/concepts/storage/volume-snapshot-classes.md b/content/zh-cn/docs/concepts/storage/volume-snapshot-classes.md
index 8739de2d04..47f617fe11 100644
--- a/content/zh-cn/docs/concepts/storage/volume-snapshot-classes.md
+++ b/content/zh-cn/docs/concepts/storage/volume-snapshot-classes.md
@@ -12,8 +12,8 @@ with [volume snapshots](/docs/concepts/storage/volume-snapshots/) and
[storage classes](/docs/concepts/storage/storage-classes) is suggested.
-->
本文档描述了 Kubernetes 中 VolumeSnapshotClass 的概念。建议熟悉
-[卷快照(Volume Snapshots)](/zh/docs/concepts/storage/volume-snapshots/)和
-[存储类(Storage Class)](/zh/docs/concepts/storage/storage-classes)。
+[卷快照(Volume Snapshots)](/zh-cn/docs/concepts/storage/volume-snapshots/)和
+[存储类(Storage Class)](/zh-cn/docs/concepts/storage/storage-classes)。
diff --git a/content/zh-cn/docs/concepts/storage/volume-snapshots.md b/content/zh-cn/docs/concepts/storage/volume-snapshots.md
index d556faafea..719bcfa2a3 100644
--- a/content/zh-cn/docs/concepts/storage/volume-snapshots.md
+++ b/content/zh-cn/docs/concepts/storage/volume-snapshots.md
@@ -18,7 +18,7 @@ weight: 40
In Kubernetes, a _VolumeSnapshot_ represents a snapshot of a volume on a storage system. This document assumes that you are already familiar with Kubernetes [persistent volumes](/docs/concepts/storage/persistent-volumes/).
-->
在 Kubernetes 中,卷快照是一个存储系统上卷的快照,本文假设你已经熟悉了 Kubernetes
-的 [持久卷](/zh/docs/concepts/storage/persistent-volumes/)。
+的 [持久卷](/zh-cn/docs/concepts/storage/persistent-volumes/)。
@@ -118,7 +118,7 @@ Instead of using a pre-existing snapshot, you can request that a snapshot to be
#### 动态的 {#dynamic}
可以从 `PersistentVolumeClaim` 中动态获取快照,而不用使用已经存在的快照。
-在获取快照时,[卷快照类](/zh/docs/concepts/storage/volume-snapshot-classes/)
+在获取快照时,[卷快照类](/zh-cn/docs/concepts/storage/volume-snapshot-classes/)
指定要用的特定于存储提供程序的参数。
更多详细信息,请参阅
-[卷快照和从快照还原卷](/zh/docs/concepts/storage/persistent-volumes/#volume-snapshot-and-restore-volume-from-snapshot-support)。
+[卷快照和从快照还原卷](/zh-cn/docs/concepts/storage/persistent-volumes/#volume-snapshot-and-restore-volume-from-snapshot-support)。
diff --git a/content/zh-cn/docs/concepts/storage/volumes.md b/content/zh-cn/docs/concepts/storage/volumes.md
index b8d0eb94ff..ebe50dd897 100644
--- a/content/zh-cn/docs/concepts/storage/volumes.md
+++ b/content/zh-cn/docs/concepts/storage/volumes.md
@@ -332,7 +332,7 @@ must be installed on the cluster and the `CSIMigration` and `CSIMigrationAzureFi
`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/)
+[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)
必须被启用。
要禁止控制器管理器和 kubelet 加载树内 Cinder 插件,你可以启用
-`InTreePluginOpenStackUnregister` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
+`InTreePluginOpenStackUnregister` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)。
### configMap
@@ -468,7 +468,7 @@ provides a way to inject configuration data into Pods.
The data stored in a ConfigMap object can be referenced in a volume of type
`configMap` and then consumed by containerized applications running in a Pod.
-->
-[`configMap`](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)
+[`configMap`](/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/)
卷提供了向 Pod 注入配置数据的方法。
ConfigMap 对象中存储的数据可以被 `configMap` 类型的卷引用,然后被 Pod 中运行的容器化应用使用。
@@ -524,7 +524,7 @@ keyed with `log_level`.
* Text data is exposed as files using the UTF-8 character encoding. For other character encodings, use `binaryData`.
-->
{{< note >}}
-* 在使用 [ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/) 之前你首先要创建它。
+* 在使用 [ConfigMap](/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/) 之前你首先要创建它。
* 容器以 [subPath](#using-subpath) 卷挂载方式使用 ConfigMap 时,将无法接收 ConfigMap 的更新。
* 文本数据挂载成文件时采用 UTF-8 字符编码。如果使用其他字符编码形式,可使用
`binaryData` 字段。
@@ -550,7 +550,7 @@ receive Downward API updates.
-更多详细信息请参考 [`downwardAPI` 卷示例](/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/)。
+更多详细信息请参考 [`downwardAPI` 卷示例](/zh-cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/)。
### emptyDir
@@ -612,7 +612,7 @@ backed volumes are sized to 50% of the memory on a Linux host.
-->
{{< note >}}
-当启用 `SizeMemoryBackedVolumes` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
+当启用 `SizeMemoryBackedVolumes` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)
时,你可以为基于内存提供的卷指定大小。
如果未指定大小,则基于内存的卷的大小为 Linux 主机上内存的 50%。
{{< /note>}}
@@ -818,7 +818,7 @@ Before creating a PersistentVolume, you must create the PD:
-->
#### 手动供应基于区域 PD 的 PersistentVolume {#manually-provisioning-regional-pd-pv}
-使用[为 GCE PD 定义的存储类](/zh/docs/concepts/storage/storage-classes/#gce)
+使用[为 GCE PD 定义的存储类](/zh-cn/docs/concepts/storage/storage-classes/#gce)
可以实现动态供应。在创建 PersistentVolume 之前,你首先要创建 PD。
```shell
@@ -1063,7 +1063,7 @@ Watch out when using this type of volume, because:
* 具有相同配置(例如基于同一 PodTemplate 创建)的多个 Pod
会由于节点上文件的不同而在不同节点上有不同的行为。
* 下层主机上创建的文件或目录只能由 root 用户写入。你需要在
- [特权容器](/zh/docs/tasks/configure-pod-container/security-context/)
+ [特权容器](/zh-cn/docs/tasks/configure-pod-container/security-context/)
中以 root 身份运行进程,或者修改主机上的文件权限以便容器能够写入 `hostPath` 卷。
使用 `local` 卷时,建议创建一个 StorageClass 并将其 `volumeBindingMode` 设置为
`WaitForFirstConsumer`。要了解更多详细信息,请参考
-[local StorageClass 示例](/zh/docs/concepts/storage/storage-classes/#local)。
+[local StorageClass 示例](/zh-cn/docs/concepts/storage/storage-classes/#local)。
延迟卷绑定的操作可以确保 Kubernetes 在为 PersistentVolumeClaim 作出绑定决策时,会评估
Pod 可能具有的其他节点约束,例如:如节点资源需求、节点选择器、Pod亲和性和 Pod 反亲和性。
@@ -1324,7 +1324,7 @@ A `persistentVolumeClaim` volume is used to mount a
are a way for users to "claim" durable storage (such as a GCE PersistentDisk or an
iSCSI volume) without knowing the details of the particular cloud environment.
-->
-`persistentVolumeClaim` 卷用来将[持久卷](/zh/docs/concepts/storage/persistent-volumes/)(PersistentVolume)挂载到 Pod 中。
+`persistentVolumeClaim` 卷用来将[持久卷](/zh-cn/docs/concepts/storage/persistent-volumes/)(PersistentVolume)挂载到 Pod 中。
持久卷申领(PersistentVolumeClaim)是用户在不知道特定云环境细节的情况下“申领”持久存储(例如
GCE PersistentDisk 或者 iSCSI 卷)的一种方法。
@@ -1332,7 +1332,7 @@ GCE PersistentDisk 或者 iSCSI 卷)的一种方法。
See the [PersistentVolumes example](/docs/concepts/storage/persistent-volumes/) for more
details.
-->
-更多详情请参考[持久卷示例](/zh/docs/concepts/storage/persistent-volumes/)。
+更多详情请参考[持久卷示例](/zh-cn/docs/concepts/storage/persistent-volumes/)。
### portworxVolume {#portworxvolume}
@@ -1395,7 +1395,7 @@ For more details, see the [Portworx volume](https://github.com/kubernetes/exampl
A projected volume maps several existing volume sources into the same
directory. For more details, see [projected volumes](/docs/concepts/storage/projected-volumes/).
-->
-投射卷能将若干现有的卷来源映射到同一目录上。更多详情请参考[投射卷](/zh/docs/concepts/storage/projected-volumes/)。
+投射卷能将若干现有的卷来源映射到同一目录上。更多详情请参考[投射卷](/zh-cn/docs/concepts/storage/projected-volumes/)。
### quobyte (已弃用) {#quobyte}
@@ -1483,7 +1483,7 @@ must be enabled.
`rbd.csi.ceph.com` {{ALL 权能,并且只允许添加 NET_BIND_SERVICE 权能。
-
-
- spec.containers[*].securityContext.capabilities.dropspec.initContainers[*].securityContext.capabilities.dropspec.ephemeralContainers[*].securityContext.capabilities.drop
-
- ALL 的任何一种权能列表。
-
-
- spec.containers[*].securityContext.capabilities.addspec.initContainers[*].securityContext.capabilities.addspec.ephemeralContainers[*].securityContext.capabilities.add
-
NET_BIND_SERVICE
diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/kubelet.md b/content/zh-cn/docs/reference/command-line-tools-reference/kubelet.md
index a82f0e1f53..fc7f1f31ef 100644
--- a/content/zh-cn/docs/reference/command-line-tools-reference/kubelet.md
+++ b/content/zh-cn/docs/reference/command-line-tools-reference/kubelet.md
@@ -1351,7 +1351,7 @@ A set of
<resource name>=<resource quantity> (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100')。
当前支持 cpu、memory 和用于根文件系统的 ephemeral-storage。
-请参阅这里获取更多信息。
+请参阅这里获取更多信息。
(已弃用:应在 --config 所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
diff --git a/content/zh-cn/docs/reference/config-api/kubelet-config.v1beta1.md b/content/zh-cn/docs/reference/config-api/kubelet-config.v1beta1.md
index 9650311462..15864fe93d 100644
--- a/content/zh-cn/docs/reference/config-api/kubelet-config.v1beta1.md
+++ b/content/zh-cn/docs/reference/config-api/kubelet-config.v1beta1.md
@@ -2,7 +2,6 @@
title: Kubelet 配置 (v1beta1)
content_type: tool-reference
package: kubelet.config.k8s.io/v1beta1
-auto_generated: true
---
systemCgroups是用来放置那些未被容器化的、非内核的进程的控制组
-(CGroup)的绝对名称。设置为空字符串表示没有这类容器。回滚此字段设置需要重启节点。
+(CGroup)的绝对名称。设置为空字符串表示没有这类容器。回滚此字段设置需要重启节点。
当此字段非空时,必须设置cgroupRoot字段。cgroupRoot是用来运行 Pod 的控制组 (CGroup)。
+ cgroupRoot是用来运行 Pod 的控制组(CGroup)。
容器运行时会尽可能处理此字段的设置值。cgroupDriver是 kubelet 用来操控宿主系统上控制组 (CGroup)
+ cgroupDriver是 kubelet 用来操控宿主系统上控制组(CGroup)
的驱动程序(cgroupfs 或 systemd)。systemReserved是一组资源名称=资源数量对,
用来描述为非 Kubernetes 组件预留的资源(例如:'cpu=200m,memory=150G')。
例子:`kubectl get -f ./pod.yaml`
@@ -341,7 +341,7 @@ Operation | Syntax | Description
To learn more about command operations, see the [kubectl](/docs/reference/kubectl/kubectl/) reference documentation.
-->
了解更多有关命令操作的信息,
-请参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
+请参阅 [kubectl](/zh-cn/docs/reference/kubectl/kubectl/) 参考文档。
有关如何格式化或排序某些命令的输出的信息,请参阅以下章节。有关哪些命令支持不同输出选项的详细信息,
-请参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
+请参阅 [kubectl](/zh-cn/docs/reference/kubectl/kubectl/) 参考文档。
请记住:有关每个命令支持哪种输出格式的详细信息,
-请参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
+请参阅 [kubectl](/zh-cn/docs/reference/kubectl/kubectl/) 参考文档。
要将对象排序后输出到终端窗口,可以将 `--sort-by` 参数添加到支持的 `kubectl` 命令。
通过使用 `--sort-by` 参数指定任何数字或字符串字段来对对象进行排序。
-要指定字段,请使用 [jsonpath](/zh/docs/reference/kubectl/jsonpath/) 表达式。
+要指定字段,请使用 [jsonpath](/zh-cn/docs/reference/kubectl/jsonpath/) 表达式。
* 阅读 `kubectl` 参考文档:
- * kubectl [命令参考](/zh/docs/reference/kubectl/kubectl/)
+ * kubectl [命令参考](/zh-cn/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)
+* 学习关于 [`kubectl` 使用约定](/zh-cn/docs/reference/kubectl/conventions/)
+* 阅读 kubectl 中的 [JSONPath 支持](/zh-cn/docs/reference/kubectl/jsonpath/)
+* 了解如何[使用插件扩展 kubectl](/zh-cn/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-cn/docs/reference/kubectl/cheatsheet.md b/content/zh-cn/docs/reference/kubectl/cheatsheet.md
index 9ea9111fd3..a20e05c713 100644
--- a/content/zh-cn/docs/reference/kubectl/cheatsheet.md
+++ b/content/zh-cn/docs/reference/kubectl/cheatsheet.md
@@ -94,7 +94,7 @@ detailed config file information.
## Kubectl 上下文和配置
设置 `kubectl` 与哪个 Kubernetes 集群进行通信并修改配置信息。
-查看[使用 kubeconfig 跨集群授权访问](/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
+查看[使用 kubeconfig 跨集群授权访问](/zh-cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
文档获取配置文件详细信息。
-列出所支持的全部资源类型和它们的简称、[API 组](/zh/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning), 是否是[名字空间作用域](/zh/docs/concepts/overview/working-with-objects/namespaces) 和 [Kind](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects)。
+列出所支持的全部资源类型和它们的简称、[API 组](/zh-cn/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning), 是否是[名字空间作用域](/zh-cn/docs/concepts/overview/working-with-objects/namespaces) 和 [Kind](/zh-cn/docs/concepts/overview/working-with-objects/kubernetes-objects)。
```bash
kubectl api-resources
@@ -846,8 +846,8 @@ Output format | Description
`-o=custom-columns=
- **request** ([]byte),必需
@@ -153,7 +138,7 @@ CertificateSigningRequestSpec 包含证书请求。
CertificateSigningRequests 的 list/watch 请求可以使用 “spec.signerName=NAME” 字段选择器进行过滤。
-
+ -->
众所周知的 Kubernetes 签名者有:
+
1. “kubernetes.io/kube-apiserver-client”:颁发客户端证书,用于向 kube-apiserver 进行身份验证。
对此签名者的请求永远不会被 kube-controller-manager 自动批准,
可以由 kube-controller-manager 中的 “csrsigning” 控制器颁发。
@@ -180,7 +166,7 @@ CertificateSigningRequestSpec 包含证书请求。
更多详细信息,请访问 https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers
-
+ -->
也可以指定自定义 signerName。签名者定义如下:
+
1. 信任分发:信任(CA 证书包)是如何分发的。
2. 许可的主体:当请求不允许的主体时的行为。
3. 请求中必需、许可或禁止的 x509 扩展(包括是否允许 subjectAltNames、哪些类型、对允许值的限制)
@@ -214,16 +201,16 @@ CertificateSigningRequestSpec 包含证书请求。
证书签署者可以颁发具有不同有效期的证书,
因此客户端必须检查颁发证书中 notBefore 和 notAfter 字段之间的增量以确定实际持续时间。
-
+ -->
众所周知的 Kubernetes 签名者在 v1.22+ 版本内实现将遵守此字段,
只要请求的持续时间不大于最大持续时间,它们将遵守 Kubernetes 控制管理器的
--cluster-signing-duration CLI 标志。
-
+ -->
由于各种原因,证书签名者可能忽略此字段:
1. 不认识此字段的旧签名者(如 v1.22 版本之前的实现)
@@ -299,7 +286,7 @@ CertificateSigningRequestSpec 包含证书请求。
TLS 服务证书的请求通常要求:"key encipherment"、"digital signature"、"server auth"。
-
+ -->
有效值:
- "signing"、"digital signature"、"content commitment"、
- "key encipherment"、"key agreement"、"data encipherment"、
- "cert sign"、"crl sign"、"encipher only"、"decipher only"、"any"、
- "server auth"、"client auth"、
- "code signing"、"email protection"、"s/mime"、
- "ipsec end system"、"ipsec tunnel"、"ipsec user"、
- "timestamping"、"ocsp signing"、"microsoft sgc"、"netscape sgc"。
+ "signing"、"digital signature"、"content commitment"、
+ "key encipherment"、"key agreement"、"data encipherment"、
+ "cert sign"、"crl sign"、"encipher only"、"decipher only"、"any"、
+ "server auth"、"client auth"、
+ "code signing"、"email protection"、"s/mime"、
+ "ipsec end system"、"ipsec tunnel"、"ipsec user"、
+ "timestamping"、"ocsp signing"、"microsoft sgc"、"netscape sgc"。
-## 证书签名请求状态 CertificateSigningRequestStatus {#CertificateSigningRequestStatus}
+## CertificateSigningRequestStatus {#CertificateSigningRequestStatus}
CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败状态和颁发证书的状况。
@@ -363,30 +350,31 @@ CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败
如果证书签名请求被拒绝,则添加类型为 “Denied” 的状况,并且保持该字段为空。
如果签名者不能颁发证书,则添加类型为 “Failed” 的状况,并且保持该字段为空。
-
+ -->
验证要求:
+
1. 证书必须包含一个或多个 PEM 块。
2. 所有的 PEM 块必须有 “CERTIFICATE” 标签,不包含头和编码的数据,
必须是由 BER 编码的 ASN.1 证书结构,如 RFC5280 第 4 节所述。
3. 非 PEM 内容可能出现在 “CERTIFICATE”PEM 块之前或之后,并且是未验证的,
允许如 RFC7468 5.2 节中描述的解释性文本。
-
+ -->
如果存在多个 PEM 块,并且所请求的 spec.signerName 的定义没有另外说明,
那么第一个块是颁发的证书,后续的块应该被视为中间证书并在 TLS 握手中呈现。
-
+ -->
证书编码为 PEM 格式。
当序列化为 JSON 或 YAML 时,数据额外采用 base64 编码,它包括:
+
```
base64(
-----BEGIN CERTIFICATE-----
@@ -407,6 +396,7 @@ CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败
-----END CERTIFICATE-----
)
```
+
+ -->
- **conditions.status** (string),必需
状况的状态,True、False、Unknown 之一。Approved、Denied 与 Failed 的状况不可以是 "False" 或 "Unknown"。
-
+ -->
- **conditions.type** (string),必需
状况的类型。已知的状况是 "Approved"、"Denied" 与 "Failed"。
@@ -462,7 +452,7 @@ CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败
给定类型只允许设置一种状况。
-
+ -->
- **conditions.lastTransitionTime** (Time)
@@ -482,7 +472,7 @@ CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败
**Time 是 time.Time 的包装器,支持正确编码为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。**
-
+ -->
- **conditions.lastUpdateTime** (Time)
lastUpdateTime 是该状况最后一次更新的时间。
@@ -498,20 +488,20 @@ CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败
**Time 是 time.Time 的包装器,支持正确编组为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。**
-
+ -->
- **conditions.message** (string)
message 包含一个人类可读的消息,包含关于请求状态的详细信息。
-
+ -->
- **conditions.reason** (string)
reason 表示请求状态的简短原因。
@@ -523,7 +513,7 @@ CertificateSigningRequestList is a collection of CertificateSigningRequest objec
-->
-## 证书签名请求列表 CertificateSigningRequestList {#CertificateSigningRequestList}
+## CertificateSigningRequestList {#CertificateSigningRequestList}
CertificateSigningRequestList 是 CertificateSigningRequest 对象的集合。
@@ -550,11 +540,8 @@ CertificateSigningRequestList 是 CertificateSigningRequest 对象的集合。
items 是 CertificateSigningRequest 对象的集合。
-
## 操作 {#Operations}
@@ -1597,4 +1584,4 @@ DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests
200 (}}">Status): OK
-401: Unauthorized
\ No newline at end of file
+401: Unauthorized
diff --git a/content/zh-cn/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md b/content/zh-cn/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md
index 8611df1606..b2c44fc792 100644
--- a/content/zh-cn/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md
+++ b/content/zh-cn/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md
@@ -78,7 +78,7 @@ ServiceAccount 将以下内容绑定在一起:
-->
imagePullSecrets 是对同一命名空间中 Secret 的引用列表,用于拉取引用此 ServiceAccount 的 Pod 中的任何镜像。
imagePullSecrets 与 Secrets 不同,因为 Secrets 可以挂载在 Pod 中,但 imagePullSecrets 只能由 kubelet 访问。
- 更多信息: https://kubernetes.io/zh/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
+ 更多信息: https://kubernetes.io/zh-cn/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
- **secrets** ([]}}">ObjectReference)
@@ -130,7 +130,7 @@ ServiceAccountList 是 ServiceAccount 对象的列表
- ServiceAccount 列表,更多信息: https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-service-account/
+ ServiceAccount 列表,更多信息: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/
+
+`apiVersion: authentication.k8s.io/v1`
+
+`import "k8s.io/api/authentication/v1"`
+
+## TokenRequest {#TokenRequest}
+
+TokenRequest 为给定的服务账号请求一个令牌。
+
+
+
+- **apiVersion**: authentication.k8s.io/v1
+
+- **kind**: TokenRequest
+
+
+- **metadata** (}}">ObjectMeta)
+
+ 标准的对象元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">TokenRequestSpec),必需
+
+ spec 包含与正被评估的请求相关的信息。
+
+- **status** (}}">TokenRequestStatus)
+
+ status 由服务器填充,表示该令牌是否可用于身份认证。
+
+## TokenRequestSpec {#TokenRequestSpec}
+
+TokenRequestSpec 包含客户端提供的令牌请求参数。
+
+
+
+
+- **audiences** ([]string),必需
+
+ audiences 是令牌预期的受众。
+ 令牌的接收方必须在令牌的受众列表中用一个标识符来标识自己,否则应拒绝该令牌。
+ 为多个受众签发的令牌可用于认证所列举的任意受众的身份,但这意味着目标受众彼此之间的信任程度较高。
+
+- **boundObjectRef** (BoundObjectReference)
+
+
+ boundObjectRef 是对令牌所绑定的一个对象的引用。该令牌只有在绑定对象存在时才有效。
+ 注:API 服务器的 TokenReview 端点将校验 boundObjectRef,但其他受众可能不用这样。
+ 如果你想要快速撤销,请为 expirationSeconds 设一个较小的值。
+
+
+ **BoundObjectReference 是对令牌所绑定的一个对象的引用。**
+
+
+ - **boundObjectRef.apiVersion** (string)
+
+ 引用对象的 API 版本。
+
+ - **boundObjectRef.kind** (string)
+
+ 引用对象的类别。有效的类别为 “Pod” 和 “Secret”。
+
+ - **boundObjectRef.name** (string)
+
+ 引用对象的名称。
+
+ - **boundObjectRef.uid** (string)
+ 引用对象的 UID。
+
+
+- **expirationSeconds** (int64)
+
+ expirationSeconds 是请求生效的持续时间。
+ 令牌签发方可能返回一个生效期不同的令牌,因此客户端需要检查响应中的 “expiration” 字段。
+
+## TokenRequestStatus {#TokenRequestStatus}
+
+TokenRequestStatus 是一个令牌请求的结果。
+
+
+
+
+- **expirationTimestamp** (Time),必需
+
+ expirationTimestamp 是已返回令牌的到期时间。
+
+
+ **Time 是 time.Time 的包装器,支持正确编组为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。**
+
+- **token** (string),必需
+
+ token 是不透明的持有者令牌(Bearer Token)。
+
+
+## 操作 {#Operations}
+
+
+### `create` 创建 ServiceAccount 的令牌
+#### HTTP 请求
+POST /api/v1/namespaces/{namespace}/serviceaccounts/{name}/token
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+
+ TokenRequest 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">TokenRequest,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">TokenRequest): OK
+
+201 (}}">TokenRequest): Created
+
+202 (}}">TokenRequest): Accepted
+
+401: Unauthorized
+
diff --git a/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/api-service-v1.md b/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/api-service-v1.md
new file mode 100644
index 0000000000..c6c92edd6c
--- /dev/null
+++ b/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/api-service-v1.md
@@ -0,0 +1,785 @@
+---
+api_metadata:
+ apiVersion: "apiregistration.k8s.io/v1"
+ import: "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
+ kind: "APIService"
+content_type: "api_reference"
+description: "APIService 是用来表示一个特定的 GroupVersion 的服务器"
+title: "APIService"
+weight: 4
+---
+
+
+
+`apiVersion: apiregistration.k8s.io/v1`
+
+`import "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"`
+
+
+## APIService {#APIService}
+
+
+APIService 是用来表示一个特定的 GroupVersion 的服务器。名称必须为 "version.group"。
+
+
+
+- **apiVersion**: apiregistration.k8s.io/v1
+
+- **kind**: APIService
+
+- **metadata** (}}">ObjectMeta)
+
+ 标准的对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">APIServiceSpec)
+
+ spec 包含用于定位和与服务器通信的信息
+
+- **status** (}}">APIServiceStatus)
+
+ status 包含某 API 服务器的派生信息
+
+
+## APIServiceSpec {#APIServiceSpec}
+
+APIServiceSpec 包含用于定位和与服务器通信的信息。仅支持 HTTPS 协议,但是你可以禁用证书验证。
+
+
+
+- **groupPriorityMinimum** (int32), 必需
+
+ groupPriorityMininum 是这个组至少应该具有的优先级。优先级高表示客户端优先选择该组。
+ 请注意,该组的其他版本可能会指定更高的 groupPriorityMininum 值,使得整个组获得更高的优先级。
+ 主排序基于 groupPriorityMinimum 值,从高到低排序(20 在 10 之前)。
+ 次要排序基于对象名称的字母顺序(v1.bar 在 v1.foo 之前)。
+ 我们建议这样配置:`*.k8s.io`(扩展除外)值设置为 18000,PaaS(OpenShift、Deis)建议值为 2000 左右。
+
+- **versionPriority** (int32), 必需
+
+ versionPriority 控制该 API 版本在其组中的排序,必须大于零。主排序基于 versionPriority,
+ 从高到低排序(20 在 10 之前)。因为在同一个组里,这个数字可以很小,可能是几十。
+ 在版本优先级相等的情况下,版本字符串将被用来计算组内的顺序。如果版本字符串是与 Kubernetes 的版本号形式类似,
+ 则它将排序在 Kubernetes 形式版本字符串之前。Kubernetes 的版本号字符串按字典顺序排列。
+ Kubernetes 版本号以 “v” 字符开头,后面是一个数字(主版本),然后是可选字符串 “alpha” 或 “beta” 和另一个数字(次要版本)。
+ 它们首先按 GA > beta > alpha 排序(其中 GA 是没有 beta 或 alpha 等后缀的版本),然后比较主要版本,
+ 最后是比较次要版本。版本排序列表示例:v10、v2、v1、v11beta2、v10beta3、v3beta1、v12alpha1、v11alpha2、foo1、foo10。
+
+- **caBundle** ([]byte)
+
+ **原子性:将在合并期间被替换**
+
+ caBundle 是一个 PEM 编码的 CA 包,用于验证 API 服务器的服务证书。如果未指定,
+ 则使用 API 服务器上的系统根证书。
+
+- **group** (string)
+
+ group 是此服务器主机的 API 组名称。
+
+- **insecureSkipTLSVerify** (boolean)
+
+ insecureSkipTLSVerify 代表在与此服务器通信时禁用 TLS 证书验证。强烈建议不要这样做。你应该使用 caBundle。
+
+- **service** (ServiceReference)
+
+ service 是对该 API 服务器的服务的引用。它只能在端口 443 上通信。如果 service 是 nil,
+ 则意味着 API groupversion 的处理是在当前服务器上本地处理的。服务调用被直接委托给正常的处理程序链来完成。
+
+
+
+ **ServiceReference 保存对 Service.legacy.k8s.io 的一个引用。**
+
+ - **service.name** (string)
+
+ name 是服务的名称
+
+ - **service.namespace** (string)
+
+ namespace 是服务的命名空间
+
+ - **service.port** (int32)
+
+ 如果指定,则为托管 Webhook 的服务上的端口。为实现向后兼容,默认端口号为 443。
+ `port` 应该是一个有效的端口号(1-65535,包含)。
+
+- **version** (string)
+
+ version 是此服务器的 API 版本。例如:“v1”。
+
+## APIServiceStatus {#APIServiceStatus}
+
+
+APIServiceStatus 包含有关 API 服务器的派生信息
+
+
+
+- **conditions** ([]APIServiceCondition)
+
+ **补丁策略:基于键 `type` 合并**
+
+ **Map:合并时将保留 type 键的唯一值**
+
+ APIService 的当前服务状态。
+
+
+
+ **APIServiceCondition 描述 APIService 在特定点的状态**
+
+ - **conditions.status** (string), 必需
+
+ status 表示状况(Condition)的状态,取值为 True、False 或 Unknown 之一。
+
+ - **conditions.type** (string), 必需
+
+ type 是状况的类型。
+
+ - **conditions.lastTransitionTime** (Time)
+
+ 上一次发生状况状态转换的时间。
+
+
+
+ Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。为 time 包的许多函数方法提供了封装器。
+
+ - **conditions.message** (string)
+
+ 指示上次转换的详细可读信息。
+
+ - **conditions.reason** (string)
+
+ 表述状况上次转换原因的、驼峰格式命名的、唯一的一个词。
+
+
+## APIServiceList {#APIServiceList}
+
+APIServiceList 是 APIService 对象的列表。
+
+
+
+- **apiVersion**: apiregistration.k8s.io/v1
+
+- **kind**: APIServiceList
+
+- **metadata** (}}">ListMeta)
+
+ 标准的列表元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **items** ([]}}">APIService), 必需
+
+ items 是 APIService 的列表
+
+
+## Operations {#Operations}
+
+
+
+
+### `get` 读取指定的 APIService
+
+#### HTTP 请求
+
+GET /apis/apiregistration.k8s.io/v1/apiservices/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**):string,必需
+
+ APIService 名称
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">APIService): OK
+
+401: Unauthorized
+
+
+### `get` 读取指定 APIService 的状态
+
+#### HTTP 请求
+
+GET /apis/apiregistration.k8s.io/v1/apiservices/{name}/status
+
+
+#### 参数
+
+- **name** (**路径参数**):string,必需
+
+ APIService 名称
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">APIService): OK
+
+401: Unauthorized
+
+
+### `list` 列出或观察 APIService 类的对象
+
+#### HTTP 请求
+
+GET /apis/apiregistration.k8s.io/v1/apiservices
+
+
+#### 参数
+
+- **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 (}}">APIServiceList): OK
+
+401: Unauthorized
+
+
+### `create` 创建一个 APIService
+
+#### HTTP 请求
+
+POST /apis/apiregistration.k8s.io/v1/apiservices
+
+
+#### 参数
+
+- **body**:}}">APIService, 必需
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">APIService): OK
+
+201 (}}">APIService): Created
+
+202 (}}">APIService): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换指定的 APIService
+
+#### HTTP 请求
+
+PUT /apis/apiregistration.k8s.io/v1/apiservices/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**):string, 必需
+
+ APIService 名称
+
+- **body**:}}">APIService, 必需
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">APIService): OK
+
+201 (}}">APIService): Created
+
+401: Unauthorized
+
+
+### `update` 替换指定 APIService 的 status
+
+#### HTTP 请求
+
+PUT /apis/apiregistration.k8s.io/v1/apiservices/{name}/status
+
+
+#### 参数
+- **name**(**路径参数**):string, 必需
+
+ APIService 名称
+
+- **body**:}}">APIService, 必需
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">APIService): OK
+
+201 (}}">APIService): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定的 APIService
+
+#### HTTP 请求
+
+PATCH /apis/apiregistration.k8s.io/v1/apiservices/{name}
+
+
+#### 参数
+
+- **name**(**路径参数**):string, 必需
+
+ APIService 名称
+
+- **body**:}}">Patch, 必需
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**):boolean
+
+ }}">force
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">APIService): OK
+
+201 (}}">APIService): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定 APIService 的 status
+
+#### HTTP 请求
+
+PATCH /apis/apiregistration.k8s.io/v1/apiservices/{name}/status
+
+
+#### 参数
+
+- **name**(**路径参数**):string, 必需
+
+ APIService 名称
+
+- **body**:}}">Patch, 必需
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**):boolean
+
+ }}">force
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">APIService): OK
+
+201 (}}">APIService): Created
+
+401: Unauthorized
+
+
+### `delete` 删除一个 APIService
+
+#### HTTP 请求
+
+DELETE /apis/apiregistration.k8s.io/v1/apiservices/{name}
+
+
+#### 参数
+
+- **name**(**路径参数**):string, 必需
+
+ APIService 名称
+
+- **body**:}}">DeleteOptions
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+- **gracePeriodSeconds** (**查询参数**):integer
+
+ }}">gracePeriodSeconds
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**):string
+
+ }}">propagationPolicy
+
+
+#### 响应
+
+200 (}}">Status): OK
+
+202 (}}">Status): Accepted
+
+401: Unauthorized
+
+
+### `deletecollection` 删除 APIService 集合
+
+#### HTTP 请求
+
+DELETE /apis/apiregistration.k8s.io/v1/apiservices
+
+
+#### 参数
+
+- **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-cn/docs/reference/kubernetes-api/cluster-resources/component-status-v1.md b/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/component-status-v1.md
new file mode 100644
index 0000000000..d42187e296
--- /dev/null
+++ b/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/component-status-v1.md
@@ -0,0 +1,225 @@
+---
+api_metadata:
+ apiVersion: "v1"
+ import: "k8s.io/api/core/v1"
+ kind: "ComponentStatus"
+content_type: "api_reference"
+description: "ComponentStatus(和 ComponentStatusList)保存集群检验信息。"
+title: "ComponentStatus"
+weight: 10
+---
+
+
+`apiVersion: v1`
+
+`import "k8s.io/api/core/v1"`
+
+## ComponentStatus {#ComponentStatus}
+
+ComponentStatus(和 ComponentStatusList)保存集群检验信息。
+已废弃:该 API 在 v1.19 及更高版本中废弃。
+
+
+
+- **apiVersion**: v1
+
+- **kind**: ComponentStatus
+
+- **metadata** (}}">ObjectMeta)
+
+
+ 标准的对象元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **conditions** ([]ComponentCondition)
+
+
+ **补丁策略:基于键 `type` 合并**
+
+ 观测到的组件状况的列表。
+
+
+ **组件状况相关信息。**
+
+ - **conditions.status** (string),必需
+
+ 组件状况的状态。“Healthy” 的有效值为:“True”、“False” 或 “Unknown”。
+
+
+ - **conditions.type** (string),必需
+
+ 组件状况的类型。有效值:“Healthy”
+
+ - **conditions.error** (string)
+
+ 组件状况的错误码。例如,一个健康检查错误码。
+
+ - **conditions.message** (string)
+
+ 组件状况相关消息。例如,有关健康检查的信息。
+
+## ComponentStatusList {#ComponentStatusList}
+
+作为 ComponentStatus 对象列表,所有组件状况的状态。
+已废弃:该 API 在 v1.19 及更高版本中废弃。
+
+
+- **apiVersion**: v1
+
+- **kind**: ComponentStatusList
+
+
+- **metadata** (}}">ListMeta)
+
+ 标准的对象元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+
+- **items** ([]}}">ComponentStatus),必需
+
+ ComponentStatus 对象的列表。
+
+
+## 操作 {#Operations}
+
+
+### `get` 读取指定的 ComponentStatus
+#### HTTP 请求
+GET /api/v1/componentstatuses/{name}
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+
+ ComponentStatus 的名称
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">ComponentStatus): OK
+
+401: Unauthorized
+
+
+### `list` 列出 ComponentStatus 类别的对象
+#### HTTP 请求
+GET /api/v1/componentstatuses
+
+
+#### 参数
+- **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 (}}">ComponentStatusList): OK
+
+401: Unauthorized
diff --git a/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/lease-v1.md b/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/lease-v1.md
new file mode 100644
index 0000000000..425cfcab7f
--- /dev/null
+++ b/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/lease-v1.md
@@ -0,0 +1,1073 @@
+---
+api_metadata:
+ apiVersion: "coordination.k8s.io/v1"
+ import: "k8s.io/api/coordination/v1"
+ kind: "Lease"
+content_type: "api_reference"
+description: "Lease defines a lease concept."
+title: "Lease"
+weight: 5
+---
+
+
+
+`apiVersion: coordination.k8s.io/v1`
+
+`import "k8s.io/api/coordination/v1"`
+
+
+## Lease {#Lease}
+
+Lease 定义了租约的概念。
+
+
+- **apiVersion**: coordination.k8s.io/v1
+
+
+- **kind**: Lease
+
+
+- **metadata** (}}">ObjectMeta)
+
+
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">LeaseSpec)
+
+
+ Lease 规范。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+
+
+
+
+## LeaseSpec {#LeaseSpec}
+
+
+LeaseSpec 是一个 Lease 的规范。
+
+
+
+
+- **acquireTime** (MicroTime)
+
+ acquireTime 是当前租约被获取的时间。
+
+
+ **MicroTime 是微秒级精确时间的版本。**
+
+- **holderIdentity** (string)
+
+ holderIdentity 包含当前租约持有人的身份。
+
+- **leaseDurationSeconds** (int32)
+
+ leaseDurationSeconds 是租约候选人需要等待强制获取租约的持续时间。这是相对于上次观察到的更新时间的度量。
+
+- **leaseTransitions** (int32)
+
+ LeasetTransitions 是租约持有人之间的转换次数。
+
+- **renewTime** (MicroTime)
+
+ renewTime 是当前租约持有人上次更新租约的时间。
+
+
+ **MicroTime 是具有微秒级精度的时间版本。**
+
+
+
+
+## LeaseList {#LeaseList}
+
+
+LeaseList 是 Lease 对象的列表。
+
+
+
+- **apiVersion**: coordination.k8s.io/v1
+
+
+- **kind**: LeaseList
+
+
+- **metadata** (}}">ListMeta)
+
+
+ 标准列表元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **items** ([]}}">Lease), required
+
+
+ Items 是架构对象的列表。
+
+
+
+
+## 操作 {#operations}
+
+
+
+
+
+
+
+
+
+### `get` 读取指定的租赁
+
+#### HTTP 请求
+
+GET /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
+
+#### 参数
+
+
+- **name** (**路径参数**): string, 必需
+
+ Lease 名称
+
+- **namespace** (**路径参数**): string, 必需
+
+ }}">namespace
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Lease): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 Lease 类对象
+
+#### HTTP 请求
+
+GET /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases
+
+
+#### 参数
+
+
+- **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 (}}">LeaseList): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 Lease 类对象
+
+#### HTTP 请求
+
+GET /apis/coordination.k8s.io/v1/leases
+
+
+#### 参数
+
+
+- **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 (}}">LeaseList): OK
+
+401: Unauthorized
+
+
+### `create` 创建 Lease
+
+#### HTTP 请求
+
+POST /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases
+
+
+#### 参数
+
+
+- **namespace** (**路径参数**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">Lease, 必需
+
+
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+
+200 (}}">Lease): OK
+
+201 (}}">Lease): Created
+
+202 (}}">Lease): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换指定的 Lease
+
+#### HTTP 请求
+
+PUT /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
+
+#### 参数
+
+
+- **name** (**路径参数**): string, 必需
+
+ 租贷名称
+
+
+- **namespace** (**路径参数**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">Lease, 必需
+
+
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+
+200 (}}">Lease): OK
+
+201 (}}">Lease): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定的 Lease
+
+#### HTTP 请求
+
+PATCH /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
+
+#### 参数
+
+
+- **name** (**路径参数**): string, 必需
+
+ 租贷名称
+
+
+- **namespace** (**路径参数**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">Patch, 必需
+
+
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+
+200 (}}">Lease): OK
+
+201 (}}">Lease): Created
+
+401: Unauthorized
+
+
+### `delete` 删除一个 Lease
+
+#### HTTP 请求
+
+DELETE /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
+
+#### 参数
+
+
+- **name** (**路径参数**): string, 必需
+
+ 租贷的名称
+
+
+- **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` 删除 Lease 收款
+
+#### HTTP 请求
+
+DELETE /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases
+
+#### 参数
+
+
+- **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-cn/docs/reference/kubernetes-api/cluster-resources/runtime-class-v1.md b/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/runtime-class-v1.md
new file mode 100644
index 0000000000..9054b8a692
--- /dev/null
+++ b/content/zh-cn/docs/reference/kubernetes-api/cluster-resources/runtime-class-v1.md
@@ -0,0 +1,593 @@
+---
+api_metadata:
+ apiVersion: "node.k8s.io/v1"
+ import: "k8s.io/api/node/v1"
+ kind: "RuntimeClass"
+content_type: "api_reference"
+description: "RuntimeClass 定义集群中支持的容器运行时类。"
+title: "RuntimeClass"
+weight: 6
+---
+
+`apiVersion: node.k8s.io/v1`
+
+`import "k8s.io/api/node/v1"`
+
+## RuntimeClass {#RuntimeClass}
+
+RuntimeClass 定义集群中支持的容器运行时类。
+RuntimeClass 用于确定哪个容器运行时用于运行某 Pod 中的所有容器。
+RuntimeClass 由用户或集群制备程序手动定义,并在 PodSpec 中引用。
+Kubelet 负责在运行 Pod 之前解析 RuntimeClassName 引用。
+有关更多详细信息,请参阅
+https://kubernetes.io/zh-cn/docs/concepts/containers/runtime-class/
+
+
+
+- **apiVersion**: node.k8s.io/v1
+
+- **kind**: RuntimeClass
+
+
+- **metadata** (}}">ObjectMeta)
+
+ 更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **handler** (string),必需
+
+ handler 指定底层运行时和配置,在 CRI 实现过程中将使用这些运行时和配置来处理这个类的 Pod。
+ 可能的值特定于节点和 CRI 配置。
+ 假定所有 handler 可用于每个节点上,且同一名称的 handler 在所有节点上是等效的。
+ 例如,一个名为 “runc” 的 handler 可能指定 runc OCI 运行时将(使用原生 Linux 容器)
+ 用于运行 Pod 中的容器。该 handler 必须采用小写,遵从 DNS Label (RFC 1123) 要求,且是不可变更的。
+
+
+- **overhead** (Overhead)
+
+ overhead 表示运行给定 RuntimeClass 的 Pod 时所关联的资源开销。有关更多详细信息,请参阅
+ https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/pod-overhead/
+
+
+ **Overhead 结构表示运行一个 Pod 所关联的资源开销。**
+
+
+
+ - **overhead.podFixed** (map[string]}}">Quantity)
+
+ podFixed 表示与运行一个 Pod 所关联的资源开销。
+
+
+- **scheduling** (Scheduling)
+
+ scheduling 包含调度约束,这些约束用来确保以这个 RuntimeClass 运行的 Pod 被调度到支持此运行时类的节点。
+ 如果 scheduling 设为空,则假定所有节点支持此 RuntimeClass。
+
+
+ **Scheduling 指定支持 RuntimeClass 的节点的调度约束。**
+
+
+
+ - **scheduling.nodeSelector** (map[string]string)
+
+ nodeSelector 列出支持此 RuntimeClass 的节点上必须存在的标签。
+ 使用此 RuntimeClass 的 Pod 只能调度到与这个选择算符匹配的节点上。
+ RuntimeClass nodeSelector 与 Pod 现有的 nodeSelector 合并。
+ 任何冲突均会使得该 Pod 在准入时被拒绝。
+
+
+
+ - **scheduling.tolerations** ([]Toleration)
+
+ **原子性:将在合并期间被替换**
+
+ tolerations 在准入期间追加到以此 RuntimeClass 运行的 Pod(不包括重复项)上,
+ 本质上是求取 Pod 和 RuntimeClass 所容忍的节点并集。
+
+
+ **附加此容忍度的 Pod 将容忍用匹配运算符 `operator` 运算后与三元组
+ `
+
+- **apiVersion**: node.k8s.io/v1
+
+- **kind**: RuntimeClassList
+
+
+- **metadata** (}}">ListMeta)
+
+ 标准的对象元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **items** ([]}}">RuntimeClass),必需
+
+ items 是 schema 对象的列表。
+
+
+## 操作 {#Operations}
+
+
+### `get` 读取指定的 RuntimeClass
+#### HTTP 请求
+GET /apis/node.k8s.io/v1/runtimeclasses/{name}
+
+
+##### 参数
+- **name** (**路径参数**): string,必需
+
+ RuntimeClass 的名称
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">RuntimeClass): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 RuntimeClass 类别的对象
+#### HTTP 请求
+GET /apis/node.k8s.io/v1/runtimeclasses
+
+
+##### 参数
+- **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 (}}">RuntimeClassList): OK
+
+401: Unauthorized
+
+
+### `create` 创建 RuntimeClass
+#### HTTP 请求
+POST /apis/node.k8s.io/v1/runtimeclasses
+
+##### 参数
+- **body**: }}">RuntimeClass,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">RuntimeClass): OK
+
+201 (}}">RuntimeClass): Created
+
+202 (}}">RuntimeClass): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换指定的 RuntimeClass
+#### HTTP 请求
+PUT /apis/node.k8s.io/v1/runtimeclasses/{name}
+
+
+##### 参数
+- **name** (**路径参数**): string,必需
+
+ RuntimeClass 的名称
+
+- **body**: }}">RuntimeClass,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">RuntimeClass): OK
+
+201 (}}">RuntimeClass): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定的 RuntimeClass
+#### HTTP 请求
+PATCH /apis/node.k8s.io/v1/runtimeclasses/{name}
+
+
+##### 参数
+- **name** (**路径参数**): string,必需
+
+ RuntimeClass 的名称
+
+- **body**: }}">Patch,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">RuntimeClass): OK
+
+201 (}}">RuntimeClass): Created
+
+401: Unauthorized
+
+
+### `delete` 删除 RuntimeClass
+#### HTTP 请求
+DELETE /apis/node.k8s.io/v1/runtimeclasses/{name}
+
+
+##### 参数
+- **name** (**路径参数**): string,必需
+
+ RuntimeClass 的名称
+
+- **body**: }}">DeleteOptions
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+
+#### 响应
+200 (}}">Status): OK
+
+202 (}}">Status): Accepted
+
+401: Unauthorized
+
+
+### `deletecollection` 删除 RuntimeClass 的集合
+#### HTTP 请求
+DELETE /apis/node.k8s.io/v1/runtimeclasses
+
+
+##### 参数
+- **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-cn/docs/reference/kubernetes-api/common-definitions/local-object-reference.md b/content/zh-cn/docs/reference/kubernetes-api/common-definitions/local-object-reference.md
index 198d2bd193..80b46ad9a8 100644
--- a/content/zh-cn/docs/reference/kubernetes-api/common-definitions/local-object-reference.md
+++ b/content/zh-cn/docs/reference/kubernetes-api/common-definitions/local-object-reference.md
@@ -39,7 +39,7 @@ LocalObjectReference 包含足够的信息,可以让你在同一命名空间
- **name** (string)
被引用者的名称。
- 更多信息: https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/names/#names。
+ 更多信息: https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names。
diff --git a/content/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1.md b/content/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1.md
index 0e6a10abf8..18251f251d 100644
--- a/content/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1.md
+++ b/content/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1.md
@@ -83,7 +83,7 @@ data 字段值的总字节必须小于 MaxSecretSize 字节。
用于满足程序化方式处理秘密数据。
更多信息:
- https://kubernetes.io/zh/docs/concepts/configuration/secret/#secret-types
+ https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/#secret-types
## SecretList {#SecretList}
@@ -117,7 +117,7 @@ SecretList 是 Secret 的列表。
items 是 Secret 对象的列表。
更多信息:
- https://kubernetes.io/zh/docs/concepts/configuration/secret
+ https://kubernetes.io/zh-cn/docs/concepts/configuration/secret
+
+`apiVersion: storage.k8s.io/v1`
+
+`import "k8s.io/api/storage/v1"`
+
+## VolumeAttachment {#VolumeAttachment}
+
+VolumeAttachment 抓取将指定卷挂接到指定节点或从指定节点解除挂接指定卷的意图。
+
+VolumeAttachment 对象未划分命名空间。
+
+
+
+- **apiVersion**: storage.k8s.io/v1
+- **kind**: VolumeAttachment
+
+
+- **metadata** (}}">ObjectMeta)
+ 标准的对象元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">VolumeAttachmentSpec),必需
+ 期望的挂接/解除挂接卷行为的规约。由 Kubernetes 系统填充。
+
+
+- **status** (}}">VolumeAttachmentStatus)
+ VolumeAttachment 请求的状态。由完成挂接或解除挂接操作的实体(即外部挂接器)进行填充。
+
+## VolumeAttachmentSpec {#VolumeAttachmentSpec}
+
+VolumeAttachmentSpec 是 VolumeAttachment 请求的规约。
+
+
+
+
+- **attacher** (string),必需
+ attacher 表示必须处理此请求的卷驱动的名称。这是由 GetPluginName() 返回的名称。
+
+- **nodeName** (string),必需
+ 卷应挂接到的节点。
+
+
+- **source** (VolumeAttachmentSource),必需
+ source 表示应挂接的卷。
+
+
+ **VolumeAttachmentSource 表示应挂接的卷。现在只能通过外部挂接器挂接 PersistenVolume,
+ 将来我们可能还允许 Pod 中的内联卷。只能设置一个成员。**
+
+ - **source.inlineVolumeSpec** (}}">PersistentVolumeSpec)
+
+ inlineVolumeSpec 包含挂接由 Pod 的内联 VolumeSource 定义的持久卷时所有必需的信息。
+ 仅为 CSIMigation 功能填充此字段。
+ 它包含从 Pod 的内联 VolumeSource 转换为 PersistentVolumeSpec 的字段。
+ 此字段处于 beta 阶段,且只有启用 CSIMigration 功能的服务器才能使用此字段。
+
+ - **source.persistentVolumeName** (string)
+ 要挂接的持久卷的名称。
+
+## VolumeAttachmentStatus {#VolumeAttachmentStatus}
+
+VolumeAttachmentStatus 是 VolumeAttachment 请求的状态。
+
+
+
+- **attached** (boolean),必需
+ 表示卷被成功挂接。此字段只能由完成挂接操作的实体(例如外部挂接器)进行设置。
+
+
+- **attachError** (VolumeError)
+ 挂接操作期间遇到的最后一个错误,如果有。
+ 此字段只能由完成挂接操作的实体(例如外部挂接器)进行设置。
+
+
+ **VolumeError 抓取卷操作期间遇到的一个错误。**
+
+ - **attachError.message** (string)
+ 此字符串详细说明挂接或解除挂接操作期间遇到的错误。
+ 此字符串可以放入日志,因此它不应包含敏感信息。
+
+ - **attachError.time** (Time)
+ 遇到错误的时间。
+
+
+ **time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
+ 为 time 包提供的许多工厂方法提供了包装类。**
+
+
+- **attachmentMetadata** (map[string]string)
+ 成功挂接时,此字段将由挂接操作返回的任何信息进行填充,
+ 这些信息必须传递到后续的 WaitForAttach 或 Mount 调用中。
+ 此字段只能由完成挂接操作的实体(例如外部挂接器)进行设置。
+
+
+- **detachError** (VolumeError)
+ 解除挂接操作期间遇到的最后一个错误,如果有。
+ 此字段只能由完成解除挂接操作的实体(例如外部挂接器)进行设置。
+
+
+ **VolumeError 抓取卷操作期间遇到的一个错误。**
+
+ - **detachError.message** (string)
+ 此字符串详细说明挂接或解除挂接操作期间遇到的错误。
+ 此字符串可以放入日志,因此它不应包含敏感信息。
+
+ - **detachError.time** (Time)
+ 遇到错误的时间。
+
+
+ **time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
+ 为 time 包提供的许多工厂方法提供了包装类。**
+
+## VolumeAttachmentList {#VolumeAttachmentList}
+
+VolumeAttachmentList 是 VolumeAttachment 对象的集合。
+
+
+
+- **apiVersion**: storage.k8s.io/v1
+- **kind**: VolumeAttachmentList
+
+
+- **metadata** (}}">ListMeta)
+ 标准的列表元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **items** ([]}}">VolumeAttachment),必需
+ items 是 VolumeAttachment 的列表。
+
+
+## 操作 {#Operations}
+
+
+### `get` 读取指定的 VolumeAttachment
+#### HTTP 请求
+
+GET /apis/storage.k8s.io/v1/volumeattachments/{name}
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+ VolumeAttachment 的名称
+
+- **pretty** (**查询参数**): string
+ }}">pretty
+
+
+#### 响应
+200 (}}">VolumeAttachment): OK
+
+401: Unauthorized
+
+
+### `get` 读取指定的 VolumeAttachment 的状态
+#### HTTP 请求
+GET /apis/storage.k8s.io/v1/volumeattachments/{name}/status
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+ VolumeAttachment 的名称
+
+- **pretty** (**查询参数**): string
+ }}">pretty
+
+
+#### 响应
+200 (}}">VolumeAttachment): OK
+
+401: Unauthorized
+
+
+### `list` 列出或观测类别为 VolumeAttachment 的对象
+#### HTTP 请求
+GET /apis/storage.k8s.io/v1/volumeattachments
+
+
+#### 参数
+- **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 (}}">VolumeAttachmentList): OK
+
+401: Unauthorized
+
+
+### `create` 创建 VolumeAttachment
+#### HTTP 请求
+POST /apis/storage.k8s.io/v1/volumeattachments
+
+
+#### 参数
+- **body**: }}">VolumeAttachment,必需
+- **dryRun** (**查询参数**): string
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+ }}">pretty
+
+
+#### 响应
+200 (}}">VolumeAttachment): OK
+
+201 (}}">VolumeAttachment): Created
+
+202 (}}">VolumeAttachment): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换指定的 VolumeAttachment
+#### HTTP 请求
+PUT /apis/storage.k8s.io/v1/volumeattachments/{name}
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+ VolumeAttachment 的名称
+
+- **body**: }}">VolumeAttachment,必需
+- **dryRun** (**查询参数**): string
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+ }}">pretty
+
+
+#### 响应
+200 (}}">VolumeAttachment): OK
+
+201 (}}">VolumeAttachment): Created
+
+401: Unauthorized
+
+
+### `update` 替换指定的 VolumeAttachment 的状态
+#### HTTP 请求
+PUT /apis/storage.k8s.io/v1/volumeattachments/{name}/status
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+ VolumeAttachment 的名称
+
+- **body**: }}">VolumeAttachment,必需
+- **dryRun** (**查询参数**): string
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+ }}">pretty
+
+
+#### 响应
+200 (}}">VolumeAttachment): OK
+
+201 (}}">VolumeAttachment): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定的 VolumeAttachment
+#### HTTP 请求
+PATCH /apis/storage.k8s.io/v1/volumeattachments/{name}
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+ VolumeAttachment 的名称
+
+- **body**: }}">Patch,必需
+- **dryRun** (**查询参数**): string
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+ }}">force
+
+- **pretty** (**查询参数**): string
+ }}">pretty
+
+
+#### 响应
+200 (}}">VolumeAttachment): OK
+
+201 (}}">VolumeAttachment): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定的 VolumeAttachment 的状态
+#### HTTP 请求
+PATCH /apis/storage.k8s.io/v1/volumeattachments/{name}/status
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+ VolumeAttachment 的名称
+
+- **body**: }}">Patch,必需
+- **dryRun** (**查询参数**): string
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+ }}">force
+
+- **pretty** (**查询参数**): string
+ }}">pretty
+
+
+#### 响应
+200 (}}">VolumeAttachment): OK
+
+201 (}}">VolumeAttachment): Created
+
+401: Unauthorized
+
+
+### `delete` 删除 VolumeAttachment
+#### HTTP 请求
+DELETE /apis/storage.k8s.io/v1/volumeattachments/{name}
+
+
+#### 参数
+- **name** (**路径参数**): string,必需
+ VolumeAttachment 的名称
+
+- **body**: }}">DeleteOptions
+- **dryRun** (**查询参数**): string
+ }}">dryRun
+
+- **gracePeriodSeconds** (**查询参数**): integer
+ }}">gracePeriodSeconds
+
+- **pretty** (**查询参数**): string
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+ }}">propagationPolicy
+
+
+#### 响应
+200 (}}">VolumeAttachment): OK
+
+202 (}}">VolumeAttachment): Accepted
+
+401: Unauthorized
+
+
+### `deletecollection` 删除 VolumeAttachment 的集合
+#### HTTP 请求
+DELETE /apis/storage.k8s.io/v1/volumeattachments
+
+
+#### 参数
+- **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-cn/docs/reference/kubernetes-api/config-and-storage-resources/volume.md b/content/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/volume.md
new file mode 100755
index 0000000000..5b5f3eb352
--- /dev/null
+++ b/content/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/volume.md
@@ -0,0 +1,1785 @@
+---
+api_metadata:
+ apiVersion: ""
+ import: "k8s.io/api/core/v1"
+ kind: "Volume"
+content_type: "api_reference"
+description: "Volume 表示 Pod 中一个有名字的卷,可以由 Pod 中的任意容器进行访问。"
+title: "Volume"
+weight: 3
+---
+
+
+`import "k8s.io/api/core/v1"`
+
+## Volume {#Volume}
+
+Volume 表示 Pod 中一个有名字的卷,可以由 Pod 中的任意容器进行访问。
+
+
+
+
+- **name** (string),必需
+
+ 卷的名称。必须是 DNS_LABEL 且在 Pod 内是唯一的。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names
+
+
+### 暴露的持久卷 {#exposed-persistent-volumes}
+- **persistentVolumeClaim** (PersistentVolumeClaimVolumeSource)
+
+ persistentVolumeClaimVolumeSource 表示对同一名字空间中 PersistentVolumeClaim 的引用。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+
+
+ **PersistentVolumeClaimVolumeSource 引用同一名字空间中用户的 PVC。
+ 此卷找到绑定的 PV 并为 Pod 挂载这个 PV 卷。
+ PersistentVolumeClaimVolumeSource 本质上是其他人(或系统)拥有的另一类卷的包装类。**
+
+
+ - **persistentVolumeClaim.claimName** (string),必需
+
+ claimName 是与使用此卷的 Pod 位于同一名字空间中的 PersistentVolumeClaim 的名称。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+
+ - **persistentVolumeClaim.readOnly** (boolean)
+
+ readOnly 将在卷挂载中强制设置 readOnly 属性。默认为 false。
+
+
+### 投射 {#projections}
+- **configMap** (ConfigMapVolumeSource)
+
+ configMap 表示应填充此卷的 configMap。
+
+
+ **将 ConfigMap 适配到一个卷中。目标 ConfigMap 的 data 字段的内容将以文件的形式呈现在一个卷中,
+ 使用 data 字段中的键名作为文件名,除非 items 元素中已经填充了由键名到路径的特定映射。
+ ConfigMap 卷支持所有权管理和 SELinux 重新打标签。**
+
+
+ - **configMap.name** (string)
+
+ 被引用资源的名称。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names
+
+ - **configMap.optional** (boolean)
+
+ optional 指定是否所引用的 ConfigMap 或其键必须已经被定义。
+
+ - **configMap.defaultMode** (int32)
+
+ defaultMode 是可选的:默认情况下,模式位用于为已创建的文件设置权限。
+ 必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
+ YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。此字段默认为 0644。
+ 路径内的目录不受此设置的影响。这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
+
+ - **configMap.items** ([]}}">KeyToPath)
+
+ 如果未指定 items,则所引用的 ConfigMap 的 data 字段中的每个键值对将作为一个文件被投射到卷中,
+ 这个文件的名称是键名,而文件的内容是键的取值。
+ 如果指定 items,则所列出的键将被投射到指定的路径中,且不会显示未列出的键。
+ 如果指定的键不在 ConfigMap 中,则卷设置将出错,除非对应的键被标记为可选。
+ 路径必须是相对路径,不能包含 “..” 路径,也不能以 “..” 开头。
+
+- **secret** (SecretVolumeSource)
+
+ secret 表示用来填充此卷的 Secret。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#secret
+
+
+ **将 Secret 适配到一个卷中。
+ 目标 Secret 的 data 字段的内容将以文件的形式呈现在一个卷中,使用 data 字段中的键名作为文件名。
+ Secret 卷支持所有权管理和 SELinux 重新打标签。**
+
+
+ - **secret.secretName** (string)
+
+ secretName 是要使用的、位于 Pod 的名字空间中的 Secret 名称。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#secret
+
+ - **secret.optional** (boolean)
+
+ optional 字段指定是否 Secret 或其键必须已经定义。
+
+
+ - **secret.defaultMode** (int32)
+
+ defaultMode 是可选的:默认情况下,模式位用于为已创建的文件设置权限。
+ 必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
+ YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。此字段默认为 0644。
+ 路径内的目录不受此设置的影响。
+ 这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
+
+ - **secret.items** ([]}}">KeyToPath)
+
+ 如果未指定 items,则所引用的 Secret 的 data 字段中的每个键值对将作为一个文件被投射到卷中,
+ 这个文件的名称是键名,而文件的内容是键的取值。
+ 如果指定 items,则所列出的键将被投射到指定的路径中,且不会显示未列出的键。
+ 如果指定的键不在 Secret 中,则卷设置将出错,除非对应的键被标记为可选。
+ 路径必须是相对路径,不能包含 “..” 路径,也不能以 “..” 开头。
+
+
+- **downwardAPI** (DownwardAPIVolumeSource)
+
+ downwardAPI 表示有关 Pod 的 Downward API,用来填充此卷。
+
+
+ **DownwardAPIVolumeSource 表示包含 Downward API 信息的一个卷。Downward API 卷支持所有权管理和 SELinux 重新打标签。**
+
+
+ - **downwardAPI.defaultMode** (int32)
+
+ 可选:默认情况下,模式位用于已创建的文件。
+ 必须是可选的:默认情况下,模式位用于为已创建的文件设置权限。
+ 必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
+ YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。此字段默认为 0644。
+ 路径内的目录不受此设置的影响。这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
+
+ - **downwardAPI.items** ([]}}">DownwardAPIVolumeFile)
+
+ items 是 Downward API 卷文件的列表。
+
+
+- **projected** (ProjectedVolumeSource)
+
+ 这是供 Secret、ConfigMap 和 Downward API 等所有资源使用的投射项。
+
+
+ **表示一个投射的卷源。**
+
+ - **projected.defaultMode** (int32)
+
+ defaultMode 是默认情况下用于为已创建的文件设置权限的模式位。
+ 必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
+ YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。
+ 路径内的目录不受此设置的影响。
+ 这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
+
+
+ - **projected.sources** ([]VolumeProjection)
+
+ sources 是卷投射的列表。
+
+
+ **这里的投射项目可能与其他受支持的卷类型一起进行投射。**
+
+ - **projected.sources.configMap** (ConfigMapProjection)
+
+ 与要投射的 ConfigMap 数据有关的 ConfigMap 信息。
+
+
+ **将 ConfigMap 适配到一个投射的卷中。
+ 目标 ConfigMap 的 Data 字段的内容将以文件的形式呈现在一个被投射的卷中,
+ 使用 data 字段中的键名作为文件名,除非 items 元素中已经填充了由键名到路径的特定映射。
+ 请注意,这等同于没有默认模式的 ConfigMap 卷源。**
+
+
+ - **projected.sources.configMap.name** (string)
+
+ 被引用资源的名称。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names
+
+ - **projected.sources.configMap.optional** (boolean)
+
+ optional 指定是否所引用的 ConfigMap 或其键必须已经被定义。
+
+
+ - **projected.sources.configMap.items** ([]}}">KeyToPath)
+
+ 如果未指定 items,则所引用的 ConfigMap 的 data 字段中的每个键值对将作为一个文件被投射到卷中,
+ 这个文件的名称是键名,而文件的内容是键的取值。
+ 如果指定 items,则所列出的键将被投射到指定的路径中,且不会显示未列出的键。
+ 如果指定的键不在 ConfigMap 中,则卷设置将出错,除非对应的键被标记为可选。
+ 路径必须是相对路径,不能包含 “..” 路径,也不能以 “..” 开头。
+
+
+ - **projected.sources.downwardAPI** (DownwardAPIProjection)
+
+ 与要投射的 downward API 数据有关的 downward API 信息。
+
+
+ **表示投射到投射卷的 Downward API 信息。请注意,这等同于没有默认模式的 downwardAPI 卷源。**
+
+ - **projected.sources.downwardAPI.items** ([]}}">DownwardAPIVolumeFile)
+
+ items 是 DownwardAPIVolume 文件的列表。
+
+
+ - **projected.sources.secret** (SecretProjection)
+
+ 与要投射的 Secret 数据有关的 Secret 信息。
+
+
+ **将 Secret 适配到一个投射卷中。
+ 目标 Secret 的 data 字段的内容将以文件的形式呈现在一个投射卷中,使用 data 字段中的键名作为文件名。
+ 请注意,这等同于没有默认模式的 Secret 卷源。**
+
+ - **projected.sources.secret.name** (string)
+
+ 被引用资源的名称。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names
+
+
+ - **projected.sources.secret.optional** (boolean)
+
+ optional 字段指定是否 Secret 或其键必须已经定义。
+
+ - **projected.sources.secret.items** ([]}}">KeyToPath)
+
+ 如果未指定 items,则所引用的 Secret 的 data 字段中的每个键值对将作为一个文件被投射到卷中,
+ 这个文件的名称是键名,而文件的内容是键的取值。
+ 如果指定 items,则所列出的键将被投射到指定的路径中,且不会显示未列出的键。
+ 如果指定的键不在 Secret 中,则卷设置将出错,除非对应的键被标记为可选。
+ 路径必须是相对路径,不能包含 “..” 路径,也不能以 “..” 开头。
+
+ - **projected.sources.serviceAccountToken** (ServiceAccountTokenProjection)
+
+ serviceAccountToken 是与要投射的服务账号令牌数据有关的信息。
+
+
+ **ServiceAccountTokenProjection 表示一个投射的服务账号令牌卷。
+ 这种投射可用于将服务账号令牌插入到 Pod 运行时文件系统,供访问 API(Kubernetes API Server 或其他)使用。**
+
+ - **projected.sources.serviceAccountToken.path** (string),必需
+
+ path 是相对于令牌投射目标文件的挂载点的路径。
+
+
+ - **projected.sources.serviceAccountToken.audience** (string)
+
+ audience 是令牌的目标受众。
+ 令牌的接收方必须用令牌受众中指定的一个标识符来标识自己,否则应拒绝此令牌。
+ 受众默认为 apiserver 的标识符。
+
+ - **projected.sources.serviceAccountToken.expirationSeconds** (int64)
+
+ expirationSeconds 是所请求的服务账号令牌的有效期。
+ 当令牌即将到期时,kubelet 卷插件将主动轮换服务账号令牌。
+ 如果令牌超过其生存时间的 80% 或令牌超过 24 小时,kubelet 将开始尝试轮换令牌。
+ 默认为 1 小时且必须至少为 10 分钟。
+
+
+### 本地/临时目录 {#local-temporary-directory}
+- **emptyDir** (EmptyDirVolumeSource)
+
+ emptyDir 表示与 Pod 生命周期相同的临时目录。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#emptydir
+
+
+ **表示供 Pod 使用的一个空目录。空目录卷支持所有权管理和 SELinux 重新打标签。**
+
+ - **emptyDir.medium** (string)
+
+ medium 表示此目录应使用哪种类别的存储介质。默认为 "",这意味着使用节点的默认介质。
+ 必须是空字符串(默认值)或 Memory。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#emptydir
+
+
+ - **emptyDir.sizeLimit** (}}">Quantity)
+
+ sizeLimit 是这个 EmptyDir 卷所需的本地存储总量。这个大小限制也适用于内存介质。
+ EmptyDir 的内存介质最大使用量将是此处指定的 sizeLimit 与 Pod 中所有容器内存限制总和这两个值之间的最小值。
+ 默认为 nil,这意味着限制未被定义。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#emptydir
+
+
+- **hostPath** (HostPathVolumeSource)
+
+ hostPath 表示主机上预先存在的文件或目录,它们将被直接暴露给容器。
+ 这种卷通常用于系统代理或允许查看主机的其他特权操作。大多数容器**不需要**这种卷。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#hostpath
+
+
+ **表示映射到 Pod 中的主机路径。主机路径卷不支持所有权管理或 SELinux 重新打标签。**
+
+
+ - **hostPath.path** (string),必需
+
+ 目录在主机上的路径。如果该路径是一个符号链接,则它将沿着链接指向真实路径。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#hostpath
+
+ - **hostPath.type** (string)
+
+ HostPath 卷的类型。默认为 ""。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#hostpath
+
+
+### 持久卷 {#persistent-volumes}
+- **awsElasticBlockStore** (AWSElasticBlockStoreVolumeSource)
+
+ awsElasticBlockStore 表示挂接到 kubelet 的主机随后暴露给 Pod 的一个 AWS Disk 资源。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#awselasticblockstore
+
+
+ **表示 AWS 上的 Persistent Disk 资源。挂载到一个容器之前 AWS EBS 磁盘必须存在。
+ 该磁盘还必须与 kubelet 位于相同的 AWS 区域中。AWS EBS 磁盘只能以读/写一次进行挂载。
+ AWS EBS 卷支持所有权管理和 SELinux 重新打标签。**
+
+
+ - **awsElasticBlockStore.volumeID** (string),必需
+
+ volumeID 是 AWS(Amazon EBS 卷)中持久磁盘资源的唯一 ID。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#awselasticblockstore
+
+ - **awsElasticBlockStore.fsType** (string)
+
+ fsType 是你要挂载的卷的文件系统类型。提示:确保主机操作系统支持此文件系统类型。
+ 例如:“ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#awselasticblockstore
+
+
+ - **awsElasticBlockStore.partition** (int32)
+
+ partition 是你要挂载的卷中的分区。如果省略,则默认为按卷名称进行挂载。例如:对于卷 /dev/sda1,
+ 将分区指定为 “1”。类似地,/dev/sda 的卷分区为 “0”(或可以将属性留空)。
+
+ - **awsElasticBlockStore.readOnly** (boolean)
+
+ readOnly 值为 true 将使得卷挂载被强制设置为 readOnly。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#awselasticblockstore
+
+
+- **azureDisk** (AzureDiskVolumeSource)
+
+ azureDisk 表示挂载到主机上并绑定挂载到 Pod 上的 Azure 数据盘。
+
+
+ **azureDisk 表示挂载到主机上并绑定挂载到 Pod 上的 Azure 数据盘。**
+
+
+ - **azureDisk.diskName** (string),必需
+
+ diskName 是 Blob 存储中数据盘的名称。
+
+ - **azureDisk.diskURI** (string),必需
+
+ diskURI 是 Blob 存储中数据盘的 URI。
+
+ - **azureDisk.cachingMode** (string)
+
+ cachingMode 是主机缓存(Host Caching)模式:None、Read Only、Read Write。
+
+
+ - **azureDisk.fsType** (string)
+
+ fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
+ 例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
+
+ - **azureDisk.kind** (string)
+
+ kind 预期值包括:
+
+ - Shared:每个存储帐户多个 Blob 磁盘;
+ - Dedicated:每个存储帐户单个 Blob 磁盘;
+ - Managed:azure 托管的数据盘(仅托管的可用性集合中)。
+
+ 默认为 Shared。
+
+ - **azureDisk.readOnly** (boolean)
+
+ readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
+
+
+- **azureFile** (AzureFileVolumeSource)
+
+ azureDisk 表示挂载到主机上并绑定挂载到 Pod 上的 Azure File Service。
+
+
+ **azureFile 表示挂载到主机上并绑定挂载到 Pod 上的 Azure File Service。**
+
+
+ - **azureFile.secretName** (string),必需
+
+ secretName 是包含 Azure 存储账号名称和主键的 Secret 的名称。
+
+ - **azureFile.shareName** (string),必需
+
+ shareName 是 Azure 共享名称。
+
+ - **azureFile.readOnly** (boolean)
+
+ readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
+
+
+- **cephfs** (CephFSVolumeSource)
+
+ cephfs 表示在主机上挂载的 Ceph FS,该文件系统挂载与 Pod 的生命周期相同。
+
+
+ **表示在 Pod 的生命周期内持续的 Ceph Filesystem 挂载。cephfs 卷不支持所有权管理或 SELinux 重新打标签。**
+
+ - **cephfs.monitors** ([]string),必需
+
+ monitors 是必需的。monitors 是 Ceph 监测的集合。更多信息:
+ https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+
+
+ - **cephfs.path** (string)
+
+ path 是可选的。用作挂载的根,而不是挂载完整的 Ceph 树,默认为 “/”。
+
+ - **cephfs.readOnly** (boolean)
+
+ readOnly 是可选的。默认为 false(读/写)。
+ 此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。更多信息:
+ https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+
+
+ - **cephfs.secretFile** (string)
+
+ secretFile 是可选的。secretFile 是 User 对应的密钥环的路径,默认为 /etc/ceph/user.secret。更多信息:
+ https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+
+ - **cephfs.secretRef** (}}">LocalObjectReference)
+
+ secretRef 是可选的。secretRef 是针对用户的身份认证 Secret 的引用,默认为空。更多信息:
+ https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+
+ - **cephfs.user** (string)
+
+ user 是可选的。user 是 rados 用户名,默认为 admin。更多信息:
+ https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+
+
+- **cinder** (CinderVolumeSource)
+
+ cinder 表示 kubelet 主机上挂接和挂载的 Cinder 卷。更多信息:
+ https://examples.k8s.io/mysql-cinder-pd/README.md
+
+
+ **表示 Openstack 中的一个 Cinder 卷资源。挂载到一个容器之前 Cinder 卷必须已经存在。
+ 该卷还必须与 kubelet 位于相同的地区中。cinder 卷支持所有权管理和 SELinux 重新打标签。**
+
+ - **cinder.volumeID** (string),必需
+
+ volumeID 用于标识 Cinder 中的卷。更多信息:
+ https://examples.k8s.io/mysql-cinder-pd/README.md
+
+
+ - **cinder.fsType** (string)
+
+ fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。例如:“ext4”、“xfs”、“ntfs”。
+ 如果未指定,则隐式推断为“ext4”。更多信息:
+ https://examples.k8s.io/mysql-cinder-pd/README.md
+
+ - **cinder.readOnly** (boolean)
+
+ readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
+ 更多信息: https://examples.k8s.io/mysql-cinder-pd/README.md
+
+ - **cinder.secretRef** (}}">LocalObjectReference)
+
+ secretRef 是可选的。指向 Secret 对象,内含的参数用于连接到 OpenStack。
+
+
+- **csi** (CSIVolumeSource)
+
+ csi 表示由某个外部容器存储接口(Container Storage Interface,CSI)驱动处理的临时存储(Beta 特性)。
+
+
+ **表示要挂载的卷的源位置,由外部 CSI 驱动进行管理。**
+
+ - **csi.driver** (string),必需
+
+ driver 是处理此卷的 CSI 驱动的名称。咨询你的管理员以获取在集群中注册的正确名称。
+
+ - **csi.fsType** (string)
+
+ 要挂载的 fsType。例如 “ext4”、“xfs”、“ntfs”。
+ 如果未提供,则将空值传递给关联的 CSI 驱动,以便决定要应用的默认文件系统。
+
+
+ - **csi.nodePublishSecretRef** (}}">LocalObjectReference)
+
+ nodePublishSecretRef 是对包含敏感信息的 Secret 对象的引用,
+ 该 Secret 对象将被传递到 CSI 驱动以完成 CSI NodePublishVolume 和 NodeUnpublishVolume 调用。
+ 此字段是可选的,如果不需要 Secret,则此字段可以为空。
+ 如果 Secret 对象包含多个 Secret,则所有 Secret 引用将被传递。
+
+ - **csi.readOnly** (boolean)
+
+ readOnly 指定供卷使用的只读配置。默认为 false(读/写)。
+
+ - **csi.volumeAttributes** (map[string]string)
+
+ volumeAttributes 存储传递给 CSI 驱动且特定于驱动的属性。查阅你的驱动文档,了解支持的值。
+
+
+- **fc** (FCVolumeSource)
+
+ fc 表示挂接到 kubelet 的主机随后暴露给 Pod 的一个 Fibre Channel 资源。
+
+
+ **表示 Fibre Channel 卷。Fibre Channel 卷只能以读/写一次进行挂载。
+ Fibre Channel 卷支持所有权管理和 SELinux 重新打标签。**
+
+
+ - **fc.fsType** (string)
+
+ fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
+ 例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
+
+ - **fc.lun** (int32)
+
+ lun 是可选的:FC 目标 lun 编号。
+
+
+ - **fc.readOnly** (boolean)
+
+ readOnly 是可选的。默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
+
+ - **fc.targetWWNs** ([]string)
+
+ targetWWNs 是可选的。FC 目标全球名称(WWN)。
+
+ - **fc.wwids** ([]string)
+
+ wwids 是可选的。FC 卷全球识别号(wwids)。
+ 必须设置 wwids 或 targetWWNs 及 lun 的组合,但不能同时设置两者。
+
+
+- **flexVolume** (FlexVolumeSource)
+
+ flexVolume 表示使用基于 exec 的插件制备/挂接的通用卷资源。
+
+
+ **flexVolume 表示使用基于 exec 的插件制备/挂接的通用卷资源。**
+
+ - **flexVolume.driver** (string),必需
+
+ driver 是供此卷使用的驱动的名称。
+
+ - **flexVolume.fsType** (string)
+
+ fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。例如 “ext4”、“xfs”、“ntfs”。
+ 默认的文件系统取决于 flexVolume 脚本。
+
+
+ - **flexVolume.options** (map[string]string)
+
+ options 是可选的。此字段包含额外的命令选项(如果有)。
+
+ - **flexVolume.readOnly** (boolean)
+
+ readOnly 是可选的。默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
+
+ - **flexVolume.secretRef** (}}">LocalObjectReference)
+
+ secretRef 是可选的。secretRef 是对包含敏感信息的 Secret 对象的引用,该 Secret 会被传递到插件脚本。
+ 如果未指定 Secret 对象,则此字段可以为空。如果 Secret 对象包含多个 Secret,则所有 Secret 被传递到插件脚本。
+
+
+- **flocker** (FlockerVolumeSource)
+
+ flocker 表示挂接到一个 kubelet 主机的 Flocker 卷。Flocker 卷依赖于正在运行的 Flocker 控制服务。
+
+
+ **表示 Flocker 代理挂载的 Flocker 卷。应设置一个且仅设置 datasetName 和 datasetUUID 中的一个。
+ Flocker 卷不支持所有权管理或 SELinux 重新打标签。**
+
+ - **flocker.datasetName** (string)
+
+ datasetName 是存储为元数据的数据集的名称。Flocker 数据集的名称应视为已弃用。
+
+ - **flocker.datasetUUID** (string)
+
+ datasetUUID 是数据集的 UUID。这是 Flocker 数据集的唯一标识符。
+
+
+- **gcePersistentDisk** (GCEPersistentDiskVolumeSource)
+
+ gcePersistentDisk 表示挂接到 kubelet 的主机随后暴露给 Pod 的一个 GCE Disk 资源。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#gcepersistentdisk
+
+
+ **表示 Google Compute Engine 中的 Persistent Disk 资源。
+ 挂载到一个容器之前 GCE PD 必须已经存在。该磁盘还必须与 kubelet 位于相同的 GCE 项目和区域中。
+ GCE PD 只能挂载为读/写一次或只读多次。GCE PD 支持所有权管理和 SELinux 重新打标签。**
+
+
+ - **gcePersistentDisk.pdName** (string),必需
+
+ pdName 是 GCE 中 PD 资源的唯一名称。用于标识 GCE 中的磁盘。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#gcepersistentdisk
+
+ - **gcePersistentDisk.fsType** (string)
+
+ fsType 是你要挂载的卷的文件系统类型。提示:确保主机操作系统支持此文件系统类型。
+ 例如:“ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为“ext4”。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#gcepersistentdisk
+
+
+ - **gcePersistentDisk.partition** (int32)
+
+ partition 是你要挂载的卷中的分区。如果省略,则默认为按卷名称进行挂载。
+ 例如:对于卷 /dev/sda1,将分区指定为 “1”。类似地,/dev/sda 的卷分区为 “0”(或可以将属性留空)。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#gcepersistentdisk
+
+ - **gcePersistentDisk.readOnly** (boolean)
+
+ 此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。默认为 false。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#gcepersistentdisk
+
+
+- **glusterfs** (GlusterfsVolumeSource)
+
+ glusterfs 表示在与 Pod 共享生命周期的主机上挂载的 Glusterfs。更多信息:
+ https://examples.k8s.io/volumes/glusterfs/README.md
+
+
+ **表示在 Pod 的生命周期内持续的 Glusterfs 挂载。glusterfs 卷不支持所有权管理或 SELinux 重新打标签。**
+
+
+ - **glusterfs.endpoints** (string),必需
+
+ endpoints 是详细说明 Glusterfs 拓扑的端点名称。更多信息:
+ https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+
+ - **glusterfs.path** (string),必需
+
+ path 是 Glusterfs 卷路径。更多信息:
+ https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+
+ - **glusterfs.readOnly** (boolean)
+
+ 此处 readOnly 将强制使用只读权限挂载 Glusterfs 卷。默认为 false。更多信息:
+ https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+
+
+- **iscsi** (ISCSIVolumeSource)
+
+ iscsi 表示挂接到 kubelet 的主机随后暴露给 Pod 的一个 ISCSI Disk 资源。更多信息:
+ https://examples.k8s.io/volumes/iscsi/README.md
+
+
+ **表示一个 ISCSI 磁盘。ISCSI 卷只能以读/写一次进行挂载。ISCSI 卷支持所有权管理和 SELinux 重新打标签。**
+
+
+ - **iscsi.iqn** (string),必需
+
+ iqn 是目标 iSCSI 限定名称。
+
+ - **iscsi.lun** (int32),必需
+
+ lun 表示 iSCSI 目标逻辑单元号。
+
+ - **iscsi.targetPortal** (string),必需
+
+ targetPortal 是 iSCSI 目标门户。
+ 如果不是默认端口(通常是 TCP 端口 860 和 3260),则 Portal 为 IP 或 ip_addr:port。
+
+
+ - **iscsi.chapAuthDiscovery** (boolean)
+
+ chapAuthDiscovery 定义是否支持 iSCSI Discovery CHAP 身份认证。
+
+ - **iscsi.chapAuthSession** (boolean)
+
+ chapAuthSession 定义是否支持 iSCSI Session CHAP 身份认证。
+
+
+ - **iscsi.fsType** (string)
+
+ fsType 是你要挂载的卷的文件系统类型。提示:确保主机操作系统支持此文件系统类型。
+ 例如:“ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#iscsi
+
+ - **iscsi.initiatorName** (string)
+
+ initiatorName 是自定义的 iSCSI 发起程序名称(iSCSI Initiator Name)。
+ 如果同时用 iscsiInterface 指定 initiatorName,将为连接创建新的 iSCSI 接口 \<目标门户>:\<卷名称>。
+
+
+ - **iscsi.iscsiInterface** (string)
+
+ iscsiInterface 是使用 iSCSI 传输的接口名称。默认为 “default”(tcp)。
+
+ - **iscsi.portals** ([]string)
+
+ portals 是 iSCSI 目标门户列表(iSCSI Target Portal List)。
+ 如果不是默认端口(通常是 TCP 端口 860 和 3260),则 Portal 为 IP 或 ip_addr:port。
+
+
+ - **iscsi.readOnly** (boolean)
+
+ 此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。默认为 false。
+
+ - **iscsi.secretRef** (}}">LocalObjectReference)
+
+ secretRef 是 iSCSI 目标和发起程序身份认证所用的 CHAP Secret。
+
+
+- **nfs** (NFSVolumeSource)
+
+ nfs 表示在主机上挂载的 NFS,其生命周期与 Pod 相同。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#nfs
+
+
+ **表示 Pod 的生命周期内一直存在的 NFS 挂载。NFS 卷不支持所有权管理或 SELinux 重新打标签。**
+
+ - **nfs.path** (string),必需
+
+ path 是由 NFS 服务器导出的路径。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#nfs
+
+
+ - **nfs.server** (string),必需
+
+ server 是 NFS 服务器的主机名或 IP 地址。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#nfs
+
+ - **nfs.readOnly** (boolean)
+
+ 此处 readOnly 将强制使用只读权限挂载 NFS 导出。默认为 false。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#nfs
+
+
+- **photonPersistentDisk** (PhotonPersistentDiskVolumeSource)
+
+ photonPersistentDisk 表示 kubelet 主机上挂接和挂载的 PhotonController 持久磁盘。
+
+
+ **表示 Photon Controller 持久磁盘资源。**
+
+ - **photonPersistentDisk.pdID** (string),必需
+
+ pdID 是标识 Photon Controller 持久磁盘的 ID。
+
+ - **photonPersistentDisk.fsType** (string)
+
+ fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
+ 例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
+
+
+- **portworxVolume** (PortworxVolumeSource)
+
+ portworxVolume 表示 kubelet 主机上挂接和挂载的 portworx 卷。
+
+
+ **PortworxVolumeSource 表示 Portworx 卷资源。**
+
+ - **portworxVolume.volumeID** (string),必需
+
+ volumeID 唯一标识 Portworx 卷。
+
+
+ - **portworxVolume.fsType** (string)
+
+ fSType 表示要挂载的文件系统类型。必须是主机操作系统支持的文件系统类型。例如 “ext4”、“xfs”。
+ 如果未指定,则隐式推断为 “ext4”。
+
+ - **portworxVolume.readOnly** (boolean)
+
+ readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
+
+
+- **quobyte** (QuobyteVolumeSource)
+
+ quobyte 表示在共享 Pod 生命周期的主机上挂载的 Quobyte。
+
+
+ **表示在 Pod 的生命周期内持续的 Quobyte 挂载。Quobyte 卷不支持所有权管理或 SELinux 重新打标签。**
+
+
+ - **quobyte.registry** (string),必需
+
+ registry 表示将一个或多个 Quobyte Registry 服务指定为 host:port 对的字符串形式
+ (多个条目用英文逗号分隔),用作卷的中央注册表。
+
+ - **quobyte.volume** (string),必需
+
+ volume 是按名称引用已创建的 Quobyte 卷的字符串。
+
+ - **quobyte.group** (string)
+
+ group 是将卷访问映射到的组。默认为无组。
+
+
+ - **quobyte.readOnly** (boolean)
+
+ 此处 readOnly 将强制使用只读权限挂载 Quobyte 卷。默认为 false。
+
+ - **quobyte.tenant** (string)
+
+ tenant 拥有 Backend Used 中给定的 Quobyte 卷,随动态制备的 Quobyte 卷一起使用,值由插件设置。
+
+ - **quobyte.user** (string)
+
+ user 是将卷访问映射到的用户。默认为 serivceaccount 用户。
+
+
+- **rbd** (RBDVolumeSource)
+
+ rbd 表示在共享 Pod 生命周期的主机上挂载的 Rados Block Device。更多信息:
+ https://examples.k8s.io/volumes/rbd/README.md
+
+
+ **表示在 Pod 的生命周期内持续的 Rados Block Device 挂载。RBD 卷支持所有权管理和 SELinux 重新打标签。**
+
+ - **rbd.image** (string),必需
+
+ image 是 rados 镜像名称。更多信息:
+ https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+
+
+ - **rbd.monitors** ([]string),必需
+
+ monitors 是 Ceph 监测的集合。更多信息:
+ https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+
+ - **rbd.fsType** (string)
+
+ fsType 是你要挂载的卷的文件系统类型。提示:确保主机操作系统支持此文件系统类型。
+ 例如:“ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#rbd
+
+
+ - **rbd.keyring** (string)
+
+ keyring 是 RBDUser 密钥环的路径。默认为 /etc/ceph/keyring。更多信息:
+ https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+
+ - **rbd.pool** (string)
+
+ pool 是 rados 池名称。默认为 rbd。更多信息:
+ https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+
+ - **rbd.readOnly** (boolean)
+
+ 此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。默认为 false。更多信息:
+ https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+
+
+ - **rbd.secretRef** (}}">LocalObjectReference)
+
+ secretRef 是 RBDUser 的身份认证 Secret 的名称。如果提供,则重载 keyring。默认为 nil。更多信息:
+ https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+
+ - **rbd.user** (string)
+
+ user 是 rados 用户名。默认为 admin。更多信息:
+ https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+
+
+- **scaleIO** (ScaleIOVolumeSource)
+
+ scaleIO 表示 Kubernetes 节点上挂接和挂载的 ScaleIO 持久卷。
+
+
+ **ScaleIOVolumeSource 表示一个 ScaleIO 持久卷。**
+
+ - **scaleIO.gateway** (string),必需
+
+ gateway 是 ScaleIO API 网关的主机地址。
+
+
+ - **scaleIO.secretRef** (}}">LocalObjectReference),必需
+
+ secretRef 引用到 ScaleIO 用户的 Secret 和其他敏感信息。如果未提供此项,则 Login 操作将失败。
+
+ - **scaleIO.system** (string),必需
+
+ system 是存储系统的名称,与 ScaleIO 中的配置相同。
+
+ - **scaleIO.fsType** (string)
+
+ fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。例如 “ext4”、“xfs”、“ntfs”。默认为 “xfs”。
+
+
+ - **scaleIO.protectionDomain** (string)
+
+ protectionDomain 是 ScaleIO 保护域(ScaleIO Protection Domain)的名称,用于已配置的存储。
+
+ - **scaleIO.readOnly** (boolean)
+
+ readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
+
+ - **scaleIO.sslEnabled** (boolean)
+
+ sslEnabled 标志启用/禁用与网关的 SSL 通信,默认为 false。
+
+
+ - **scaleIO.storageMode** (string)
+
+ storageMode 指示卷所用的存储应是 ThickProvisioned 或 ThinProvisioned。默认为 ThinProvisioned。
+
+ - **scaleIO.storagePool** (string)
+
+ storagePool 是与保护域关联的 ScaleIO Storage Pool。
+
+ - **scaleIO.volumeName** (string)
+
+ volumeName 是在与此卷源关联的 ScaleIO 系统中已创建的卷的名称。
+
+
+- **storageos** (StorageOSVolumeSource)
+
+ storageOS 表示 Kubernetes 节点上挂接和挂载的 StorageOS 卷。
+
+
+ **表示 StorageOS 持久卷资源。**
+
+ - **storageos.fsType** (string)
+
+ fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
+ 例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
+
+
+ - **storageos.readOnly** (boolean)
+
+ readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
+
+ - **storageos.secretRef** (}}">LocalObjectReference)
+
+ secretRef 指定用于获取 StorageOS API 凭据的 Secret。如果未指定,则将尝试使用默认值。
+
+
+ - **storageos.volumeName** (string)
+
+ volumeName 是 StorageOS 卷的人类可读名称。这些卷名称在一个名字空间内是唯一的。
+
+ - **storageos.volumeNamespace** (string)
+
+ volumeNamespace 指定 StorageOS 内卷的作用域。如果未指定名字空间,则将使用 Pod 的名字空间。
+ 这个设置使得 Kubernetes 的名字作用域可以在 StorageOS 内进行映射,实现更紧密的集成。
+ 将 volumeName 设为任何名称以重载默认的行为。如果你未在 StorageOS 内使用名字空间,则设为“default”。
+ 将创建 StorageOS 内预先不存在的名字空间。
+
+
+- **vsphereVolume** (VsphereVirtualDiskVolumeSource)
+
+ vsphereVolume 表示 kubelet 主机上挂接和挂载的 vSphere 卷。
+
+
+ **表示 vSphere 卷资源。**
+
+ - **vsphereVolume.volumePath** (string),必需
+
+ volumePath 是标识 vSphere 卷 vmdk 的路径。
+
+
+ - **vsphereVolume.fsType** (string)
+
+ fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
+ 例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
+
+ - **vsphereVolume.storagePolicyID** (string)
+
+ storagePolicyID 是与 StoragePolicyName 关联的基于存储策略的管理(SPBM)配置文件 ID。
+
+ - **vsphereVolume.storagePolicyName** (string)
+
+ storagePolicyName 是基于存储策略的管理(SPBM)配置文件名称。
+
+
+### Alpha 级别 {#alpha-level}
+- **ephemeral** (EphemeralVolumeSource)
+
+ ephemeral 表示由一个集群存储驱动处理的卷。此卷的生命周期与定义其的 Pod 相关联。
+ Pod 启动前创建此卷,Pod 移除时删除此卷。
+
+ 使用此字段的情形包括:
+ a) 仅在 pod 运行时才需要此卷,
+ b) 需要从快照恢复或容量跟踪等正常卷的功能特性,
+ c) 通过存储类指定存储驱动,以及
+ d) 存储驱动支持通过 PersistentVolumeClaim 进行动态卷制备(有关此卷类型和 PersistentVolumeClaim 之间连接的更多信息,请参考 EphemeralVolumeSource)。
+
+
+ 对于持续时间超过单个 Pod 生命周期的卷,使用 PersistentVolumeClaim 或某种特定于供应商的 API。
+
+ 如果打算以这种方式使用 CSI 驱动,则将 CSI 用于轻量级本地临时卷。更多的相关信息,请参考驱动文档。
+
+ 一个 Pod 可以同时使用临时卷和持久卷这两种类别的卷。
+
+
+ **表示由一个正常存储驱动处理的临时卷。**
+
+
+ - **ephemeral.volumeClaimTemplate** (PersistentVolumeClaimTemplate)
+
+ 将用于创建独立的 PVC 以制备卷。
+ 嵌入了 EphemeralVolumeSource 的 Pod 将是 PVC 的所有者,即 PVC 将与 Pod 一起删除。
+ PVC 的名称将是 `
+
+- **path** (string),必需
+
+ 必需。path 是要创建的文件的相对路径名称。不得使用绝对路径,也不得包含 “..” 路径。
+ 必须用 UTF-8 进行编码。相对路径的第一项不得用 “..” 开头。
+
+- **fieldRef** (}}">ObjectFieldSelector)
+
+ 必需。选择 Pod 的字段:仅支持注解、标签、名称和名字空间。
+
+
+- **mode** (int32)
+
+ 可选:模式位用于设置文件的权限,必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
+ YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。
+ 如果未指定,则将使用卷 defaultMode。
+ 这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
+
+- **resourceFieldRef** (}}">ResourceFieldSelector)
+
+ 选择容器的资源:目前仅支持资源限制与请求(limits.cpu、limits.memory、requests.cpu 和 requests.memory)。
+
+## KeyToPath {#KeyToPath}
+
+
+将一个字符串键映射到卷中的一个路径。
+
+
+
+- **key** (string),必需
+
+ key 是要投射的键。
+
+- **path** (string),必需
+
+ path 是将键映射到的文件的相对路径。不能是绝对路径。不能包含路径元素 “..”。不能以字符串 “..” 开头。
+
+
+- **mode** (int32)
+
+ mode 是可选的:模式位用于为文件设置权限。必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
+ YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。
+ 如果未指定,则将使用卷 defaultMode。
+ 这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
diff --git a/content/zh-cn/docs/reference/kubernetes-api/policy-resources/limit-range-v1.md b/content/zh-cn/docs/reference/kubernetes-api/policy-resources/limit-range-v1.md
new file mode 100644
index 0000000000..1ee5af68a3
--- /dev/null
+++ b/content/zh-cn/docs/reference/kubernetes-api/policy-resources/limit-range-v1.md
@@ -0,0 +1,658 @@
+---
+api_metadata:
+ apiVersion: "v1"
+ import: "k8s.io/api/core/v1"
+ kind: "LimitRange"
+content_type: "api_reference"
+description: "LimitRange 设置名字空间中每个资源类别的资源用量限制。"
+title: "LimitRange"
+weight: 1
+---
+
+
+`apiVersion: v1`
+
+`import "k8s.io/api/core/v1"`
+
+## LimitRange {#LimitRange}
+
+LimitRange 设置名字空间中每个资源类别的资源用量限制。
+
+
+
+- **apiVersion**: v1
+
+- **kind**: LimitRange
+
+
+- **metadata** (}}">ObjectMeta)
+
+ 标准的对象元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">LimitRangeSpec)
+
+ spec 定义强制执行的限制。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+
+## LimitRangeSpec {#LimitRangeSpec}
+
+
+LimitRangeSpec 定义与类别匹配的资源的最小/最大使用限制。
+
+
+
+
+- **limits** ([]LimitRangeItem),必需
+
+ limits 是强制执行的 LimitRangeItem 对象的列表。
+
+
+ **LimitRangeItem 定义与类别匹配的任意资源的最小/最大使用限制。**
+
+ - **limits.type** (string),必需
+
+ 此限制应用到的资源的类型。
+
+
+
+ - **limits.default** (map[string]}}">Quantity)
+
+ 资源限制被省略时按资源名称设定的默认资源要求限制值。
+
+ - **limits.defaultRequest** (map[string]}}">Quantity)
+
+ defaultRequest 是资源请求被省略时按资源名称设定的默认资源要求请求值。
+
+ - **limits.max** (map[string]}}">Quantity)
+
+ 按资源名称针对这种类别的最大使用约束。
+
+
+
+ - **limits.maxLimitRequestRatio** (map[string]}}">Quantity)
+
+ 如果指定 maxLimitRequestRatio,则所指定的资源必须设置非零的请求和限制值,
+ 且限制除以请求小于或等于这里列举的值;此属性用来表示所指定资源的最大突发用量。
+
+ - **limits.min** (map[string]}}">Quantity)
+
+ 按资源名称区分的,针对这种类别对象的最小用量约束。
+
+## LimitRangeList {#LimitRangeList}
+
+
+LimitRangeList 是 LimitRange 项的列表。
+
+
+
+- **apiVersion**: v1
+
+- **kind**: LimitRangeList
+
+
+- **metadata** (}}">ListMeta)
+
+ 标准的列表元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+
+- **items** ([]}}">LimitRange),必需
+
+ items 是 LimitRange 对象的列表。更多信息:
+ https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/
+
+
+## 操作 {#Operations}
+
+
+### `get` 读取指定的 LimitRange
+#### HTTP 请求
+GET /api/v1/namespaces/{namespace}/limitranges/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ LimitRange 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">LimitRange): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 LimitRange 类别的对象
+#### HTTP 请求
+GET /api/v1/namespaces/{namespace}/limitranges
+
+
+#### 参数
+
+- **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 (}}">LimitRangeList): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 LimitRange 类别的对象
+#### HTTP 请求
+GET /api/v1/limitranges
+
+
+#### 参数
+
+- **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 (}}">LimitRangeList): OK
+
+401: Unauthorized
+
+
+### `create` 创建 LimitRange
+#### HTTP 请求
+POST /api/v1/namespaces/{namespace}/limitranges
+
+
+#### 参数
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">LimitRange,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">LimitRange): OK
+
+201 (}}">LimitRange): Created
+
+202 (}}">LimitRange): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换指定的 LimitRange
+#### HTTP 请求
+PUT /api/v1/namespaces/{namespace}/limitranges/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ LimitRange 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">LimitRange,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">LimitRange): OK
+
+201 (}}">LimitRange): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定的 LimitRange
+#### HTTP 请求
+PATCH /api/v1/namespaces/{namespace}/limitranges/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ LimitRange 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">Patch,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+200 (}}">LimitRange): OK
+
+201 (}}">LimitRange): Created
+
+401: Unauthorized
+
+
+### `delete` 删除 LimitRange
+#### HTTP 请求
+DELETE /api/v1/namespaces/{namespace}/limitranges/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ LimitRange 的名称
+
+- **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` 删除 LimitRange 的集合
+#### HTTP 请求
+DELETE /api/v1/namespaces/{namespace}/limitranges
+
+
+#### 参数
+
+- **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-cn/docs/reference/kubernetes-api/policy-resources/pod-security-policy-v1beta1.md b/content/zh-cn/docs/reference/kubernetes-api/policy-resources/pod-security-policy-v1beta1.md
new file mode 100644
index 0000000000..5817459bc2
--- /dev/null
+++ b/content/zh-cn/docs/reference/kubernetes-api/policy-resources/pod-security-policy-v1beta1.md
@@ -0,0 +1,1091 @@
+---
+api_metadata:
+ apiVersion: "policy/v1beta1"
+ import: "k8s.io/api/policy/v1beta1"
+ kind: "PodSecurityPolicy"
+content_type: "api_reference"
+description: "PodSecurityPolicy 对影响到安全上下文的请求能力进行治理,而安全上下文可以应用到 Pod 和容器上。"
+title: "PodSecurityPolicy v1beta1"
+weight: 5
+---
+
+
+`apiVersion: policy/v1beta1`
+
+`import "k8s.io/api/policy/v1beta1"`
+
+## PodSecurityPolicy {#PodSecurityPolicy}
+
+
+PodSecurityPolicy 对影响到安全上下文的请求能力进行治理,而安全上下文可以应用到 Pod 和容器上。
+在 1.21 中已被弃用。
+
+
+
+- **apiVersion**: policy/v1beta1
+
+- **kind**: PodSecurityPolicy
+
+
+- **metadata** (}}">ObjectMeta)
+
+ 标准的对象元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">PodSecurityPolicySpec)
+
+ spec 定义强制执行的策略。
+
+## PodSecurityPolicySpec {#PodSecurityPolicySpec}
+
+
+PodSecurityPolicySpec 定义强制执行的策略。
+
+
+
+
+- **runAsUser** (RunAsUserStrategyOptions),必需
+
+ runAsUser 是一种策略,它将规定允许为 runAsUser 设置的值。
+
+
+ **RunAsUserStrategyOptions 定义策略类型和用于创建该策略的任意选项。**
+
+
+
+ - **runAsUser.rule** (string),必需
+
+ rule 是一种策略,它将规定允许为 runAsUser 设置的值。
+
+ - **runAsUser.ranges** ([]IDRange)
+
+ ranges 是可以使用的 UID 的允许范围。
+ 如果你要强制使用某个确定 UID,则应提供起点值和终点值相同的范围设定。
+ 对于 mustRunAs 而言是必需的。
+
+
+ **IDRange 提供了 ID 的最小/最大允许范围。**
+
+
+
+ - **runAsUser.ranges.max** (int64),必需
+
+ max 是范围的终点,该值包含在此范围内。
+
+ - **runAsUser.ranges.min** (int64),必需
+
+ min 是范围的起点,该值包含在此范围内。
+
+
+- **runAsGroup** (RunAsGroupStrategyOptions)
+
+ runAsGroup 是一种策略,它将规定可以为 runAsGroup 设置的值。
+ 如果省略此字段,则 Pod 的 runAsGroup 可以取任何值。
+ 此字段要求启用 `RunAsGroup` 特性门控。
+
+
+ **RunAsGroupStrategyOptions 定义策略类型和用于创建该策略的任意选项。**
+
+
+
+ - **runAsGroup.rule** (string),必需
+
+ rule 是一种策略,它将规定可以为 runAsGroup 设置的值。
+
+ - **runAsGroup.ranges** ([]IDRange)
+
+ ranges 是可以使用的 GID 的范围。
+ 如果你要强制使用某个确定的 GID,则可提供起点和终点相同的范围设定。
+ 对于 mustRunAs 而言是必需的。
+
+
+ **IDRange 提供了 ID 的最小/最大允许范围。**
+
+
+
+ - **runAsGroup.ranges.max** (int64),必需
+
+ max 是范围的终点,该值包含在此范围内。
+
+ - **runAsGroup.ranges.min** (int64),必需
+
+ min 是范围的起点,该值包含在此范围内。
+
+
+- **fsGroup** (FSGroupStrategyOptions),必需
+
+ fsGroup 是一种策略,它将规定 SecurityContext 将使用哪个 fs 组。
+
+
+ **FSGroupStrategyOptions 定义策略类型和用于创建该策略的任意选项。**
+
+
+
+ - **fsGroup.ranges** ([]IDRange)
+
+ ranges 是 fs 组的允许范围。
+ 如果你要强制使用某个确定的 fs 组,则应提供起点和终点相同的范围设定。
+ 对于 mustRunAs 而言是必需的。
+
+
+ **IDRange 提供了 ID 的最小/最大允许范围。**
+
+
+
+ - **fsGroup.ranges.max** (int64),必需
+
+ max 是范围的终点,该值包含在此范围内。
+
+ - **fsGroup.ranges.min** (int64),必需
+
+ min 是范围的起点,该值包含在此范围内。
+
+
+
+ - **fsGroup.rule** (string)
+
+ rule 是一种策略,它将规定 SecurityContext 中使用哪个 FSGroup。
+
+
+- **supplementalGroups** (SupplementalGroupsStrategyOptions),必需
+
+ supplementalGroups 是一种策略,它将规定 SecurityContext 将使用哪个补充组。
+
+
+ **SupplementalGroupsStrategyOptions 定义策略类型和用于创建该策略的任意选项。**
+
+
+
+ - **supplementalGroups.ranges** ([]IDRange)
+
+ ranges 是补充组的允许范围。
+ 如果你要强制使用固定的某个补充组,则应提供起点和终点相同的范围设定。
+ 对于 mustRunAs 而言是必需的。
+
+
+ **IDRange 提供了 ID 的最小/最大允许范围。**
+
+
+
+ - **supplementalGroups.ranges.max** (int64),必需
+
+ max 是范围的终点,该值包含在此范围内。
+
+ - **supplementalGroups.ranges.min** (int64),必需
+
+ min 是范围的起点,该值包含在此范围内。
+
+
+
+ - **supplementalGroups.rule** (string)
+
+ rule 是一种策略,它将规定 SecurityContext 中使用哪个补充组。
+
+
+- **seLinux** (SELinuxStrategyOptions),必需
+
+ seLinux 是一种策略,它将规定可以设置的标签集合。
+
+
+ **SELinuxStrategyOptions 定义策略类型和用于创建该策略的任意选项。**
+
+
+
+ - **seLinux.rule** (string),必需
+
+ rule 是一种策略,它将规定可以设置的标签集合。
+
+ - **seLinux.seLinuxOptions** (SELinuxOptions)
+
+ seLinuxOptions 是运行所必需的。对于 mustRunAs 而言是必需的。更多信息:
+ https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/security-context/
+
+
+ **SELinuxOptions 是应用到容器的标签。**
+
+
+
+ - **seLinux.seLinuxOptions.level** (string)
+
+ level 是应用到容器的 SELinux 级别标签。
+
+ - **seLinux.seLinuxOptions.role** (string)
+
+ role 是应用到容器的 SELinux 角色标签。
+
+ - **seLinux.seLinuxOptions.type** (string)
+
+ type 是应用到容器的 SELinux 类型标签。
+
+ - **seLinux.seLinuxOptions.user** (string)
+
+ user 是应用到容器的 SELinux 用户标签。
+
+
+- **readOnlyRootFilesystem** (boolean)
+
+ readOnlyRootFilesystem 设为 true 时将强制容器使用只读根文件系统来运行。
+ 如果容器明确请求以非只读根文件系统来运行,则 PSP 应拒绝该 Pod。
+ 如果设置为 false,则如果愿意,容器可以以只读根文件系统来运行,但不是必须使用只读根文件系统。
+
+- **privileged** (boolean)
+
+ privileged 决定 Pod 是否可以请求以特权模式运行。
+
+
+- **allowPrivilegeEscalation** (boolean)
+
+ allowPrivilegeEscalation 决定 Pod 是否可以请求允许提升特权。如果未指定,则默认为 true。
+
+- **defaultAllowPrivilegeEscalation** (boolean)
+
+ defaultAllowPrivilegeEscalation 控制一个进程是否可以获得比其父进程更多权限的默认设置。
+
+
+- **allowedCSIDrivers** ([]AllowedCSIDriver)
+
+ allowedCSIDrivers 是允许使用的内联 CSI 驱动列表,这些驱动必须被显式嵌入到 Pod 规约中。
+ 空值表示任何 CSI 驱动都可以用于内联临时卷。这是一个 beta 字段,
+ 只有 API 服务器启用 CSIInlineVolume 特性门控,才会使用此字段。
+
+
+ **AllowedCSIDriver 表示允许使用的单个内联 CSI 驱动。**
+
+
+
+ - **allowedCSIDrivers.name** (string),必需
+
+ name 是 CSI 驱动的注册名称。
+
+
+- **allowedCapabilities** ([]string)
+
+ allowedCapabilities 是可以请求添加到容器的权能列表。
+ 这个字段中的权能可以由 Pod 作者自行添加。
+ 你不得同时在 allowedCapabilities 和 requiredDropCapabilities 中列出同一个权能。
+
+- **requiredDropCapabilities** ([]string)
+
+ requiredDropCapabilities 是将从容器中丢弃的权能。这些权能需要被丢弃,且不能添加。
+
+
+- **defaultAddCapabilities** ([]string)
+
+ defaultAddCapabilities 是默认被添加到容器的权能集,除非 Pod 规约特意丢弃该权能。
+ 你不可以同时在 defaultAddCapabilities 和 requiredDropCapabilities 中列出同一个权能。
+ 此处添加的权能是被隐式允许的,不必包括在 allowedCapabilities 列表中。
+
+
+- **allowedFlexVolumes** ([]AllowedFlexVolume)
+
+ allowedFlexVolumes 是允许设置的 FlexVolume 卷的列表。
+ 空或 nil 值表示可以使用所有 FlexVolume。
+ 只有在 “volumes” 字段中允许使用 Flexvolume 卷时,此参数才有效。
+
+
+ **AllowedFlexVolume 表示允许使用的单个 Flexvolume。**
+
+
+
+ - **allowedFlexVolumes.driver** (string),必需
+
+ driver 是 FlexVolume 驱动的名称。
+
+
+- **allowedHostPaths** ([]AllowedHostPath)
+
+ allowedHostPaths 是允许使用的主机路径的列表。空表示可以使用所有主机路径。
+
+
+ **allowedHostPath 定义将按 Pod 使用的策略启用的主机卷条件。它要求定义路径前缀。**
+
+
+
+ - **allowedHostPaths.pathPrefix** (string)
+
+ pathPrefix 是主机卷必须匹配的路径前缀。
+ 此字段不支持 `*`。使用主机路径检验路径前缀时,会裁剪掉尾部的斜线。
+
+ 例如:`/foo` 将允许 `/foo`、`/foo/` 和 `/foo/bar`。
+ `/foo` 将不允许 `/food` 或 `/etc/foo`。
+
+
+
+ - **allowedHostPaths.readOnly** (boolean)
+
+ 当设置为 true 时,仅当所有与 pathPrefix 匹配的主机卷的卷挂载均为 readOnly 时,才允许使用。
+
+
+- **allowedProcMountTypes** ([]string)
+
+ AllowedProcMountTypes 是允许使用的 ProcMountType 的列表。
+ 空表或 nil 表示仅可以使用 DefaultProcMountType。
+ 此字段要求启用 ProcMountType 特性门控。
+
+
+- **allowedUnsafeSysctls** ([]string)
+
+ allowedUnsafeSysctls 是明确允许的不安全 sysctl 的列表,默认为空。
+ 每个条目要么是一个普通的 sysctl 名称,要么以 “*” 结尾,
+ 在后面这种情况下字符串值被视为所允许的 sysctl 的前缀。
+ 单个 `*` 意味着允许所有不安全的 sysctl。
+ Kubelet 必须显式列出所有被允许的、不安全的 sysctl,以防被拒绝。
+
+ 例如 `foo/*` 允许 `foo/bar`、`foo/baz` 等。
+ 例如 `foo.*` 允许 `foo.bar`、`foo.baz` 等。
+
+
+- **forbiddenSysctls** ([]string)
+
+ forbiddenSysctls 是被明确禁止的 sysctl 的列表,默认为空。
+ 每个条目要么是一个普通的 sysctl 名称,要么以 `*` 结尾,
+ 以 `*` 结尾的字符串值表示被禁止的 sysctl 的前缀。
+ 单个 `*` 意味着禁止所有 sysctl。
+
+ 例如 `foo/*` 禁止 `foo/bar`、`foo/baz` 等。
+ 例如 `foo.*` 禁止 `foo.bar`、`foo.baz` 等。
+
+
+- **hostIPC** (boolean)
+
+ hostIPC 决定此策略是否允许在 Pod 规约中使用 hostIPC。
+
+- **hostNetwork** (boolean)
+
+ hostNetwork 决定此策略是否允许在 Pod 规约中使用 hostNetwork。
+
+- **hostPID** (boolean)
+
+ hostPID 决定此策略是否允许在 Pod 规约中使用 hostPID。
+
+
+- **hostPorts** ([]HostPortRange)
+
+ hostPorts 决定允许暴露哪些主机端口范围。
+
+
+ **HostPortRange 定义将按 Pod 使用的策略启用的主机端口范围。它要求同时定义起点和终点。**
+
+
+
+ - **hostPorts.max** (int32),必需
+
+ max 是范围的终点,该值包含在此范围内。
+
+ - **hostPorts.min** (int32),必需
+
+ min 是范围的起点,该值包含在此范围内。
+
+
+- **runtimeClass** (RuntimeClassStrategyOptions)
+
+ runtimeClass 是一种策略,它将规定 Pod 所被允许的 RuntimeClass。
+ 如果省略此字段,则 Pod 的 runtimeClassName 将不受限制。
+ 该字段的实施取决于被启用的 RuntimeClass 特性门控。
+
+
+ **RuntimeClassStrategyOptions 定义一种策略,它将规定 Pod 所被允许的 RuntimeClass。**
+
+
+
+ - **runtimeClass.allowedRuntimeClassNames** ([]string),必需
+
+ allowedRuntimeClassNames 是可以在 Pod 中指定的 runtimeClass 名称的列表。
+ `*` 值意味着允许任何 runtimeClass 值,并且如果设置了 `*`,则它必须是唯一的列表项。
+ 空列表要求不能设置 runtimeClassName 字段。
+
+ - **runtimeClass.defaultRuntimeClassName** (string)
+
+ defaultRuntimeClassName 是要在 Pod 中设置的默认 runtimeClassName。
+ 该默认值必须被 allowedRuntimeClassNames 列表所允许。nil 值不会改变 Pod 设置。
+
+
+- **volumes** ([]string)
+
+ volumes 是所允许的卷插件的列表。空的列表意味着不可以使用卷。要允许所有卷,你可以使用 `*`。
+
+## PodSecurityPolicyList {#PodSecurityPolicyList}
+
+
+PodSecurityPolicyList 是 PodSecurityPolicy 对象的列表。
+
+
+
+- **apiVersion**: policy/v1beta1
+
+- **kind**: PodSecurityPolicyList
+
+
+- **metadata** (}}">ListMeta)
+
+ 标准的列表元数据。更多信息:
+ https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **items** ([]}}">PodSecurityPolicy),必需
+
+ items 是 PodSecurityPolicy 对象的列表。
+
+
+## 操作 {#Operations}
+
+
+
+### `get` 读取指定的 PodSecurityPolicy
+
+#### HTTP 请求
+
+GET /apis/policy/v1beta1/podsecuritypolicies/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ PodSecurityPolicy 的名称
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">PodSecurityPolicy): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 PodSecurityPolicy 类别的对象
+
+#### HTTP 请求
+
+GET /apis/policy/v1beta1/podsecuritypolicies
+
+
+#### 参数
+
+- **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 (}}">PodSecurityPolicyList): OK
+
+401: Unauthorized
+
+
+### `create` 创建 PodSecurityPolicy
+
+#### HTTP 请求
+
+POST /apis/policy/v1beta1/podsecuritypolicies
+
+
+#### 参数
+
+- **body**: }}">PodSecurityPolicy,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">PodSecurityPolicy): OK
+
+201 (}}">PodSecurityPolicy): Created
+
+202 (}}">PodSecurityPolicy): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换指定的 PodSecurityPolicy
+
+#### HTTP 请求
+
+PUT /apis/policy/v1beta1/podsecuritypolicies/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ PodSecurityPolicy 的名称
+
+- **body**: }}">PodSecurityPolicy,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">PodSecurityPolicy): OK
+
+201 (}}">PodSecurityPolicy): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定的 PodSecurityPolicy
+
+#### HTTP 请求
+
+PATCH /apis/policy/v1beta1/podsecuritypolicies/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ PodSecurityPolicy 的名称
+
+- **body**: }}">Patch,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">PodSecurityPolicy): OK
+
+201 (}}">PodSecurityPolicy): Created
+
+401: Unauthorized
+
+
+### `delete` 删除 PodSecurityPolicy
+
+#### HTTP 请求
+
+DELETE /apis/policy/v1beta1/podsecuritypolicies/{name}
+
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ PodSecurityPolicy 的名称
+
+- **body**: }}">DeleteOptions
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+
+#### 响应
+
+200 (}}">PodSecurityPolicy): OK
+
+202 (}}">PodSecurityPolicy): Accepted
+
+401: Unauthorized
+
+
+### `deletecollection` 删除 PodSecurityPolicy 的集合
+
+#### HTTP 请求
+
+DELETE /apis/policy/v1beta1/podsecuritypolicies
+
+
+#### 参数
+
+- **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-cn/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v1.md b/content/zh-cn/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v1.md
new file mode 100644
index 0000000000..d93b2a6fbe
--- /dev/null
+++ b/content/zh-cn/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v1.md
@@ -0,0 +1,1384 @@
+---
+api_metadata:
+ apiVersion: "autoscaling/v1"
+ import: "k8s.io/api/autoscaling/v1"
+ kind: "HorizontalPodAutoscaler"
+content_type: "api_reference"
+description: "水平 Pod 自动缩放器的配置。"
+title: "HorizontalPodAutoscaler"
+weight: 11
+---
+
+<--
+api_metadata:
+ apiVersion: "autoscaling/v1"
+ import: "k8s.io/api/autoscaling/v1"
+ kind: "HorizontalPodAutoscaler"
+content_type: "api_reference"
+description: "configuration of a horizontal pod autoscaler."
+title: "HorizontalPodAutoscaler"
+weight: 11
+auto_generated: true
+-->
+
+`apiVersion: autoscaling/v1`
+
+`import "k8s.io/api/autoscaling/v1"`
+
+
+## HorizontalPodAutoscaler {#HorizontalPodAutoscaler}
+
+水平 Pod 自动缩放器的配置。
+
+
+
+
+- **apiVersion**: autoscaling/v1
+
+- **kind**: HorizontalPodAutoscaler
+
+
+- **metadata** (}}">ObjectMeta)
+
+ 标准的对象元数据。
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+
+- **spec** (}}">HorizontalPodAutoscalerSpec)
+
+ 自动缩放器的规约。
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.
+
+
+- **status** (}}">HorizontalPodAutoscalerStatus)
+
+ 自动缩放器的当前信息。
+
+
+## HorizontalPodAutoscalerSpec {#HorizontalPodAutoscalerSpec}
+
+水平 Pod 自动缩放器的规约。
+
+
+
+
+- **maxReplicas** (int32),必填
+
+ 自动扩缩器可以设置的 Pod 数量上限;
+ 不能小于 minReplicas。
+
+
+- **scaleTargetRef** (CrossVersionObjectReference),必填
+
+ 对被扩缩资源的引用;
+ 水平 Pod 自动缩放器将了解当前的资源消耗,并使用其 scale 子资源设置所需的 Pod 数量。
+
+
+
+ **CrossVersionObjectReference 包含足够的信息来让你识别出所引用的资源。**
+
+
+
+ - **scaleTargetRef.kind** (string),必填
+
+ 被引用对象的类别;
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"
+
+
+
+ - **scaleTargetRef.name** (string),必填
+
+ 被引用对象的名称;
+ 更多信息: http://kubernetes.io/docs/user-guide/identifiers#names
+
+
+
+ - **scaleTargetRef.apiVersion** (string)
+
+ 被引用对象的 API 版本。
+
+
+- **minReplicas** (int32)
+
+ minReplicas 是自动缩放器可以缩减的副本数的下限。
+ 它默认为 1 个 Pod。
+ 如果启用了 alpha 特性门禁 HPAScaleToZero 并且配置了至少一个 Object 或 External 度量标准,
+ 则 minReplicas 允许为 0。
+ 只要至少有一个度量值可用,缩放就处于活动状态。
+
+
+- **targetCPUUtilizationPercentage** (int32)
+
+ 所有 Pod 的目标平均 CPU 利用率(以请求 CPU 的百分比表示);
+ 如果未指定,将使用默认的自动缩放策略。
+
+
+## HorizontalPodAutoscalerStatus {#HorizontalPodAutoscalerStatus}
+
+水平 Pod 自动缩放器的当前状态
+
+
+
+
+- **currentReplicas** (int32),必填
+
+ 此自动缩放器管理的 Pod 的当前副本数。
+
+
+- **desiredReplicas** (int32),必填
+
+ 此自动缩放器管理的 Pod 副本的所需数量。
+
+
+- **currentCPUUtilizationPercentage** (int32)
+
+ 当前所有 Pod 的平均 CPU 利用率,
+ 以请求 CPU 的百分比表示,
+ 例如:70 表示平均 Pod 现在正在使用其请求 CPU 的 70%。
+
+
+- **lastScaleTime** (Time)
+
+ 上次 HorizontalPodAutoscaler 缩放 Pod 的数量;
+ 自动缩放器用它来控制 Pod 数量的更改频率。
+
+
+
+ **Time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
+ 为 time 包提供的许多工厂方法提供了包装类。**
+
+
+- **observedGeneration** (int64)
+
+ 此自动缩放器观察到的最新一代。
+
+
+## HorizontalPodAutoscalerList {#HorizontalPodAutoscalerList}
+
+水平 Pod 自动缩放器对象列表。
+
+
+
+
+- **apiVersion**: autoscaling/v1
+
+- **kind**: HorizontalPodAutoscalerList
+
+
+- **metadata** (}}">ListMeta)
+
+ 标准的列表元数据。
+
+
+- **items** ([]}}">HorizontalPodAutoscaler), required
+
+ 水平 Pod 自动缩放器对象的列表。
+
+
+## 操作 {#Operations}
+
+
+
+
+### `get` 读取特定的 HorizontalPodAutoscaler
+
+
+#### HTTP 请求
+
+GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**): string,必填
+
+ HorizontalPodAutoscaler 的名称。
+
+
+- **namespace** (**路径参数**): string,必填
+
+ }}">namespace
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">HorizontalPodAutoscaler): OK
+
+401: Unauthorized
+
+
+### `get` 读取特定 HorizontalPodAutoscaler 的状态
+
+#### HTTP 请求
+
+GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
+
+
+#### 参数
+
+
+- **name** (**路径参数**): string,必填
+
+ HorizontalPodAutoscaler 的名称。
+
+
+- **namespace** (**路径参数**): string,必填
+
+ }}">namespace
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">HorizontalPodAutoscaler): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 HorizontalPodAutoscaler 类别的对象
+
+
+#### HTTP 参数
+
+GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers
+
+
+#### 参数
+
+
+- **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 (}}">HorizontalPodAutoscalerList): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 HorizontalPodAutoscaler 类别的对象
+
+#### HTTP 请求
+
+GET /apis/autoscaling/v1/horizontalpodautoscalers
+
+
+#### 参数
+
+
+- **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 (}}">HorizontalPodAutoscalerList): OK
+
+401: Unauthorized
+
+
+### `create` 创建一个 HorizontalPodAutoscaler
+
+#### HTTP 请求
+
+POST /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers
+
+
+#### 参数
+
+
+- **namespace** (**路径参数**): string,必填
+
+ }}">namespace
+
+
+- **body**: }}">HorizontalPodAutoscaler,必填
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">HorizontalPodAutoscaler): OK
+
+201 (}}">HorizontalPodAutoscaler): Created
+
+202 (}}">HorizontalPodAutoscaler): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换特定的 HorizontalPodAutoscaler
+
+#### HTTP 请求
+
+PUT /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**): string,必填
+
+ HorizontalPodAutoscaler 的名称
+
+
+- **namespace** (**路径参数**): string,必填
+
+ }}">namespace
+
+
+- **body**: }}">HorizontalPodAutoscaler,必填
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">HorizontalPodAutoscaler): OK
+
+201 (}}">HorizontalPodAutoscaler): Created
+
+401: Unauthorized
+
+
+### `update` 替换特定 HorizontalPodAutoscaler 的状态
+
+#### HTTP 请求
+
+PUT /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
+
+
+#### 参数
+
+
+- **name** (**路径参数**): string,必填
+
+ HorizontalPodAutoscaler 的名称
+
+
+- **namespace** (**路径参数**): string,必填
+
+ }}">namespace
+
+
+- **body**: }}">HorizontalPodAutoscaler,必填
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">HorizontalPodAutoscaler): OK
+
+201 (}}">HorizontalPodAutoscaler): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新特定的 HorizontalPodAutoscaler
+
+#### HTTP 请求
+
+PATCH /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**): string,必填
+
+ HorizontalPodAutoscaler 的名称
+
+
+- **namespace** (**路径参数**): string,必填
+
+ }}">namespace
+
+
+- **body**: }}">Patch,必填
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">HorizontalPodAutoscaler): OK
+
+201 (}}">HorizontalPodAutoscaler): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新特定 HorizontalPodAutoscaler 的状态
+
+#### HTTP 请求
+
+PATCH /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
+
+
+#### 参数
+
+
+- **name** (**路径参数**): string,必填
+
+ HorizontalPodAutoscaler 的名称
+
+
+- **namespace** (**路径参数**): string,必填
+
+ }}">namespace
+
+
+- **body**: }}">Patch,必填
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">HorizontalPodAutoscaler): OK
+
+201 (}}">HorizontalPodAutoscaler): Created
+
+401: Unauthorized
+
+
+### `delete` 删除一个 HorizontalPodAutoscaler
+
+#### HTTP 请求
+
+DELETE /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**): string,必填
+
+ HorizontalPodAutoscaler 的名称
+
+
+- **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` 删除 HorizontalPodAutoscaler 的集合
+
+#### HTTP 请求
+
+DELETE /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers
+
+
+#### 参数
+
+
+- **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-cn/docs/reference/labels-annotations-taints/_index.md b/content/zh-cn/docs/reference/labels-annotations-taints/_index.md
index f44be98ad3..984a12ccf2 100644
--- a/content/zh-cn/docs/reference/labels-annotations-taints/_index.md
+++ b/content/zh-cn/docs/reference/labels-annotations-taints/_index.md
@@ -46,7 +46,7 @@ One of the [recommended labels](/docs/concepts/overview/working-with-objects/com
架构中的组件。
-[推荐标签](/zh/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
+[推荐标签](/zh-cn/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
### beta.kubernetes.io/arch (已弃用) {#beta-kubernetes-io-arch}
-此标签已被弃用。请改用`kubernetes.io/arch`。
+此标签已被弃用。请改用 `kubernetes.io/arch`。
### beta.kubernetes.io/os (已弃用) {#beta-kubernetes-io-os}
-此标签已被弃用。请改用`kubernetes.io/os`。
+此标签已被弃用。请改用 `kubernetes.io/os`。
@@ -483,7 +483,7 @@ StatefulSet topic for more details.
当 StatefulSet 控制器为 StatefulSet 创建 Pod 时,控制平面会在该 Pod 上设置此标签。标签的值是正在创建的 Pod 的名称。
-有关详细信息,请参阅 StatefulSet 主题中的 [Pod 名称标签](/docs/concepts/workloads/controllers/statefulset/#pod-name-label)。
+有关详细信息,请参阅 StatefulSet 主题中的 [Pod 名称标签](/zh-cn/docs/concepts/workloads/controllers/statefulset/#pod-name-label)。
Kubernetes 对 Zone 和 Region 的结构做了一些假设:
-1. Zone 和 Region 是分层的: Zone 是 Region 的严格子集,没有 Zone 可以在两个 Region 中;
+1. Zone 和 Region 是分层的:Zone 是 Region 的严格子集,没有 Zone 可以在两个 Region 中;
-2. Zone 名称跨 Region 是唯一的;例如, Region “africa-east-1” 可能由 Zone “africa-east-1a” 和 “africa-east-1b” 组成。
+2. Zone 名称跨 Region 是唯一的;例如,Region “africa-east-1” 可能由 Zone “africa-east-1a” 和 “africa-east-1b” 组成。
你应该考虑手动添加标签(或添加对 `PersistentVolumeLabel` 的支持)。
-基于 `PersistentVolumeLabel` ,调度程序可以防止 Pod 挂载来自其他 Zone 的卷。如果你的基础架构没有此限制,则不需要将 Zone 标签添加到卷上。
+基于 `PersistentVolumeLabel`,调度程序可以防止 Pod 挂载来自其他 Zone 的卷。如果你的基础架构没有此限制,则不需要将 Zone 标签添加到卷上。
-有关何时以及如何使用此污点的更多详细信息,请参阅[非正常节点关闭](/zh/docs/concepts/architecture/nodes/#non-graceful-node-shutdown)。
+有关何时以及如何使用此污点的更多详细信息,请参阅[非正常节点关闭](/zh-cn/docs/concepts/architecture/nodes/#non-graceful-node-shutdown)。
{{< /caution >}}
### pod-security.kubernetes.io/enforce-version {#pod-security-kubernetes-io-enforce-version}
-例子:`pod-security.kubernetes.io/enforce-version: {{< skew latestVersion >}}`
+例子:`pod-security.kubernetes.io/enforce-version: {{< skew currentVersion >}}`
用于:Namespace
值**必须**是 `latest` 或格式为 `v
* Force deletion of the Pod by the user.
-->
-* 删除 Node 对象(要么你来删除, 要么[节点控制器](/zh/docs/concepts/architecture/nodes/#node-controller)
+* 删除 Node 对象(要么你来删除, 要么[节点控制器](/zh-cn/docs/concepts/architecture/nodes/#node-controller)
来删除)
* 无响应节点上的 kubelet 开始响应,杀死 Pod 并从 API 服务器上移除 Pod 对象
* 用户强制删除 pod
@@ -171,6 +171,6 @@ Always perform force deletion of StatefulSet Pods carefully and with complete kn
-进一步了解[调试 StatefulSet](/zh/docs/tasks/debug/debug-application/debug-statefulset/)。
+进一步了解[调试 StatefulSet](/zh-cn/docs/tasks/debug/debug-application/debug-statefulset/)。
diff --git a/content/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md b/content/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
index ec54dac755..f709acfe6a 100644
--- a/content/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
+++ b/content/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
@@ -32,7 +32,7 @@ This is different from _vertical_ scaling, which for Kubernetes would mean
assigning more resources (for example: memory or CPU) to the Pods that are already
running for the workload.
-->
-[HorizontalPodAutoscaler](/zh/docs/tasks/run-application/horizontal-pod-autoscale/) (简称 HPA )
+[HorizontalPodAutoscaler](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/) (简称 HPA )
自动更新工作负载资源(例如 {{< glossary_tooltip text="Deployment" term_id="deployment" >}} 或者
{{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}}),
目的是自动扩缩工作负载以满足需求。
@@ -66,7 +66,7 @@ release of Kubernetes, refer to the version of the documentation for that releas
[available documentation versions](/docs/home/supported-doc-versions/)).
-->
如果你运行的是旧版本的 Kubernetes,请参阅该版本的文档版本
-([可用的文档版本](/zh/docs/home/supported-doc-versions/))。
+([可用的文档版本](/zh-cn/docs/home/supported-doc-versions/))。
@@ -764,7 +764,7 @@ HorizontalPodAutoscaler.
首先,`AbleToScale` 表明 HPA 是否可以获取和更新扩缩信息,以及是否存在阻止扩缩的各种回退条件。
其次,`ScalingActive` 表明 HPA 是否被启用(即目标的副本数量不为零) 以及是否能够完成扩缩计算。
当这一状态为 `False` 时,通常表明获取度量指标存在问题。
-最后一个条件 `ScalingLimitted` 表明所需扩缩的值被 HorizontalPodAutoscaler
+最后一个条件 `ScalingLimited` 表明所需扩缩的值被 HorizontalPodAutoscaler
所定义的最大或者最小值所限制(即已经达到最大或者最小扩缩值)。
这通常表明你可能需要调整 HorizontalPodAutoscaler 所定义的最大或者最小副本数量的限制了。
@@ -816,4 +816,4 @@ kubectl create -f https://k8s.io/examples/application/hpa/php-apache.yaml
```
horizontalpodautoscaler.autoscaling/php-apache created
-```
\ No newline at end of file
+```
diff --git a/content/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale.md
index 6d6c161e1a..546f6d226f 100644
--- a/content/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale.md
+++ b/content/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale.md
@@ -65,7 +65,7 @@ Pod 自动扩缩控制器会定期调整其目标(例如:Deployment)的所
There is [walkthrough example](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/) of using
horizontal pod autoscaling.
-->
-使用水平 Pod 自动扩缩[演练示例](/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)。
+使用水平 Pod 自动扩缩[演练示例](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)。
@@ -84,7 +84,7 @@ Kubernetes implements horizontal pod autoscaling as a control loop that runs int
(and the default interval is 15 seconds).
-->
Kubernetes 将水平 Pod 自动扩缩实现为一个间歇运行的控制回路(它不是一个连续的过程)。间隔由
-[`kube-controller-manager`](/zh/docs/reference/command-line-tools-reference/kube-controller-manager/)
+[`kube-controller-manager`](/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager/)
的 `--horizontal-pod-autoscaler-sync-period` 参数设置(默认间隔为 15 秒)。
* 对于按 Pod 统计的资源指标(如 CPU),控制器从资源指标 API 中获取每一个
HorizontalPodAutoscaler 指定的 Pod 的度量值,如果设置了目标使用率,
- 控制器获取每个 Pod 中的容器[资源使用](/zh/docs/concepts/configuration/manage-resources-containers/#requests-and-limits) 情况,
+ 控制器获取每个 Pod 中的容器[资源使用](/zh-cn/docs/concepts/configuration/manage-resources-containers/#requests-and-limits) 情况,
并计算资源使用率。如果设置了 target 值,将直接使用原始数据(不再计算百分比)。
接下来,控制器根据平均的资源使用率或原始值计算出扩缩的比例,进而计算出目标副本数。
@@ -153,7 +153,7 @@ For more information about resource metrics, see
HorizontalPodAutoscaler 的常见用途是将其配置为从{{< glossary_tooltip text="聚合 API" term_id="aggregation-layer" >}}
(`metrics.k8s.io`、`custom.metrics.k8s.io` 或 `external.metrics.k8s.io`)获取指标。
`metrics.k8s.io` API 通常由名为 Metrics Server 的插件提供,需要单独启动。有关资源指标的更多信息,
-请参阅 [Metrics Server](/zh/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#metrics-server)。
+请参阅 [Metrics Server](/zh-cn/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#metrics-server)。
创建 HorizontalPodAutoscaler 对象时,需要确保所给的名称是一个合法的
-[DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
+[DNS 子域名](/zh-cn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
有关 API 对象的更多信息,请查阅
[HorizontalPodAutoscaler 对象设计文档](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#horizontalpodautoscaler-v2-autoscaling)。
@@ -592,7 +592,7 @@ APIs, cluster administrators must ensure that:
* For external metrics, this is the `external.metrics.k8s.io` API. It may be provided by the custom metrics adapters provided above.
-->
-* 启用了 [API 聚合层](/zh/docs/tasks/extend-kubernetes/configure-aggregation-layer/)
+* 启用了 [API 聚合层](/zh-cn/docs/tasks/extend-kubernetes/configure-aggregation-layer/)
* 相应的 API 已注册:
@@ -621,8 +621,8 @@ For examples of how to use them see [the walkthrough for using custom metrics](/
and [the walkthrough for using external metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects).
-->
关于如何使用它们的示例,请参考
-[使用自定义指标的教程](/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics)
-和[使用外部指标的教程](/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects)。
+[使用自定义指标的教程](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics)
+和[使用外部指标的教程](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects)。
请记住,删除 `spec.replicas` 可能会导致 Pod 计数一次性降级,因为此键的默认值为 1
-(参考 [Deployment Replicas](/zh/docs/concepts/workloads/controllers/deployment#replicas))。
+(参考 [Deployment Replicas](/zh-cn/docs/concepts/workloads/controllers/deployment#replicas))。
更新后,除 1 之外的所有 Pod 都将开始其终止程序。之后的任何部署应用程序都将正常运行,
并根据需要遵守滚动更新配置。你可以根据修改部署的方式选择以下两种方法之一来避免这种降级:
@@ -975,8 +975,8 @@ When using the [Server-Side Apply](/docs/reference/using-api/server-side-apply/)
you can follow the [transferring ownership](/docs/reference/using-api/server-side-apply/#transferring-ownership)
guidelines, which cover this exact use case.
-->
-使用[服务器端 Apply](/zh/docs/reference/using-api/server-side-apply/) 机制,
-你可以遵循[交出所有权](/zh/docs/reference/using-api/server-side-apply/#transferring-ownership) 说明,
+使用[服务器端 Apply](/zh-cn/docs/reference/using-api/server-side-apply/) 机制,
+你可以遵循[交出所有权](/zh-cn/docs/reference/using-api/server-side-apply/#transferring-ownership) 说明,
该指南涵盖了这个确切的用例。
{{% /tab %}}
@@ -1001,7 +1001,7 @@ For more information on HorizontalPodAutoscaler:
[boilerplate](https://github.com/kubernetes-sigs/custom-metrics-apiserver) to get started.
* Read the [API reference](/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v2/) for HorizontalPodAutoscaler.
-->
-* 阅读水平 Pod 自动扩缩的[演练示例](/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)。
+* 阅读水平 Pod 自动扩缩的[演练示例](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)。
* 阅读 [`kubectl autoscale`](/docs/reference/generated/kubectl/kubectl-commands/#autoscale) 的文档。
* 如果你想编写自己的自定义指标适配器,
请查看 [boilerplate](https://github.com/kubernetes-sigs/custom-metrics-apiserver) 以开始使用。
diff --git a/content/zh-cn/docs/tasks/run-application/run-replicated-stateful-application.md b/content/zh-cn/docs/tasks/run-application/run-replicated-stateful-application.md
index 4e11cd6768..69c9b8eaa7 100644
--- a/content/zh-cn/docs/tasks/run-application/run-replicated-stateful-application.md
+++ b/content/zh-cn/docs/tasks/run-application/run-replicated-stateful-application.md
@@ -20,12 +20,12 @@ weight: 30
-本页展示如何使用 [StatefulSet](/zh/docs/concepts/workloads/controllers/statefulset/)
+本页展示如何使用 {{< glossary_tooltip term_id="statefulset" >}}
控制器运行一个有状态的应用程序。此例是多副本的 MySQL 数据库。
示例应用的拓扑结构有一个主服务器和多个副本,使用异步的基于行(Row-Based)
的数据复制。
@@ -43,7 +43,7 @@ on general patterns for running stateful applications in Kubernetes.
## {{% heading "prerequisites" %}}
-* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+* {{< include "task-tutorial-prereqs.md" >}}
* {{< include "default-storage-class-prereqs.md" >}}
* 本教程假定你熟悉
- [PersistentVolumes](/zh/docs/concepts/storage/persistent-volumes/)
- 与 [StatefulSet](/zh/docs/concepts/workloads/controllers/statefulset/),
- 以及其他核心概念,例如 [Pod](/zh/docs/concepts/workloads/pods/)、
- [服务](/zh/docs/concepts/services-networking/service/) 与
- [ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/).
+ [PersistentVolumes](/zh-cn/docs/concepts/storage/persistent-volumes/)
+ 与 [StatefulSet](/zh-cn/docs/concepts/workloads/controllers/statefulset/),
+ 以及其他核心概念,例如 [Pod](/zh-cn/docs/concepts/workloads/pods/)、
+ [服务](/zh-cn/docs/concepts/services-networking/service/) 与
+ [ConfigMap](/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/).
* 熟悉 MySQL 会有所帮助,但是本教程旨在介绍对其他系统应该有用的常规模式。
* 你正在使用默认命名空间或不包含任何冲突对象的另一个命名空间。
## {{% heading "objectives" %}}
-* 使用 StatefulSet 控制器部署多副本 MySQL 拓扑架构。
+* 使用 StatefulSet 部署多副本 MySQL 拓扑架构。
* 发送 MySQL 客户端请求
* 观察对宕机的抵抗力
* 扩缩 StatefulSet 的规模
@@ -91,11 +91,13 @@ and a StatefulSet.
MySQL 示例部署包含一个 ConfigMap、两个 Service 与一个 StatefulSet。
-### ConfigMap
-
+### 创建一个 ConfigMap {#configmap}
+
使用以下的 YAML 配置文件创建 ConfigMap :
{{< codenew file="application/mysql/mysql-configmap.yaml" >}}
@@ -106,13 +108,13 @@ kubectl apply -f https://k8s.io/examples/application/mysql/mysql-configmap.yaml
-这个 ConfigMap 提供 `my.cnf` 覆盖设置,使你可以独立控制 MySQL 主服务器和从服务器的配置。
-在这里,你希望主服务器能够将复制日志提供给副本服务器,并且希望副本服务器拒绝任何不是通过
-复制进行的写操作。
+这个 ConfigMap 提供 `my.cnf` 覆盖设置,使你可以独立控制 MySQL 主服务器和副本服务器的配置。
+在这里,你希望主服务器能够将复制日志提供给副本服务器,
+并且希望副本服务器拒绝任何不是通过复制进行的写操作。
-### 服务 {#services}
+### 创建 Service {#services}
使用以下 YAML 配置文件创建服务:
@@ -139,41 +141,45 @@ kubectl apply -f https://k8s.io/examples/application/mysql/mysql-services.yaml
```
-这个无头服务给 StatefulSet 控制器为集合中每个 Pod 创建的 DNS 条目提供了一个宿主。
+这个无头 Service 给 StatefulSet {{< glossary_tooltip text="控制器" term_id="controller" >}}
+为集合中每个 Pod 创建的 DNS 条目提供了一个宿主。
因为无头服务名为 `mysql`,所以可以通过在同一 Kubernetes 集群和命名空间中的任何其他 Pod
内解析 `