Merge branch 'master' into release-1.8
This commit is contained in:
+2
-2
@@ -15,7 +15,7 @@ toc:
|
|||||||
- docs/tasks/configure-pod-container/assign-cpu-resource.md
|
- docs/tasks/configure-pod-container/assign-cpu-resource.md
|
||||||
- docs/tasks/configure-pod-container/quality-service-pod.md
|
- docs/tasks/configure-pod-container/quality-service-pod.md
|
||||||
- docs/tasks/configure-pod-container/assign-cpu-ram-container.md
|
- docs/tasks/configure-pod-container/assign-cpu-ram-container.md
|
||||||
- docs/tasks/configure-pod-container/opaque-integer-resource.md
|
- docs/tasks/configure-pod-container/extended-resource.md
|
||||||
- docs/tasks/configure-pod-container/configure-volume-storage.md
|
- docs/tasks/configure-pod-container/configure-volume-storage.md
|
||||||
- docs/tasks/configure-pod-container/configure-persistent-volume-storage.md
|
- docs/tasks/configure-pod-container/configure-persistent-volume-storage.md
|
||||||
- docs/tasks/configure-pod-container/configure-projected-volume-storage.md
|
- docs/tasks/configure-pod-container/configure-projected-volume-storage.md
|
||||||
@@ -128,7 +128,7 @@ toc:
|
|||||||
- docs/tasks/administer-cluster/quota-memory-cpu-namespace.md
|
- docs/tasks/administer-cluster/quota-memory-cpu-namespace.md
|
||||||
- docs/tasks/administer-cluster/quota-pod-namespace.md
|
- docs/tasks/administer-cluster/quota-pod-namespace.md
|
||||||
- docs/tasks/administer-cluster/quota-api-object.md
|
- docs/tasks/administer-cluster/quota-api-object.md
|
||||||
- docs/tasks/administer-cluster/opaque-integer-resource-node.md
|
- docs/tasks/administer-cluster/extended-resource-node.md
|
||||||
- docs/tasks/administer-cluster/cpu-management-policies.md
|
- docs/tasks/administer-cluster/cpu-management-policies.md
|
||||||
- docs/tasks/administer-cluster/access-cluster-api.md
|
- docs/tasks/administer-cluster/access-cluster-api.md
|
||||||
- docs/tasks/administer-cluster/access-cluster-services.md
|
- docs/tasks/administer-cluster/access-cluster-services.md
|
||||||
|
|||||||
@@ -152,6 +152,11 @@ file:
|
|||||||
values are `v1` or `v2`. Where no value is provided automatic detection will
|
values are `v1` or `v2`. Where no value is provided automatic detection will
|
||||||
select the highest supported version exposed by the underlying OpenStack
|
select the highest supported version exposed by the underlying OpenStack
|
||||||
cloud.
|
cloud.
|
||||||
|
* `use-octavia` (Optional): Used to determine whether to look for and use an
|
||||||
|
Octavia LBaaS V2 service catalog endpoint. Valid values are `true` or `false`.
|
||||||
|
Where `true` is specified and an Octaiva LBaaS V2 entry can not be found, the
|
||||||
|
provider will fall back and attempt to find a Neutron LBaaS V2 endpoint
|
||||||
|
instead. The default value is `false`.
|
||||||
* `subnet-id` (Optional): Used to specify the id of the subnet you want to
|
* `subnet-id` (Optional): Used to specify the id of the subnet you want to
|
||||||
create your loadbalancer on. Can be found at Network > Networks. Click on the
|
create your loadbalancer on. Can be found at Network > Networks. Click on the
|
||||||
respective network to get its subnets.
|
respective network to get its subnets.
|
||||||
@@ -196,6 +201,12 @@ and should appear in the `[BlockStorage]` section of the `cloud.conf` file:
|
|||||||
provided by Cinder. The default value of `false` results in the discovery of
|
provided by Cinder. The default value of `false` results in the discovery of
|
||||||
the device path based on its serial number and `/dev/disk/by-id` mapping and is
|
the device path based on its serial number and `/dev/disk/by-id` mapping and is
|
||||||
the recommended approach.
|
the recommended approach.
|
||||||
|
* `ignore-volume-az` (Optional): Used to influence availability zone use when
|
||||||
|
attaching Cinder volumes. When Nova and Cinder have different availability
|
||||||
|
zones, this should be set to `true`. This is most commonly the case where
|
||||||
|
there are many Nova availability zones but only one Cinder availability zone.
|
||||||
|
The default value is `false` to preserve the behavior used in earlier
|
||||||
|
releases, but may change in the future.
|
||||||
|
|
||||||
If deploying Kubernetes versions <= 1.8 on an OpenStack deployment that uses
|
If deploying Kubernetes versions <= 1.8 on an OpenStack deployment that uses
|
||||||
paths rather than ports to differentiate between endpoints it may be necessary
|
paths rather than ports to differentiate between endpoints it may be necessary
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ When a pod creation request occurs, the system does the following:
|
|||||||
the pod _without_ any injected resources from the `PodPreset`.
|
the pod _without_ any injected resources from the `PodPreset`.
|
||||||
1. Annotate the resulting modified Pod spec to indicate that it has been
|
1. Annotate the resulting modified Pod spec to indicate that it has been
|
||||||
modified by a `PodPreset`. The annotation is of the form
|
modified by a `PodPreset`. The annotation is of the form
|
||||||
`podpreset.admission.kubernetes.io/podpreset-<pod-preset name>": "<resource version>"`.
|
`podpreset.admission.kubernetes.io/podpreset-<pod-preset name>: "<resource version>"`.
|
||||||
|
|
||||||
Each Pod can be matched zero or more Pod Presets; and each `PodPreset` can be
|
Each Pod can be matched zero or more Pod Presets; and each `PodPreset` can be
|
||||||
applied to zero or more pods. When a `PodPreset` is applied to one or more
|
applied to zero or more pods. When a `PodPreset` is applied to one or more
|
||||||
|
|||||||
+26
-27
@@ -1,15 +1,15 @@
|
|||||||
---
|
---
|
||||||
title: Advertise Opaque Integer Resources for a Node
|
title: Advertise Extended Resources for a Node
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
{% capture overview %}
|
{% capture overview %}
|
||||||
|
|
||||||
This page shows how to specify opaque integer resources for a Node.
|
This page shows how to specify extended resources for a Node.
|
||||||
Opaque integer resources allow cluster administrators to advertise node-level
|
Extended resources allow cluster administrators to advertise node-level
|
||||||
resources that would otherwise be unknown to Kubernetes.
|
resources that would otherwise be unknown to Kubernetes.
|
||||||
|
|
||||||
{% include feature-state-deprecated.md %}
|
{% include feature-state-stable.md %}
|
||||||
|
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
@@ -31,9 +31,9 @@ kubectl get nodes
|
|||||||
|
|
||||||
Choose one of your Nodes to use for this exercise.
|
Choose one of your Nodes to use for this exercise.
|
||||||
|
|
||||||
## Advertise a new opaque integer resource on one of your Nodes
|
## Advertise a new extended resource on one of your Nodes
|
||||||
|
|
||||||
To advertise a new opaque integer resource on a Node, send an HTTP PATCH request to
|
To advertise a new extended resource on a Node, send an HTTP PATCH request to
|
||||||
the Kubernetes API server. For example, suppose one of your Nodes has four dongles
|
the Kubernetes API server. For example, suppose one of your Nodes has four dongles
|
||||||
attached. Here's an example of a PATCH request that advertises four dongle resources
|
attached. Here's an example of a PATCH request that advertises four dongle resources
|
||||||
for your Node.
|
for your Node.
|
||||||
@@ -47,7 +47,7 @@ Host: k8s-master:8080
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"op": "add",
|
"op": "add",
|
||||||
"path": "/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-dongle",
|
"path": "/status/capacity/example.com~1dongle",
|
||||||
"value": "4"
|
"value": "4"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -69,7 +69,7 @@ Replace `<your-node-name>` with the name of your Node:
|
|||||||
```shell
|
```shell
|
||||||
curl --header "Content-Type: application/json-patch+json" \
|
curl --header "Content-Type: application/json-patch+json" \
|
||||||
--request PATCH \
|
--request PATCH \
|
||||||
--data '[{"op": "add", "path": "/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-dongle", "value": "4"}]' \
|
--data '[{"op": "add", "path": "/status/capacity/example.com~1dongle", "value": "4"}]' \
|
||||||
http://localhost:8001/api/v1/nodes/<your-node-name>/status
|
http://localhost:8001/api/v1/nodes/<your-node-name>/status
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ The output shows that the Node has a capacity of 4 dongles:
|
|||||||
"alpha.kubernetes.io/nvidia-gpu": "0",
|
"alpha.kubernetes.io/nvidia-gpu": "0",
|
||||||
"cpu": "2",
|
"cpu": "2",
|
||||||
"memory": "2049008Ki",
|
"memory": "2049008Ki",
|
||||||
"pod.alpha.kubernetes.io/opaque-int-resource-dongle": "4",
|
"example.com/dongle": "4",
|
||||||
```
|
```
|
||||||
|
|
||||||
Describe your Node:
|
Describe your Node:
|
||||||
@@ -98,53 +98,52 @@ Once again, the output shows the dongle resource:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Capacity:
|
Capacity:
|
||||||
alpha.kubernetes.io/nvidia-gpu: 0
|
alpha.kubernetes.io/nvidia-gpu: 0
|
||||||
cpu: 2
|
cpu: 2
|
||||||
memory: 2049008Ki
|
memory: 2049008Ki
|
||||||
pod.alpha.kubernetes.io/opaque-int-resource-dongle: 4
|
example.com/dongle: 4
|
||||||
```
|
```
|
||||||
|
|
||||||
Now, application developers can create Pods that request a certain
|
Now, application developers can create Pods that request a certain
|
||||||
number of dongles. See
|
number of dongles. See
|
||||||
[Assign Opaque Integer Resources to a Container](/docs/tasks/configure-pod-container/opaque-integer-resource/).
|
[Assign Extended Resources to a Container](/docs/tasks/configure-pod-container/extended-resource/).
|
||||||
|
|
||||||
## Discussion
|
## Discussion
|
||||||
|
|
||||||
Opaque integer resources are similar to memory and CPU resources. For example,
|
Extended resources are similar to memory and CPU resources. For example,
|
||||||
just as a Node has a certain amount of memory and CPU to be shared by all components
|
just as a Node has a certain amount of memory and CPU to be shared by all components
|
||||||
running on the Node, it can have a certain number of dongles to be shared
|
running on the Node, it can have a certain number of dongles to be shared
|
||||||
by all components running on the Node. And just as application developers
|
by all components running on the Node. And just as application developers
|
||||||
can create Pods that request a certain amount of memory and CPU, they can
|
can create Pods that request a certain amount of memory and CPU, they can
|
||||||
create Pods that request a certain number of dongles.
|
create Pods that request a certain number of dongles.
|
||||||
|
|
||||||
Opaque integer resources are called opaque because Kubernetes does not
|
Extended resources are opaque to Kubernetes; Kubernetes does not
|
||||||
know anything about what they are. Kubernetes knows only that a Node
|
know anything about what they are. Kubernetes knows only that a Node
|
||||||
has a certain number of them. They are called integer resources because
|
has a certain number of them. Extended resources must be advertised in integer
|
||||||
they must be advertised in integer amounts. For example, a Node can advertise
|
amounts. For example, a Node can advertise four dongles, but not 4.5 dongles.
|
||||||
four dongles, but not 4.5 dongles.
|
|
||||||
|
|
||||||
### Storage example
|
### Storage example
|
||||||
|
|
||||||
Suppose a Node has 800 GiB of a special kind of disk storage. You could
|
Suppose a Node has 800 GiB of a special kind of disk storage. You could
|
||||||
create a name for the special storage, say opaque-int-resource-special-storage.
|
create a name for the special storage, say example.com/special-storage.
|
||||||
Then you could advertise it in chunks of a certain size, say 100 GiB. In that case,
|
Then you could advertise it in chunks of a certain size, say 100 GiB. In that case,
|
||||||
your Node would advertise that it has eight resources of type
|
your Node would advertise that it has eight resources of type
|
||||||
opaque-int-resource-special-storage.
|
example.com/special-storage.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Capacity:
|
Capacity:
|
||||||
...
|
...
|
||||||
pod.alpha.kubernetes.io/opaque-int-resource-special-storage: 8
|
example.com/special-storage: 8
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to allow arbitrary requests for special storage, you
|
If you want to allow arbitrary requests for special storage, you
|
||||||
could advertise special storage in chunks of size 1 byte. In that case, you would advertise
|
could advertise special storage in chunks of size 1 byte. In that case, you would advertise
|
||||||
800Gi resources of type opaque-int-resource-special-storage.
|
800Gi resources of type example.com/special-storage.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Capacity:
|
Capacity:
|
||||||
...
|
...
|
||||||
pod.alpha.kubernetes.io/opaque-int-resource-special-storage: 800Gi
|
example.com/special-storage: 800Gi
|
||||||
```
|
```
|
||||||
|
|
||||||
Then a Container could request any number of bytes of special storage, up to 800Gi.
|
Then a Container could request any number of bytes of special storage, up to 800Gi.
|
||||||
@@ -162,7 +161,7 @@ Host: k8s-master:8080
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"op": "remove",
|
"op": "remove",
|
||||||
"path": "/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-dongle",
|
"path": "/status/capacity/example.com~1dongle",
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
@@ -179,7 +178,7 @@ Replace `<your-node-name>` with the name of your Node:
|
|||||||
```shell
|
```shell
|
||||||
curl --header "Content-Type: application/json-patch+json" \
|
curl --header "Content-Type: application/json-patch+json" \
|
||||||
--request PATCH \
|
--request PATCH \
|
||||||
--data '[{"op": "remove", "path": "/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-dongle"}]' \
|
--data '[{"op": "remove", "path": "/status/capacity/example.com~1dongle"}]' \
|
||||||
http://localhost:8001/api/v1/nodes/<your-node-name>/status
|
http://localhost:8001/api/v1/nodes/<your-node-name>/status
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -196,7 +195,7 @@ kubectl describe node <your-node-name> | grep dongle
|
|||||||
|
|
||||||
### For application developers
|
### For application developers
|
||||||
|
|
||||||
* [Assign Opaque Integer Resources to a Container](/docs/tasks/configure-pod-container/opaque-integer-resource/)
|
* [Assign Extended Resources to a Container](/docs/tasks/configure-pod-container/extended-resource/)
|
||||||
|
|
||||||
### For cluster administrators
|
### For cluster administrators
|
||||||
|
|
||||||
@@ -19,8 +19,8 @@ nodes become unstable.
|
|||||||
## Eviction Policy
|
## Eviction Policy
|
||||||
|
|
||||||
The `kubelet` can proactively monitor for and prevent total starvation of a
|
The `kubelet` can proactively monitor for and prevent total starvation of a
|
||||||
compute resource. In those cases, the `kubelet` can reclaim the starved
|
compute resource. In those cases, the `kubelet` can reclaim the starved
|
||||||
resource by proactively failing one or more Pods. When the `kubelet` fails
|
resource by proactively failing one or more Pods. When the `kubelet` fails
|
||||||
a Pod, it terminates all of its containers and transitions its `PodPhase` to `Failed`.
|
a Pod, it terminates all of its containers and transitions its `PodPhase` to `Failed`.
|
||||||
|
|
||||||
### Eviction Signals
|
### Eviction Signals
|
||||||
@@ -42,11 +42,11 @@ The percentage based value is calculated relative to the total capacity
|
|||||||
associated with each signal.
|
associated with each signal.
|
||||||
|
|
||||||
The value for `memory.available` is derived from the cgroupfs instead of tools
|
The value for `memory.available` is derived from the cgroupfs instead of tools
|
||||||
like `free -m`. This is important because `free -m` does not work in a
|
like `free -m`. This is important because `free -m` does not work in a
|
||||||
container, and if users use the [node
|
container, and if users use the [node
|
||||||
allocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable) feature, out of resource decisions
|
allocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable) feature, out of resource decisions
|
||||||
are made local to the end user Pod part of the cgroup hierarchy as well as the
|
are made local to the end user Pod part of the cgroup hierarchy as well as the
|
||||||
root node. This
|
root node. This
|
||||||
[script](/docs/tasks/administer-cluster/out-of-resource/memory-available.sh)
|
[script](/docs/tasks/administer-cluster/out-of-resource/memory-available.sh)
|
||||||
reproduces the same set of steps that the `kubelet` performs to calculate
|
reproduces the same set of steps that the `kubelet` performs to calculate
|
||||||
`memory.available`. The `kubelet` excludes inactive_file (i.e. # of bytes of
|
`memory.available`. The `kubelet` excludes inactive_file (i.e. # of bytes of
|
||||||
@@ -60,7 +60,7 @@ memory is reclaimable under pressure.
|
|||||||
container writable layers.
|
container writable layers.
|
||||||
|
|
||||||
`imagefs` is optional. `kubelet` auto-discovers these filesystems using
|
`imagefs` is optional. `kubelet` auto-discovers these filesystems using
|
||||||
cAdvisor. `kubelet` does not care about any other filesystems. Any other types
|
cAdvisor. `kubelet` does not care about any other filesystems. Any other types
|
||||||
of configurations are not currently supported by the kubelet. For example, it is
|
of configurations are not currently supported by the kubelet. For example, it is
|
||||||
*not OK* to store volumes and logs in a dedicated `filesystem`.
|
*not OK* to store volumes and logs in a dedicated `filesystem`.
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ Each threshold has the following form:
|
|||||||
|
|
||||||
where:
|
where:
|
||||||
|
|
||||||
* `eviction-signal` is a eviction signal token as defined in the previous table.
|
* `eviction-signal` is an eviction signal token as defined in the previous table.
|
||||||
* `operator` is the desired relational operator, such as `<` (less than).
|
* `operator` is the desired relational operator, such as `<` (less than).
|
||||||
* `quantity` is the eviction threshhold quantity, such as `1Gi`. These tokens must
|
* `quantity` is the eviction threshhold quantity, such as `1Gi`. These tokens must
|
||||||
match the quantity representation used by Kubernetes. An eviction threshold can also
|
match the quantity representation used by Kubernetes. An eviction threshold can also
|
||||||
@@ -208,7 +208,7 @@ relative to their request for that resource are killed first. If no Pod
|
|||||||
has exceeded its request, the strategy targets the largest consumer of the
|
has exceeded its request, the strategy targets the largest consumer of the
|
||||||
starved resource.
|
starved resource.
|
||||||
* `Guaranteed` Pods are guaranteed only when requests and limits are specified
|
* `Guaranteed` Pods are guaranteed only when requests and limits are specified
|
||||||
for all the containers and they are equal A `Guaranteed` Pod is guaranteed to
|
for all the containers and they are equal. A `Guaranteed` Pod is guaranteed to
|
||||||
never be evicted because of another Pod's resource consumption. If a system
|
never be evicted because of another Pod's resource consumption. If a system
|
||||||
daemon (such as `kubelet`, `docker`, and `journald`) is consuming more resources
|
daemon (such as `kubelet`, `docker`, and `journald`) is consuming more resources
|
||||||
than were reserved via `system-reserved` or `kube-reserved` allocations, and the
|
than were reserved via `system-reserved` or `kube-reserved` allocations, and the
|
||||||
@@ -322,7 +322,7 @@ and trigger eviction assuming those Pods use less than their configured request.
|
|||||||
|
|
||||||
### DaemonSet
|
### DaemonSet
|
||||||
|
|
||||||
It is never desired for a `kubelet` to evict a `DaemonSet` Pod, since the Pod is
|
It is never desired for `kubelet` to evict a `DaemonSet` Pod, since the Pod is
|
||||||
immediately recreated and rescheduled back to the same node.
|
immediately recreated and rescheduled back to the same node.
|
||||||
|
|
||||||
At the moment, the `kubelet` has no ability to distinguish a Pod created
|
At the moment, the `kubelet` has no ability to distinguish a Pod created
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ Resources can be reserved for two categories of system daemons in the `kubelet`.
|
|||||||
### Enabling QoS and Pod level cgroups
|
### Enabling QoS and Pod level cgroups
|
||||||
|
|
||||||
To properly enforce node allocatable constraints on the node, you must
|
To properly enforce node allocatable constraints on the node, you must
|
||||||
enable the new cgroup hierarchy via the `--cgroups-per-qos` flag. This flag is
|
enable the new cgroup hierarchy via the `--cgroups-per-qos` flag. This flag is
|
||||||
enabled by default. When enabled, the `kubelet` will parent all end-user pods
|
enabled by default. When enabled, the `kubelet` will parent all end-user pods
|
||||||
under a cgroup hierarchy managed by the `kubelet`.
|
under a cgroup hierarchy managed by the `kubelet`.
|
||||||
|
|
||||||
### Configuring a cgroup driver
|
### Configuring a cgroup driver
|
||||||
@@ -71,7 +71,7 @@ transient slices for resources that are supported by that init system.
|
|||||||
|
|
||||||
Depending on the configuration of the associated container runtime,
|
Depending on the configuration of the associated container runtime,
|
||||||
operators may have to choose a particular cgroup driver to ensure
|
operators may have to choose a particular cgroup driver to ensure
|
||||||
proper system behavior. For example, if operators use the `systemd`
|
proper system behavior. For example, if operators use the `systemd`
|
||||||
cgroup driver provided by the `docker` runtime, the `kubelet` must
|
cgroup driver provided by the `docker` runtime, the `kubelet` must
|
||||||
be configured to use the `systemd` cgroup driver.
|
be configured to use the `systemd` cgroup driver.
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ Under this scenario, `Allocatable` will be `14.5 CPUs`, `28.5Gi` of memory and
|
|||||||
`98Gi` of local storage.
|
`98Gi` of local storage.
|
||||||
Scheduler ensures that the total memory `requests` across all pods on this node does
|
Scheduler ensures that the total memory `requests` across all pods on this node does
|
||||||
not exceed `28.5Gi` and storage doesn't exceed `88Gi`.
|
not exceed `28.5Gi` and storage doesn't exceed `88Gi`.
|
||||||
Kubelet evicts pods whenever the overall memory usage exceeds across pods exceed `28.5Gi`,
|
Kubelet evicts pods whenever the overall memory usage across pods exceeds `28.5Gi`,
|
||||||
or if overall disk usage exceeds `88Gi` If all processes on the node consume as
|
or if overall disk usage exceeds `88Gi` If all processes on the node consume as
|
||||||
much CPU as they can, pods together cannot consume more than `14.5 CPUs`.
|
much CPU as they can, pods together cannot consume more than `14.5 CPUs`.
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@ kubelet flag. Note that unless `--kube-reserved`, or `--system-reserved` or
|
|||||||
not affect existing deployments.
|
not affect existing deployments.
|
||||||
|
|
||||||
As of Kubernetes version 1.6, `kubelet` launches pods in their own cgroup
|
As of Kubernetes version 1.6, `kubelet` launches pods in their own cgroup
|
||||||
sandbox in a dedicated part of the cgroup hierarchy it manages. Operators are
|
sandbox in a dedicated part of the cgroup hierarchy it manages. Operators are
|
||||||
required to drain their nodes prior to upgrade of the `kubelet` from prior
|
required to drain their nodes prior to upgrade of the `kubelet` from prior
|
||||||
versions in order to ensure pods and their associated containers are launched in
|
versions in order to ensure pods and their associated containers are launched in
|
||||||
the proper part of the cgroup hierarchy.
|
the proper part of the cgroup hierarchy.
|
||||||
|
|||||||
+3
-3
@@ -1,11 +1,11 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Pod
|
kind: Pod
|
||||||
metadata:
|
metadata:
|
||||||
name: oir-demo
|
name: extended-resource-demo-2
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: oir-demo-ctr
|
- name: extended-resource-demo-2-ctr
|
||||||
image: nginx
|
image: nginx
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
pod.alpha.kubernetes.io/opaque-int-resource-dongle: 3
|
example.com/dongle: 2
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: extended-resource-demo
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: extended-resource-demo-ctr
|
||||||
|
image: nginx
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
example.com/dongle: 3
|
||||||
+25
-22
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
title: Assign Opaque Integer Resources to a Container
|
title: Assign Extended Resources to a Container
|
||||||
---
|
---
|
||||||
|
|
||||||
{% capture overview %}
|
{% capture overview %}
|
||||||
|
|
||||||
This page shows how to assign opaque integer resources to a Container.
|
This page shows how to assign extended resources to a Container.
|
||||||
|
|
||||||
{% include feature-state-deprecated.md %}
|
{% include feature-state-stable.md %}
|
||||||
|
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ This page shows how to assign opaque integer resources to a Container.
|
|||||||
{% include task-tutorial-prereqs.md %}
|
{% include task-tutorial-prereqs.md %}
|
||||||
|
|
||||||
Before you do this exercise, do the exercise in
|
Before you do this exercise, do the exercise in
|
||||||
[Advertise Opaque Integer Resources for a Node](/docs/tasks/administer-cluster/opaque-integer-resource-node/).
|
[Advertise Extended Resources for a Node](/docs/tasks/administer-cluster/extended-resource-node/).
|
||||||
That will configure one of your Nodes to advertise a dongle resource.
|
That will configure one of your Nodes to advertise a dongle resource.
|
||||||
|
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
@@ -24,40 +24,43 @@ That will configure one of your Nodes to advertise a dongle resource.
|
|||||||
|
|
||||||
{% capture steps %}
|
{% capture steps %}
|
||||||
|
|
||||||
## Assign an opaque integer resource to a Pod
|
## Assign an extended resource to a Pod
|
||||||
|
|
||||||
To request an opaque integer resource, include the `resources:requests` field in your
|
To request an extended resource, include the `resources:requests` field in your
|
||||||
Container manifest. Opaque integer resources have the prefix `pod.alpha.kubernetes.io/opaque-int-resource-`.
|
Container manifest. Extended resources are fully qualified with any domain outside of
|
||||||
|
`*.kubernetes.io/`. Valid extended resource names have the form `example.com/foo` where
|
||||||
|
`example.com` is replaced with your organization's domain and `foo` is a
|
||||||
|
descriptive resource name.
|
||||||
|
|
||||||
Here is the configuration file for a Pod that has one Container:
|
Here is the configuration file for a Pod that has one Container:
|
||||||
|
|
||||||
{% include code.html language="yaml" file="oir-pod.yaml" ghlink="/docs/tasks/configure-pod-container/oir-pod.yaml" %}
|
{% include code.html language="yaml" file="extended-resource-pod.yaml" ghlink="/docs/tasks/configure-pod-container/extended-resource-pod.yaml" %}
|
||||||
|
|
||||||
In the configuration file, you can see that the Container requests 3 dongles.
|
In the configuration file, you can see that the Container requests 3 dongles.
|
||||||
|
|
||||||
Create a Pod:
|
Create a Pod:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/oir-pod.yaml
|
kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/extended-resource-pod.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
Verify that the Pod is running:
|
Verify that the Pod is running:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl get pod oir-demo
|
kubectl get pod extended-resource-demo
|
||||||
```
|
```
|
||||||
|
|
||||||
Describe the Pod:
|
Describe the Pod:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl describe pod oir-demo
|
kubectl describe pod extended-resource-demo
|
||||||
```
|
```
|
||||||
|
|
||||||
The output shows dongle requests:
|
The output shows dongle requests:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Requests:
|
Requests:
|
||||||
pod.alpha.kubernetes.io/opaque-int-resource-dongle: 3
|
example.com/dongle: 3
|
||||||
```
|
```
|
||||||
|
|
||||||
## Attempt to create a second Pod
|
## Attempt to create a second Pod
|
||||||
@@ -65,7 +68,7 @@ Requests:
|
|||||||
Here is the configuration file for a Pod that has one Container. The Container requests
|
Here is the configuration file for a Pod that has one Container. The Container requests
|
||||||
two dongles.
|
two dongles.
|
||||||
|
|
||||||
{% include code.html language="yaml" file="oir-pod-2.yaml" ghlink="/docs/tasks/configure-pod-container/oir-pod-2.yaml" %}
|
{% include code.html language="yaml" file="extended-resource-pod-2.yaml" ghlink="/docs/tasks/configure-pod-container/extended-resource-pod-2.yaml" %}
|
||||||
|
|
||||||
Kubernetes will not be able to satisfy the request for two dongles, because the first Pod
|
Kubernetes will not be able to satisfy the request for two dongles, because the first Pod
|
||||||
used three of the four available dongles.
|
used three of the four available dongles.
|
||||||
@@ -73,13 +76,13 @@ used three of the four available dongles.
|
|||||||
Attempt to create a Pod:
|
Attempt to create a Pod:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/oir-pod-2.yaml
|
kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/extended-resource-pod-2.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
Describe the Pod
|
Describe the Pod
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl describe pod oir-demo-2
|
kubectl describe pod extended-resource-demo-2
|
||||||
```
|
```
|
||||||
|
|
||||||
The output shows that the Pod cannot be scheduled, because there is no Node that has
|
The output shows that the Pod cannot be scheduled, because there is no Node that has
|
||||||
@@ -93,22 +96,22 @@ Conditions:
|
|||||||
...
|
...
|
||||||
Events:
|
Events:
|
||||||
...
|
...
|
||||||
... Warning FailedScheduling pod (oir-demo-2) failed to fit in any node
|
... Warning FailedScheduling pod (extended-resource-demo-2) failed to fit in any node
|
||||||
fit failure summary on nodes : Insufficient pod.alpha.kubernetes.io/opaque-int-resource-dongle (1)
|
fit failure summary on nodes : Insufficient example.com/dongle (1)
|
||||||
```
|
```
|
||||||
|
|
||||||
View the Pod status:
|
View the Pod status:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl get pod oir-demo-2
|
kubectl get pod extended-resource-demo-2
|
||||||
```
|
```
|
||||||
|
|
||||||
The output shows that the Pod was created, but not scheduled to run on a Node.
|
The output shows that the Pod was created, but not scheduled to run on a Node.
|
||||||
It has a status of Pending:
|
It has a status of Pending:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
NAME READY STATUS RESTARTS AGE
|
NAME READY STATUS RESTARTS AGE
|
||||||
oir-demo-2 0/1 Pending 0 6m
|
extended-resource-demo-2 0/1 Pending 0 6m
|
||||||
```
|
```
|
||||||
|
|
||||||
## Clean up
|
## Clean up
|
||||||
@@ -116,7 +119,7 @@ oir-demo-2 0/1 Pending 0 6m
|
|||||||
Delete the Pod that you created for this exercise:
|
Delete the Pod that you created for this exercise:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl delete pod oir-demo-2
|
kubectl delete pod extended-resource-demo-2
|
||||||
```
|
```
|
||||||
|
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
@@ -130,7 +133,7 @@ kubectl delete pod oir-demo-2
|
|||||||
|
|
||||||
### For cluster administrators
|
### For cluster administrators
|
||||||
|
|
||||||
* [Advertise Opaque Integer Resources for a Node](/docs/tasks/administer-cluster/opaque-integer-resource-node/)
|
* [Advertise Extended Resources for a Node](/docs/tasks/administer-cluster/extended-resource-node/)
|
||||||
|
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Pod
|
|
||||||
metadata:
|
|
||||||
name: oir-demo-2
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: oir-demo-2-ctr
|
|
||||||
image: nginx
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
pod.alpha.kubernetes.io/opaque-int-resource-dongle: 2
|
|
||||||
Reference in New Issue
Block a user