[zh] Sync changes from English site (8)
parent
edbab98ce4
commit
7ce6ab0a47
|
@ -15,10 +15,11 @@ If the data you want to store are confidential, use a
|
|||
{{< glossary_tooltip text="Secret" term_id="secret" >}} rather than a ConfigMap,
|
||||
or use additional (third party) tools to keep your data private.
|
||||
-->
|
||||
ConfigMap 并不提供保密或者加密功能。如果你想存储的数据是机密的,请使用 {{< glossary_tooltip text="Secret" term_id="secret" >}} ,或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。
|
||||
ConfigMap 并不提供保密或者加密功能。
|
||||
如果你想存储的数据是机密的,请使用 {{< glossary_tooltip text="Secret" term_id="secret" >}},
|
||||
或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。
|
||||
{{< /caution >}}
|
||||
|
||||
|
||||
<!-- body -->
|
||||
<!--
|
||||
## Motivation
|
||||
|
@ -27,31 +28,45 @@ Use a ConfigMap for setting configuration data separately from application code.
|
|||
|
||||
For example, imagine that you are developing an application that you can run on your
|
||||
own computer (for development) and in the cloud (to handle real traffic).
|
||||
You write the code to
|
||||
look in an environment variable named `DATABASE_HOST`. Locally, you set that variable
|
||||
to `localhost`. In the cloud, you set it to refer to a Kubernetes
|
||||
{{< glossary_tooltip text="Service" term_id="service" >}} that exposes the database
|
||||
component to your cluster.
|
||||
|
||||
You write the code to look in an environment variable named `DATABASE_HOST`.
|
||||
Locally, you set that variable to `localhost`. In the cloud, you set it to
|
||||
refer to a Kubernetes {{< glossary_tooltip text="Service" term_id="service" >}}
|
||||
that exposes the database component to your cluster.
|
||||
This lets you fetch a container image running in the cloud and
|
||||
debug the exact same code locally if needed.
|
||||
-->
|
||||
|
||||
## 动机
|
||||
## 动机 {#motivation}
|
||||
|
||||
使用 ConfigMap 来将你的配置数据和应用程序代码分开。
|
||||
|
||||
比如,假设你正在开发一个应用,它可以在你自己的电脑上(用于开发)和在云上(用于实际流量)运行。你的代码里有一段是用于查看环境变量 `DATABASE_HOST`,在本地运行时,你将这个变量设置为 `localhost`,在云上,你将其设置为引用 Kubernetes 集群中的公开数据库 {{< glossary_tooltip text="Service" term_id="service" >}} 中的组件。
|
||||
比如,假设你正在开发一个应用,它可以在你自己的电脑上(用于开发)和在云上
|
||||
(用于实际流量)运行。
|
||||
你的代码里有一段是用于查看环境变量 `DATABASE_HOST`,在本地运行时,
|
||||
你将这个变量设置为 `localhost`,在云上,你将其设置为引用 Kubernetes 集群中的
|
||||
公开数据库组件的 {{< glossary_tooltip text="服务" term_id="service" >}}。
|
||||
|
||||
这让您可以获取在云中运行的容器镜像,并且如果有需要的话,在本地调试完全相同的代码。
|
||||
这让你可以获取在云中运行的容器镜像,并且如果有需要的话,在本地调试完全相同的代码。
|
||||
|
||||
<!--
|
||||
A ConfigMap is not designed to hold large chunks of data. The data stored in a
|
||||
ConfigMap cannot exeed 1 MiB. If you need to store settings that are
|
||||
larger than this limit, you may want to consider mounting a volume or use a
|
||||
separate database or file service.
|
||||
-->
|
||||
ConfigMap 在设计上不是用来保存大量数据的。在 ConfigMap 中保存的数据不可超过
|
||||
1 MiB。如果你需要保存超出此尺寸限制的数据,你可能希望考虑挂载存储卷
|
||||
或者使用独立的数据库或者文件服务。
|
||||
|
||||
<!--
|
||||
## ConfigMap object
|
||||
|
||||
A ConfigMap is an API [object](/docs/concepts/overview/working-with-objects/kubernetes-objects/)
|
||||
that lets you store configuration for other objects to use. Unlike most
|
||||
Kubernetes objects that have a `spec`, a ConfigMap has a `data` section to
|
||||
store items (keys) and their values.
|
||||
Kubernetes objects that have a `spec`, a ConfigMap has `data` and `binaryData`
|
||||
fields. These fields accepts key-value pairs as their values. Both the `data`
|
||||
field and the `binaryData` are optional. The `data` field is designed to
|
||||
contain UTF-8 byte sequences while the `binaryData` field is designed to
|
||||
contain binary data.
|
||||
|
||||
The name of a ConfigMap must be a valid
|
||||
[DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
|
||||
|
@ -60,9 +75,28 @@ The name of a ConfigMap must be a valid
|
|||
|
||||
ConfigMap 是一个 API [对象](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/),
|
||||
让你可以存储其他对象所需要使用的配置。
|
||||
和其他 Kubernetes 对象都有一个 `spec` 不同的是,ConfigMap 使用 `data` 块来存储元素(键名)和它们的值。
|
||||
和其他 Kubernetes 对象都有一个 `spec` 不同的是,ConfigMap 使用 `data` 和
|
||||
`binaryData` 字段。这些字段能够接收键-值对作为其取值。`data` 和 `binaryData`
|
||||
字段都是可选的。`data` 字段设计用来保存 UTF-8 字节序列,而 `binaryData` 则
|
||||
被设计用来保存二进制数据。
|
||||
|
||||
ConfigMap 的名字必须是一个合法的 [DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
|
||||
ConfigMap 的名字必须是一个合法的
|
||||
[DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
|
||||
|
||||
<!--
|
||||
Each key under the `data` or the `binaryData` field must consist of
|
||||
alphanumeric characters, `-`, `_` or `.`. The keys stored in `data` must not
|
||||
overlap with the keys in the `binaryData` field.
|
||||
|
||||
Starting from v1.19, you can add an `immutable` field to a ConfigMap
|
||||
definition to create an [immutable ConfigMap](#configmap-immutable).
|
||||
-->
|
||||
`data` 或 `binaryData` 字段下面的每个键的名称都必须由字母数字字符或者
|
||||
`-`、`_` 或 `.` 组成。在 `data` 下保存的键名不可以与在 `binaryData` 下
|
||||
出现的键名有重叠。
|
||||
|
||||
从 v1.19 开始,你可以添加一个 `immutable` 字段到 ConfigMap 定义中,创建
|
||||
[不可变更的 ConfigMap](#configmap-immutable)。
|
||||
|
||||
<!--
|
||||
## ConfigMaps and Pods
|
||||
|
@ -77,9 +111,12 @@ format.
|
|||
-->
|
||||
## ConfigMaps 和 Pods
|
||||
|
||||
您可以写一个引用 ConfigMap 的 Pod 的 `spec`,并根据 ConfigMap 中的数据在该 Pod 中配置容器。这个 Pod 和 ConfigMap 必须要在同一个 {{< glossary_tooltip text="命名空间" term_id="namespace" >}} 中。
|
||||
你可以写一个引用 ConfigMap 的 Pod 的 `spec`,并根据 ConfigMap 中的数据
|
||||
在该 Pod 中配置容器。这个 Pod 和 ConfigMap 必须要在同一个
|
||||
{{< glossary_tooltip text="名字空间" term_id="namespace" >}} 中。
|
||||
|
||||
这是一个 ConfigMap 的示例,它的一些键只有一个值,其他键的值看起来像是配置的片段格式。
|
||||
这是一个 ConfigMap 的示例,它的一些键只有一个值,其他键的值看起来像是
|
||||
配置的片段格式。
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
|
@ -90,7 +127,7 @@ data:
|
|||
# 类属性键;每一个键都映射到一个简单的值
|
||||
player_initial_lives: "3"
|
||||
ui_properties_file_name: "user-interface.properties"
|
||||
#
|
||||
|
||||
# 类文件键
|
||||
game.properties: |
|
||||
enemy.types=aliens,monsters
|
||||
|
@ -115,14 +152,16 @@ For the first three methods, the
|
|||
{{< glossary_tooltip text="kubelet" term_id="kubelet" >}} uses the data from
|
||||
the ConfigMap when it launches container(s) for a Pod.
|
||||
-->
|
||||
您可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:
|
||||
你可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:
|
||||
|
||||
1. 容器 entrypoint 的命令行参数
|
||||
1. 容器的环境变量
|
||||
1. 在只读卷里面添加一个文件,让应用来读取
|
||||
1. 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap
|
||||
|
||||
这些不同的方法适用于不同的数据使用方式。对前三个方法,{{< glossary_tooltip text="kubelet" term_id="kubelet" >}} 使用 ConfigMap 中的数据在 Pod 中启动容器。
|
||||
这些不同的方法适用于不同的数据使用方式。
|
||||
对前三个方法,{{< glossary_tooltip text="kubelet" term_id="kubelet" >}}
|
||||
使用 ConfigMap 中的数据在 Pod 中启动容器。
|
||||
|
||||
<!--
|
||||
The fourth method means you have to write code to read the ConfigMap and its data.
|
||||
|
@ -133,9 +172,13 @@ technique also lets you access a ConfigMap in a different namespace.
|
|||
|
||||
Here's an example Pod that uses values from `game-demo` to configure a Pod:
|
||||
-->
|
||||
第四种方法意味着你必须编写代码才能读取 ConfigMap 和它的数据。然而,由于您是直接使用 Kubernetes API,因此只要 ConfigMap 发生更改,您的应用就能够通过订阅来获取更新,并且在这样的情况发生的时候做出反应。通过直接进入 Kubernetes API,这个技术也可以让你能够获取到不同的命名空间里的 ConfigMap。
|
||||
第四种方法意味着你必须编写代码才能读取 ConfigMap 和它的数据。然而,
|
||||
由于你是直接使用 Kubernetes API,因此只要 ConfigMap 发生更改,你的
|
||||
应用就能够通过订阅来获取更新,并且在这样的情况发生的时候做出反应。
|
||||
通过直接进入 Kubernetes API,这个技术也可以让你能够获取到不同的名字空间
|
||||
里的 ConfigMap。
|
||||
|
||||
这是一个 Pod 的示例,它通过使用 `game-demo` 中的值来配置一个 Pod:
|
||||
下面是一个 Pod 的示例,它通过使用 `game-demo` 中的值来配置一个 Pod:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
|
@ -145,7 +188,8 @@ metadata:
|
|||
spec:
|
||||
containers:
|
||||
- name: demo
|
||||
image: game.example/demo-game
|
||||
image: alpine
|
||||
command: ["sleep", "3600"]
|
||||
env:
|
||||
# 定义环境变量
|
||||
- name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的
|
||||
|
@ -163,41 +207,56 @@ spec:
|
|||
mountPath: "/config"
|
||||
readOnly: true
|
||||
volumes:
|
||||
# 您可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
|
||||
# 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
|
||||
- name: config
|
||||
configMap:
|
||||
# 提供你想要挂载的 ConfigMap 的名字
|
||||
name: game-demo
|
||||
# 来自 ConfigMap 的一组键,将被创建为文件
|
||||
items:
|
||||
- key: "game.properties"
|
||||
path: "game.properties"
|
||||
- key: "user-interface.properties"
|
||||
path: "user-interface.properties"
|
||||
```
|
||||
|
||||
<!--
|
||||
A ConfigMap doesn't differentiate between single line property values and
|
||||
multi-line file-like values.
|
||||
What matters how Pods and other objects consume those values.
|
||||
|
||||
For this example, defining a volume and mounting it inside the `demo`
|
||||
container as `/config` creates four files:
|
||||
|
||||
- `/config/player_initial_lives`
|
||||
- `/config/ui_properties_file_name`
|
||||
- `/config/game.properties`
|
||||
- `/config/user-interface.properties`
|
||||
|
||||
If you want to make sure that `/config` only contains files with a
|
||||
`.properties` extension, use two different ConfigMaps, and refer to both
|
||||
ConfigMaps in the `spec` for a Pod. The first ConfigMap defines
|
||||
`player_initial_lives` and `ui_properties_file_name`. The second
|
||||
ConfigMap defines the files that the kubelet places into `/config`.
|
||||
container as `/config` creates two files,
|
||||
`/config/game.properties` and `/config/user-interface.properties`,
|
||||
even though there are four keys in the ConfigMap. This is because the Pod
|
||||
definition specifies an `items` array in the `volumes` section.
|
||||
If you omit the `items` array entirely, every key in the ConfigMap becomes
|
||||
a file with the same name as the key, and you get 4 files.
|
||||
-->
|
||||
ConfigMap 不会区分单行属性值和多行类似文件的值,重要的是 Pods 和其他对象如何使用这些值。比如,定义一个卷,并将它作为 `/config` 文件夹安装到 `demo` 容器内,并创建四个文件:
|
||||
ConfigMap 不会区分单行属性值和多行类似文件的值,重要的是 Pods 和其他对象
|
||||
如何使用这些值。
|
||||
|
||||
- `/config/player_initial_lives`
|
||||
- `/config/ui_properties_file_name`
|
||||
- `/config/game.properties`
|
||||
- `/config/user-interface.properties`
|
||||
上面的例子定义了一个卷并将它作为 `/config` 文件夹挂载到 `demo` 容器内,
|
||||
创建两个文件,`/config/game.properties` 和
|
||||
`/config/user-interface.properties`,
|
||||
尽管 ConfigMap 中包含了四个键。
|
||||
这是因为 Pod 定义中在 `volumes` 节指定了一个 `items` 数组。
|
||||
如果你完全忽略 `items` 数组,则 ConfigMap 中的每个键都会变成一个与
|
||||
该键同名的文件,因此你会得到四个文件。
|
||||
|
||||
如果您要确保 `/config` 只包含带有 `.properties` 扩展名的文件,可以使用两个不同的 ConfigMaps,并在 `spec` 中同时引用这两个 ConfigMaps 来创建 Pod。第一个 ConfigMap 定义了 `player_initial_lives` 和 `ui_properties_file_name`,第二个 ConfigMap 定义了 kubelet 放进 `/config` 的文件。
|
||||
<!--
|
||||
## Using ConfigMaps
|
||||
|
||||
ConfigMaps can be mounted as data volumes. ConfigMaps can also be used by other
|
||||
parts of the system, without being directly exposed to the Pod. For example,
|
||||
ConfigMaps can hold data that other parts of the system should use for configuration.
|
||||
-->
|
||||
## 使用 ConfigMap {#using-configmaps}
|
||||
|
||||
ConfigMap 可以作为数据卷挂载。ConfigMap 也可被系统的其他组件使用,而
|
||||
不一定直接暴露给 Pod。例如,ConfigMap 可以保存系统中其他组件要使用
|
||||
的配置数据。
|
||||
|
||||
{{< note >}}
|
||||
<!--
|
||||
The most common way to use ConfigMaps is to configure settings for
|
||||
containers running in a Pod in the same namespace. You can also use a
|
||||
|
@ -208,12 +267,178 @@ might encounter {{< glossary_tooltip text="addons" term_id="addons" >}}
|
|||
or {{< glossary_tooltip text="operators" term_id="operator-pattern" >}} that
|
||||
adjust their behavior based on a ConfigMap.
|
||||
-->
|
||||
ConfigMap 最常见的用法是为同一命名空间里某 Pod 中运行的容器执行配置。您也可以单独使用 ConfigMap。
|
||||
ConfigMap 最常见的用法是为同一命名空间里某 Pod 中运行的容器执行配置。
|
||||
你也可以单独使用 ConfigMap。
|
||||
|
||||
比如,您可能会遇到基于 ConfigMap 来调整其行为的 {{< glossary_tooltip text="插件" term_id="addons" >}} 或者 {{< glossary_tooltip text="operator" term_id="operator-pattern" >}}。
|
||||
{{< /note >}}
|
||||
比如,你可能会遇到基于 ConfigMap 来调整其行为的
|
||||
{{< glossary_tooltip text="插件" term_id="addons" >}} 或者
|
||||
{{< glossary_tooltip text="operator" term_id="operator-pattern" >}}。
|
||||
|
||||
<!--
|
||||
### Using ConfigMaps as files from a Pod
|
||||
|
||||
To consume a ConfigMap in a volume in a Pod:
|
||||
-->
|
||||
### 在 Pod 中将 ConfigMap 当做文件使用
|
||||
|
||||
<!--
|
||||
1. Create a ConfigMap or use an existing one. Multiple Pods can reference the
|
||||
same ConfigMap.
|
||||
1. Modify your Pod definition to add a volume under `.spec.volumes[]`. Name
|
||||
the volume anything, and have a `.spec.volumes[].configMap.name` field set
|
||||
to reference your ConfigMap object.
|
||||
1. Add a `.spec.containers[].volumeMounts[]` to each container that needs the
|
||||
ConfigMap. Specify `.spec.containers[].volumeMounts[].readOnly = true` and
|
||||
`.spec.containers[].volumeMounts[].mountPath` to an unused directory name
|
||||
where you would like the ConfigMap to appear.
|
||||
1. Modify your image or command line so that the program looks for files in
|
||||
that directory. Each key in the ConfigMap `data` map becomes the filename
|
||||
under `mountPath`.
|
||||
-->
|
||||
1. 创建一个 ConfigMap 对象或者使用现有的 ConfigMap 对象。多个 Pod 可以引用同一个
|
||||
ConfigMap。
|
||||
1. 修改 Pod 定义,在 `spec.volumes[]` 下添加一个卷。
|
||||
为该卷设置任意名称,之后将 `spec.volumes[].configMap.name` 字段设置为对
|
||||
你的 ConfigMap 对象的引用。
|
||||
1. 为每个需要该 ConfigMap 的容器添加一个 `.spec.containers[].volumeMounts[]`。
|
||||
设置 `.spec.containers[].volumeMounts[].readOnly=true` 并将
|
||||
`.spec.containers[].volumeMounts[].mountPath` 设置为一个未使用的目录名,
|
||||
ConfigMap 的内容将出现在该目录中。
|
||||
1. 更改你的镜像或者命令行,以便程序能够从该目录中查找文件。ConfigMap 中的每个
|
||||
`data` 键会变成 `mountPath` 下面的一个文件名。
|
||||
|
||||
<!--
|
||||
This is an example of a Pod that mounts a ConfigMap in a volume:
|
||||
-->
|
||||
下面是一个将 ConfigMap 以卷的形式进行挂载的 Pod 示例:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: mypod
|
||||
spec:
|
||||
containers:
|
||||
- name: mypod
|
||||
image: redis
|
||||
volumeMounts:
|
||||
- name: foo
|
||||
mountPath: "/etc/foo"
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: foo
|
||||
configMap:
|
||||
name: myconfigmap
|
||||
```
|
||||
|
||||
<!--
|
||||
Each ConfigMap you want to use needs to be referred to in `.spec.volumes`.
|
||||
|
||||
If there are multiple containers in the Pod, then each container needs its
|
||||
own `volumeMounts` block, but only one `.spec.volumes` is needed per ConfigMap.
|
||||
-->
|
||||
你希望使用的每个 ConfigMap 都需要在 `spec.volumes` 中被引用到。
|
||||
|
||||
如果 Pod 中有多个容器,则每个容器都需要自己的 `volumeMounts` 块,但针对
|
||||
每个 ConfigMap,你只需要设置一个 `spec.volumes` 块。
|
||||
|
||||
<!--
|
||||
#### Mounted ConfigMaps are updated automatically
|
||||
|
||||
When a ConfigMap currently consumed in a volume is updated, projected keys are eventually updated as well.
|
||||
The kubelet checks whether the mounted ConfigMap is fresh on every periodic sync.
|
||||
However, the kubelet uses its local cache for getting the current value of the ConfigMap.
|
||||
The type of the cache is configurable using the `ConfigMapAndSecretChangeDetectionStrategy` field in
|
||||
the [KubeletConfiguration struct](https://github.com/kubernetes/kubernetes/blob/{{< param "docsbranch" >}}/staging/src/k8s.io/kubelet/config/v1beta1/types.go).
|
||||
-->
|
||||
#### 被挂载的 ConfigMap 内容会被自动更新
|
||||
|
||||
当卷中使用的 ConfigMap 被更新时,所投射的键最终也会被更新。
|
||||
kubelet 组件会在每次周期性同步时检查所挂载的 ConfigMap 是否为最新。
|
||||
不过,kubelet 使用的是其本地的高速缓存来获得 ConfigMap 的当前值。
|
||||
高速缓存的类型可以通过
|
||||
[KubeletConfiguration 结构](https://github.com/kubernetes/kubernetes/blob/{{< param "docsbranch" >}}/staging/src/k8s.io/kubelet/config/v1beta1/types.go)
|
||||
的 `ConfigMapAndSecretChangeDetectionStrategy` 字段来配置。
|
||||
|
||||
<!--
|
||||
A ConfigMap can be either propagated by watch (default), ttl-based, or simply redirecting
|
||||
all requests directly to the API server.
|
||||
As a result, the total delay from the moment when the ConfigMap is updated to the moment
|
||||
when new keys are projected to the Pod can be as long as the kubelet sync period + cache
|
||||
propagation delay, where the cache propagation delay depends on the chosen cache type
|
||||
(it equals to watch propagation delay, ttl of cache, or zero correspondingly).
|
||||
-->
|
||||
ConfigMap 既可以通过 watch 操作实现内容传播(默认形式),也可实现基于 TTL
|
||||
的缓存,还可以直接将所有请求重定向到 API 服务器。
|
||||
因此,从 ConfigMap 被更新的那一刻算起,到新的主键被投射到 Pod 中去,这一
|
||||
时间跨度可能与 kubelet 的同步周期加上高速缓存的传播延迟相等。
|
||||
这里的传播延迟取决于所选的高速缓存类型
|
||||
(分别对应 watch 操作的传播延迟、高速缓存的 TTL 时长或者 0)。
|
||||
|
||||
<!--
|
||||
ConfigMaps consumed as environment variables are not updated automatically and require a pod restart.
|
||||
-->
|
||||
以环境变量方式使用的 ConfigMap 数据不会被自动更新。
|
||||
更新这些数据需要重新启动 Pod。
|
||||
|
||||
<!--
|
||||
## Immutable ConfigMaps {#configmap-immutable}
|
||||
-->
|
||||
## 不可变更的 ConfigMap {#configmap-immutable}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.19" state="beta" >}}
|
||||
|
||||
<!--
|
||||
The Kubernetes beta feature _Immutable Secrets and ConfigMaps_ provides an option to set
|
||||
individual Secrets and ConfigMaps as immutable. For clusters that extensively use ConfigMaps
|
||||
(at least tens of thousands of unique ConfigMap to Pod mounts), preventing changes to their
|
||||
data has the following advantages:
|
||||
-->
|
||||
Kubernetes Beta 特性 _不可变更的 Secret 和 ConfigMap_ 提供了一种将各个
|
||||
Secret 和 ConfigMap 设置为不可变更的选项。对于大量使用 ConfigMap 的
|
||||
集群(至少有数万个各不相同的 ConfigMap 给 Pod 挂载)而言,禁止更改
|
||||
ConfigMap 的数据有以下好处:
|
||||
|
||||
<!--
|
||||
- protects you from accidental (or unwanted) updates that could cause applications outages
|
||||
- improves performance of your cluster by significantly reducing load on kube-apiserver, by
|
||||
closing watches for ConfigMaps marked as immutable.
|
||||
-->
|
||||
- 保护应用,使之免受意外(不想要的)更新所带来的负面影响。
|
||||
- 通过大幅降低对 kube-apiserver 的压力提升集群性能,这是因为系统会关闭
|
||||
对已标记为不可变更的 ConfigMap 的监视操作。
|
||||
|
||||
<!--
|
||||
This feature is controlled by the `ImmutableEphemeralVolumes`
|
||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/).
|
||||
You can create an immutable ConfigMap by setting the `immutable` field to `true`.
|
||||
For example:
|
||||
-->
|
||||
此功能特性由 `ImmutableEphemeralVolumes`
|
||||
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
来控制。你可以通过将 `immutable` 字段设置为 `true` 创建不可变更的 ConfigMap。
|
||||
例如:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
...
|
||||
data:
|
||||
...
|
||||
immutable: true
|
||||
```
|
||||
|
||||
<!--
|
||||
Once a ConfigMap is marked as immutable, it is _not_ possible to revert this change
|
||||
nor to mutate the contents of the `data` or the `binaryData` field. You can
|
||||
only delete and recreate the ConfigMap. Because existing Pods maintain a mount point
|
||||
to the deleted ConfigMap, it is recommended to recreate these pods.
|
||||
-->
|
||||
一旦某 ConfigMap 被标记为不可变更,则 _无法_ 逆转这一变化,,也无法更改
|
||||
`data` 或 `binaryData` 字段的内容。你只能删除并重建 ConfigMap。
|
||||
因为现有的 Pod 会维护一个对已删除的 ConfigMap 的挂载点,建议重新创建
|
||||
这些 Pods。
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
@ -227,4 +452,3 @@ ConfigMap 最常见的用法是为同一命名空间里某 Pod 中运行的容
|
|||
* 阅读 [配置 Pod 来使用 ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)。
|
||||
* 阅读 [Twelve-Factor 应用](https://12factor.net/) 来了解将代码和配置分开的动机。
|
||||
|
||||
|
||||
|
|
|
@ -54,7 +54,6 @@ For example, if you set a `memory` request of 256 MiB for a container, and that
|
|||
a Pod scheduled to a Node with 8GiB of memory and no other Pods, then the container can try to use
|
||||
more RAM.
|
||||
-->
|
||||
|
||||
## 请求和约束 {#requests-and-limits}
|
||||
|
||||
如果 Pod 运行所在的节点具有足够的可用资源,容器可能(且可以)使用超出对应资源
|
||||
|
@ -77,7 +76,6 @@ Limits can be implemented either reactively (the system intervenes once it sees
|
|||
or by enforcement (the system prevents the container from ever exceeding the limit). Different
|
||||
runtimes can have different ways to implement the same restrictions.
|
||||
-->
|
||||
|
||||
如果你将某容器的 `memory` 约束设置为 4 GiB,kubelet (和
|
||||
{{< glossary_tooltip text="容器运行时" term_id="container-runtime" >}})
|
||||
就会确保该约束生效。
|
||||
|
@ -88,6 +86,19 @@ runtimes can have different ways to implement the same restrictions.
|
|||
约束值可以以被动方式来实现(系统会在发现违例时进行干预),或者通过强制生效的方式实现
|
||||
(系统会避免容器用量超出约束值)。不同的容器运行时采用不同方式来实现相同的限制。
|
||||
|
||||
{{< note >}}
|
||||
<!--
|
||||
If a Container specifies its own memory limit, but does not specify a memory request, Kubernetes
|
||||
automatically assigns a memory request that matches the limit. Similarly, if a Container specifies its own
|
||||
CPU limit, but does not specify a CPU request, Kubernetes automatically assigns a CPU request that matches
|
||||
the limit.
|
||||
-->
|
||||
如果某 Container 设置了自己的内存限制但未设置内存请求,Kubernetes
|
||||
自动为其设置与内存限制相匹配的请求值。类似的,如果某 Container 设置了
|
||||
CPU 限制值但未设置 CPU 请求值,则 Kubernetes 自动为其设置 CPU 请求
|
||||
并使之与 CPU 限制值匹配。
|
||||
{{< /note >}}
|
||||
|
||||
<!--
|
||||
## Resource types
|
||||
|
||||
|
@ -110,15 +121,19 @@ CPU 表达的是计算处理能力,其单位是 [Kubernetes CPUs](#meaning-of-
|
|||
如果你使用的是 Kubernetes v1.14 或更高版本,则可以指定巨页(Huge Page)资源。
|
||||
巨页是 Linux 特有的功能,节点内核在其中分配的内存块比默认页大小大得多。
|
||||
|
||||
例如,在默认页面大小为 4KiB 的系统上,您可以指定约束 `hugepages-2Mi: 80Mi`。
|
||||
例如,在默认页面大小为 4KiB 的系统上,你可以指定约束 `hugepages-2Mi: 80Mi`。
|
||||
如果容器尝试分配 40 个 2MiB 大小的巨页(总共 80 MiB ),则分配请求会失败。
|
||||
|
||||
<!--
|
||||
{{< note >}}
|
||||
<!--
|
||||
You cannot overcommit `hugepages-*` resources.
|
||||
This is different from the `memory` and `cpu` resources.
|
||||
-->
|
||||
你不能过量使用 `hugepages- * `资源。
|
||||
这与 `memory` 和 `cpu` 资源不同。
|
||||
{{< /note >}}
|
||||
|
||||
<!--
|
||||
CPU and memory are collectively referred to as *compute resources*, or just
|
||||
*resources*. Compute
|
||||
resources are measurable quantities that can be requested, allocated, and
|
||||
|
@ -127,13 +142,6 @@ consumed. They are distinct from
|
|||
[Services](/docs/concepts/services-networking/service/) are objects that can be read and modified
|
||||
through the Kubernetes API server.
|
||||
-->
|
||||
|
||||
|
||||
{{< note >}}
|
||||
您不能过量使用 `hugepages- * `资源。
|
||||
这与 `memory` 和 `cpu` 资源不同。
|
||||
{{< /note >}}
|
||||
|
||||
CPU 和内存统称为*计算资源*,或简称为*资源*。
|
||||
计算资源的数量是可测量的,可以被请求、被分配、被消耗。
|
||||
它们与 [API 资源](/zh/docs/concepts/overview/kubernetes-api/) 不同。
|
||||
|
@ -191,8 +199,9 @@ be preferred.
|
|||
CPU is always requested as an absolute quantity, never as a relative quantity;
|
||||
0.1 is the same amount of CPU on a single-core, dual-core, or 48-core machine.
|
||||
-->
|
||||
## Kubernetes 中的资源单位 {#resource-units-in-kubernetes}
|
||||
|
||||
## CPU 的含义 {#meaning-of-cpu}
|
||||
### CPU 的含义 {#meaning-of-cpu}
|
||||
|
||||
CPU 资源的约束和请求以 *cpu* 为单位。
|
||||
|
||||
|
@ -222,7 +231,7 @@ Mi, Ki. For example, the following represent roughly the same value:
|
|||
E、P、T、G、M、K。你也可以使用对应的 2 的幂数:Ei、Pi、Ti、Gi、Mi、Ki。
|
||||
例如,以下表达式所代表的是大致相同的值:
|
||||
|
||||
```shell
|
||||
```
|
||||
128974848、129e6、129M、123Mi
|
||||
```
|
||||
|
||||
|
@ -233,7 +242,6 @@ and 64MiB (2<sup>26</sup> bytes) of memory. Each Container has a limit of 0.5
|
|||
cpu and 128MiB of memory. You can say the Pod has a request of 0.5 cpu and 128
|
||||
MiB of memory, and a limit of 1 cpu and 256MiB of memory.
|
||||
-->
|
||||
|
||||
下面是个例子。
|
||||
|
||||
以下 Pod 有两个 Container。每个 Container 的请求为 0.25 cpu 和 64MiB(2<sup>26</sup> 字节)内存,
|
||||
|
@ -272,6 +280,7 @@ spec:
|
|||
|
||||
<!--
|
||||
## How Pods with resource requests are scheduled
|
||||
|
||||
When you create a Pod, the Kubernetes scheduler selects a node for the Pod to
|
||||
run on. Each node has a maximum capacity for each of the resource types: the
|
||||
amount of CPU and memory it can provide for Pods. The scheduler ensures that,
|
||||
|
@ -282,7 +291,6 @@ a Pod on a node if the capacity check fails. This protects against a resource
|
|||
shortage on a node when resource usage later increases, for example, during a
|
||||
daily peak in request rate.
|
||||
-->
|
||||
|
||||
## 带资源请求的 Pod 如何调度
|
||||
|
||||
当你创建一个 Pod 时,Kubernetes 调度程序将为 Pod 选择一个节点。
|
||||
|
@ -300,7 +308,6 @@ to the container runtime.
|
|||
|
||||
When using Docker:
|
||||
-->
|
||||
|
||||
## 带资源约束的 Pod 如何运行
|
||||
|
||||
当 kubelet 启动 Pod 中的 Container 时,它会将 CPU 和内存约束信息传递给容器运行时。
|
||||
|
@ -318,9 +325,7 @@ When using Docker:
|
|||
multiplied by 100. The resulting value is the total amount of CPU time that a container can use
|
||||
every 100ms. A container cannot use more than its share of CPU time during this interval.
|
||||
|
||||
{{< note >}}
|
||||
The default quota period is 100ms. The minimum resolution of CPU quota is 1ms.
|
||||
{{</ note >}}
|
||||
|
||||
- The `spec.containers[].resources.limits.memory` is converted to an integer, and
|
||||
used as the value of the
|
||||
|
@ -337,7 +342,7 @@ When using Docker:
|
|||
时间不会超过它被分配的时间。
|
||||
|
||||
{{< note >}}
|
||||
默认的配额(quota)周期为 100 毫秒。 CPU配额的最小精度为 1 毫秒。
|
||||
默认的配额(Quota)周期为 100 毫秒。CPU 配额的最小精度为 1 毫秒。
|
||||
{{</ note >}}
|
||||
|
||||
- `spec.containers[].resources.limits.memory` 被转换为整数值,作为 `docker run` 命令中的
|
||||
|
@ -359,7 +364,6 @@ To determine whether a Container cannot be scheduled or is being killed due to
|
|||
resource limits, see the
|
||||
[Troubleshooting](#troubleshooting) section.
|
||||
-->
|
||||
|
||||
如果 Container 超过其内存限制,则可能会被终止。如果容器可重新启动,则与所有其他类型的
|
||||
运行时失效一样,kubelet 将重新启动容器。
|
||||
|
||||
|
@ -380,7 +384,6 @@ are available in your cluster, then Pod resource usage can be retrieved either
|
|||
from the [Metrics API](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#the-metrics-api)
|
||||
directly or from your monitoring tools.
|
||||
-->
|
||||
|
||||
## 监控计算和内存资源用量
|
||||
|
||||
Pod 的资源使用情况是作为 Pod 状态的一部分来报告的。
|
||||
|
@ -422,11 +425,9 @@ The kubelet also uses this kind of storage to hold
|
|||
[node-level container logs](/docs/concepts/cluster-administration/logging/#logging-at-the-node-level),
|
||||
container images, and the writable layers of running containers.
|
||||
|
||||
{{< caution >}}
|
||||
If a node fails, the data in its ephemeral storage can be lost.
|
||||
Your applications cannot expect any performance SLAs (disk IOPS for example)
|
||||
from local ephemeral storage.
|
||||
{{< /caution >}}
|
||||
|
||||
As a beta feature, Kubernetes lets you track, reserve and limit the amount
|
||||
of ephemeral local storage a Pod can consume.
|
||||
|
@ -458,7 +459,6 @@ The kubelet also writes
|
|||
[node-level container logs](/docs/concepts/cluster-administration/logging/#logging-at-the-node-level)
|
||||
and treats these similarly to ephemeral local storage.
|
||||
-->
|
||||
|
||||
### 本地临时性存储的配置
|
||||
|
||||
Kubernetes 有两种方式支持节点上配置本地临时性存储:
|
||||
|
@ -555,7 +555,9 @@ than as local ephemeral storage.
|
|||
|
||||
kubelet 能够度量其本地存储的用量。实现度量机制的前提是:
|
||||
|
||||
- `LocalStorageCapacityIsolation` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)被启用(默认状态),并且
|
||||
- `LocalStorageCapacityIsolation`
|
||||
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
|
||||
被启用(默认状态),并且
|
||||
- 你已经对节点进行了配置,使之使用所支持的本地临时性储存配置方式之一
|
||||
|
||||
如果你的节点配置不同于以上预期,kubelet 就无法对临时性本地存储的资源约束实施限制。
|
||||
|
@ -581,7 +583,6 @@ Mi, Ki. For example, the following represent roughly the same value:
|
|||
128974848, 129e6, 129M, 123Mi
|
||||
```
|
||||
-->
|
||||
|
||||
### 为本地临时性存储设置请求和约束值
|
||||
|
||||
你可以使用 _ephemeral-storage_ 来管理本地临时性存储。
|
||||
|
@ -595,7 +596,7 @@ Pod 中的每个 Container 可以设置以下属性:
|
|||
你也可以使用对应的 2 的幂级数来表达:Ei、Pi、Ti、Gi、Mi、Ki。
|
||||
例如,下面的表达式所表达的大致是同一个值:
|
||||
|
||||
```shell
|
||||
```
|
||||
128974848, 129e6, 129M, 123Mi
|
||||
```
|
||||
|
||||
|
@ -639,7 +640,7 @@ run on. Each node has a maximum amount of local ephemeral storage it can provide
|
|||
The scheduler ensures that the sum of the resource requests of the scheduled Containers is less than the capacity of the node.
|
||||
-->
|
||||
|
||||
### 带 ephemeral-storage 的 Pods 的调度行为
|
||||
### 带临时性存储的 Pods 的调度行为
|
||||
|
||||
当你创建一个 Pod 时,Kubernetes 调度器会为 Pod 选择一个节点来运行之。
|
||||
每个节点都有一个本地临时性存储的上限,是其可提供给 Pods 使用的总量。
|
||||
|
@ -670,9 +671,7 @@ summing the limits for the containers in that Pod. In this case, if the sum of
|
|||
the local ephemeral storage usage from all containers and also the Pod's `emptyDir`
|
||||
volumes exceeds the overall Pod storage limit, then the kubelet also marks the Pod
|
||||
for eviction.
|
||||
|
||||
-->
|
||||
|
||||
### 临时性存储消耗的管理 {#resource-emphemeralstorage-consumption}
|
||||
|
||||
如果 kubelet 将本地临时性存储作为资源来管理,则 kubelet 会度量以下各处的存储用量:
|
||||
|
@ -736,7 +735,6 @@ still open, then the inode for the deleted file stays until you close
|
|||
that file but the kubelet does not categorize the space as in use.
|
||||
{{< /note >}}
|
||||
-->
|
||||
|
||||
kubelet 支持使用不同方式来度量 Pod 的存储用量:
|
||||
|
||||
{{< tabs name="resource-emphemeralstorage-measurement" >}}
|
||||
|
@ -795,7 +793,6 @@ If a file is created and deleted, but has an open file descriptor,
|
|||
it continues to consume space. Quota tracking records that space accurately
|
||||
whereas directory scans overlook the storage used by deleted files.
|
||||
-->
|
||||
|
||||
Kubernetes 所使用的项目 ID 始于 `1048576`。
|
||||
所使用的 IDs 会注册在 `/etc/projects` 和 `/etc/projid` 文件中。
|
||||
如果该范围中的项目 ID 已经在系统中被用于其他目的,则已占用的项目 IDs
|
||||
|
@ -881,14 +878,13 @@ See [Device
|
|||
Plugin](/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)
|
||||
for how to advertise device plugin managed resources on each node.
|
||||
-->
|
||||
### 管理扩展资源 {#managing-extended-resources}
|
||||
|
||||
### 管理扩展资源
|
||||
|
||||
#### 节点级扩展资源
|
||||
#### 节点级扩展资源 {#node-level-extended-resources}
|
||||
|
||||
节点级扩展资源绑定到节点。
|
||||
|
||||
##### 设备插件管理的资源
|
||||
##### 设备插件管理的资源 {#device-plugin-managed-resources}
|
||||
|
||||
有关如何颁布在各节点上由设备插件所管理的资源,请参阅
|
||||
[设备插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)。
|
||||
|
@ -905,8 +901,7 @@ asynchronously by the kubelet. Note that because the scheduler uses the node
|
|||
delay between patching the node capacity with a new resource and the first Pod
|
||||
that requests the resource to be scheduled on that node.
|
||||
-->
|
||||
|
||||
##### 其他资源
|
||||
##### 其他资源 {#other-resources}
|
||||
|
||||
为了颁布新的节点级扩展资源,集群操作员可以向 API 服务器提交 `PATCH` HTTP 请求,
|
||||
以在集群中节点的 `status.capacity` 中为其配置可用数量。
|
||||
|
@ -943,7 +938,6 @@ in the patch path. The operation path value in JSON-Patch is interpreted as a
|
|||
JSON-Pointer. For more details, see
|
||||
{{< /note >}}
|
||||
-->
|
||||
|
||||
{{< note >}}
|
||||
在前面的请求中,`~1` 是在 patch 路径中对字符 `/` 的编码。
|
||||
JSON-Patch 中的操作路径的值被视为 JSON-Pointer 类型。
|
||||
|
@ -961,13 +955,13 @@ You can specify the extended resources that are handled by scheduler extenders
|
|||
in [scheduler policy
|
||||
configuration](https://github.com/kubernetes/kubernetes/blob/release-1.10/pkg/scheduler/api/v1/types.go#L31).
|
||||
-->
|
||||
|
||||
#### 集群层面的扩展资源
|
||||
#### 集群层面的扩展资源 {#cluster-level-extended-resources}
|
||||
|
||||
集群层面的扩展资源并不绑定到具体节点。
|
||||
它们通常由调度器扩展程序(Scheduler Extenders)管理,这些程序处理资源消耗和资源配额。
|
||||
|
||||
您可以在[调度器策略配置](https://github.com/kubernetes/kubernetes/blob/release-1.10/pkg/scheduler/api/v1/types.go#L31)中指定由调度器扩展程序处理的扩展资源。
|
||||
你可以在[调度器策略配置](https://github.com/kubernetes/kubernetes/blob/release-1.10/pkg/scheduler/api/v1/types.go#L31)
|
||||
中指定由调度器扩展程序处理的扩展资源。
|
||||
|
||||
<!--
|
||||
**Example:**
|
||||
|
@ -981,7 +975,6 @@ extender.
|
|||
- The `ignoredByScheduler` field specifies that the scheduler does not check
|
||||
the "example.com/foo" resource in its `PodFitsResources` predicate.
|
||||
-->
|
||||
|
||||
**示例:**
|
||||
|
||||
下面的调度器策略配置标明集群层扩展资源 "example.com/foo" 由调度器扩展程序处理。
|
||||
|
@ -1020,8 +1013,7 @@ The API server restricts quantities of extended resources to whole numbers.
|
|||
Examples of _valid_ quantities are `3`, `3000m` and `3Ki`. Examples of
|
||||
_invalid_ quantities are `0.5` and `1500m`.
|
||||
-->
|
||||
|
||||
### 使用扩展资源
|
||||
### 使用扩展资源 {#consuming-extended-resources}
|
||||
|
||||
就像 CPU 和内存一样,用户可以在 Pod 的规约中使用扩展资源。
|
||||
调度器负责资源的核算,确保同时分配给 Pod 的资源总量不会超过可用数量。
|
||||
|
@ -1032,7 +1024,6 @@ Extended resources replace Opaque Integer Resources.
|
|||
Users can use any domain name prefix other than `kubernetes.io` which is reserved.
|
||||
{{< /note >}}
|
||||
-->
|
||||
|
||||
{{< note >}}
|
||||
扩展资源取代了非透明整数资源(Opaque Integer Resources,OIR)。
|
||||
用户可以使用 `kubernetes.io` (保留)以外的任何域名前缀。
|
||||
|
@ -1047,7 +1038,6 @@ Extended resources cannot be overcommitted, so request and limit
|
|||
must be equal if both are present in a container spec.
|
||||
{{< /note >}}
|
||||
-->
|
||||
|
||||
要在 Pod 中使用扩展资源,请在容器规范的 `spec.containers[].resources.limits`
|
||||
映射中包含资源名称作为键。
|
||||
|
||||
|
@ -1064,7 +1054,6 @@ as long as the resource request cannot be satisfied.
|
|||
|
||||
The Pod below requests 2 CPUs and 1 "example.com/foo" (an extended resource).
|
||||
-->
|
||||
|
||||
仅当所有资源请求(包括 CPU、内存和任何扩展资源)都被满足时,Pod 才能被调度。
|
||||
在资源请求无法满足时,Pod 会保持在 `PENDING` 状态。
|
||||
|
||||
|
@ -1098,7 +1087,6 @@ If the scheduler cannot find any node where a Pod can fit, the Pod remains
|
|||
unscheduled until a place can be found. An event is produced each time the
|
||||
scheduler fails to find a place for the Pod, like this:
|
||||
-->
|
||||
|
||||
## 疑难解答
|
||||
|
||||
### 我的 Pod 处于悬决状态且事件信息显示 failedScheduling
|
||||
|
@ -1139,7 +1127,7 @@ You can check node capacities and amounts allocated with the
|
|||
- 检查 Pod 所需的资源是否超出所有节点的资源容量。例如,如果所有节点的容量都是`cpu:1`,
|
||||
那么一个请求为 `cpu: 1.1` 的 Pod 永远不会被调度。
|
||||
|
||||
您可以使用 `kubectl describe nodes` 命令检查节点容量和已分配的资源数量。 例如:
|
||||
你可以使用 `kubectl describe nodes` 命令检查节点容量和已分配的资源数量。 例如:
|
||||
|
||||
```shell
|
||||
kubectl describe nodes e2e-test-node-pool-4lw4
|
||||
|
@ -1187,17 +1175,17 @@ The [resource quota](/docs/concepts/policy/resource-quotas/) feature can be conf
|
|||
to limit the total amount of resources that can be consumed. If used in conjunction
|
||||
with namespaces, it can prevent one team from hogging all the resources.
|
||||
-->
|
||||
|
||||
在上面的输出中,你可以看到如果 Pod 请求超过 1120m CPU 或者 6.23Gi 内存,节点将无法满足。
|
||||
|
||||
通过查看 `Pods` 部分,您将看到哪些 Pod 占用了节点上的资源。
|
||||
通过查看 `Pods` 部分,你将看到哪些 Pod 占用了节点上的资源。
|
||||
|
||||
可供 Pod 使用的资源量小于节点容量,因为系统守护程序也会使用一部分可用资源。
|
||||
[NodeStatus](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#nodestatus-v1-core)
|
||||
的 `allocatable` 字段给出了可用于 Pod 的资源量。
|
||||
有关更多信息,请参阅 [节点可分配资源](https://git.k8s.io/community/contributors/design-proposals/node-allocatable.md)。
|
||||
|
||||
可以配置 [资源配额](/zh/docs/concepts/policy/resource-quotas/) 功能特性以限制可以使用的资源总量。
|
||||
可以配置 [资源配额](/zh/docs/concepts/policy/resource-quotas/) 功能特性
|
||||
以限制可以使用的资源总量。
|
||||
如果与名字空间配合一起使用,就可以防止一个团队占用所有资源。
|
||||
|
||||
<!--
|
||||
|
@ -1260,7 +1248,6 @@ Container in the Pod was terminated and restarted five times.
|
|||
You can call `kubectl get pod` with the `-o go-template=...` option to fetch the status
|
||||
of previously terminated Containers:
|
||||
-->
|
||||
|
||||
在上面的例子中,`Restart Count: 5` 意味着 Pod 中的 `simmemleak` 容器被终止并重启了五次。
|
||||
|
||||
你可以使用 `kubectl get pod` 命令加上 `-o go-template=...` 选项来获取之前终止容器的状态。
|
||||
|
@ -1296,8 +1283,8 @@ You can see that the Container was terminated because of `reason:OOM Killed`, wh
|
|||
* Read about [project quotas](http://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/xfs-quotas.html) in XFS
|
||||
-->
|
||||
|
||||
* 获取将 [分配内存资源给容器和 Pod ](/zh/docs/tasks/configure-pod-container/assign-memory-resource/) 的实践经验
|
||||
* 获取将 [分配 CPU 资源给容器和 Pod ](/zh/docs/tasks/configure-pod-container/assign-cpu-resource/) 的实践经验
|
||||
* 获取[分配内存资源给容器和 Pod ](/zh/docs/tasks/configure-pod-container/assign-memory-resource/) 的实践经验
|
||||
* 获取[分配 CPU 资源给容器和 Pod ](/zh/docs/tasks/configure-pod-container/assign-cpu-resource/) 的实践经验
|
||||
* 关于请求和约束之间的区别,细节信息可参见[资源服务质量](https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md)
|
||||
* 阅读 API 参考文档中 [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) 部分。
|
||||
* 阅读 API 参考文档中 [ResourceRequirements](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcerequirements-v1-core) 部分。
|
||||
|
|
|
@ -199,7 +199,7 @@ Deployment 描述了对象的期望状态,并且如果对该规范的更改被
|
|||
## 容器镜像
|
||||
|
||||
<!--
|
||||
The [imagePullPolicy](/docs/concepts/containers/images/#updating-images) and the tag of the image affect when the [kubelet](/docs/admin/kubelet/) attempts to pull the specified image.
|
||||
The [imagePullPolicy](/docs/concepts/containers/images/#updating-images) and the tag of the image affect when the [kubelet](/docs/reference/command-line-tools-reference/kubelet/) attempts to pull the specified image.
|
||||
-->
|
||||
[imagePullPolicy](/zh/docs/concepts/containers/images/#updating-images)和镜像标签会影响
|
||||
[kubelet](/zh/docs/reference/command-line-tools-reference/kubelet/) 何时尝试拉取指定的镜像。
|
||||
|
|
Loading…
Reference in New Issue