Document extended resources and OIR deprecation. (#5399)

* Document extended resources and OIR deprecation.

* Updated extended resources doc per reviews.
This commit is contained in:
Connor Doyle
2017-09-12 17:01:41 -07:00
committed by Steve Perry
parent 053c79464c
commit 6dcb9d4490
3 changed files with 99 additions and 21 deletions
@@ -305,6 +305,8 @@ where `OOM` stands for Out Of Memory.
## Opaque integer resources (Alpha feature)
{% include feature-state-deprecated.md %}
Kubernetes version 1.5 introduces Opaque integer resources. Opaque
integer resources allow cluster operators to advertise new node-level
resources that would be otherwise unknown to the system.
@@ -313,9 +315,12 @@ Users can consume these resources in Pod specs just like CPU and memory.
The scheduler takes care of the resource accounting so that no more than the
available amount is simultaneously allocated to Pods.
**Note:** Opaque integer resources are Alpha in Kubernetes version 1.5.
Only resource accounting is implemented; node-level isolation is still
under active development.
**Note:** Opaque Integer Resources will be removed in version 1.9.
[Extended Resources](#extended-resources) are a replacement for Opaque Integer
Resources. Users can use any domain name prefix outside of the `kubernetes.io/`
domain instead of the previous `pod.alpha.kubernetes.io/opaque-int-resource-`
prefix.
{: .note}
Opaque integer resources are resources that begin with the prefix
`pod.alpha.kubernetes.io/opaque-int-resource-`. The API server
@@ -339,22 +344,9 @@ first pod that requests the resource to be scheduled on that node.
**Example:**
Here is an HTTP request that advertises five "foo" resources on node `k8s-node-1` whose master is `k8s-master`.
```http
PATCH /api/v1/nodes/k8s-node-1/status HTTP/1.1
Accept: application/json
Content-Type: application/json-patch+json
Host: k8s-master:8080
[
{
"op": "add",
"path": "/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-foo",
"value": "5"
}
]
```
Here is an example showing how to use `curl` to form an HTTP request that
advertises five "foo" resources on node `k8s-node-1` whose master is
`k8s-master`.
```shell
curl --header "Content-Type: application/json-patch+json" \
@@ -395,6 +387,92 @@ spec:
pod.alpha.kubernetes.io/opaque-int-resource-foo: 1
```
## Extended Resources
Kubernetes version 1.8 introduces Extended Resources. Extended Resources are
fully-qualified resource names outside the `kubernetes.io` domain. Extended
Resources allow cluster operators to advertise new node-level resources that
would be otherwise unknown to the system. Extended Resource quantities must be
integers and cannot be overcommitted.
Users can consume Extended Resources in Pod specs just like CPU and memory.
The scheduler takes care of the resource accounting so that no more than the
available amount is simultaneously allocated to Pods.
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`.
**Note:** Extended Resources replace [Opaque Integer
Resources](#opaque-integer-resources-alpha-feature). Users can use any domain
name prefix outside of the `kubernetes.io/` domain instead of the previous
`pod.alpha.kubernetes.io/opaque-int-resource-` prefix.
{: .note}
There are two steps required to use Extended Resources. First, the
cluster operator must advertise a per-node Extended Resource on one or more
nodes. Second, users must request the Extended Resource in Pods.
To advertise a new Extended Resource, the cluster operator should
submit a `PATCH` HTTP request to the API server to specify the available
quantity in the `status.capacity` for a node in the cluster. After this
operation, the node's `status.capacity` will include a new resource. The
`status.allocatable` field is updated automatically with the new resource
asynchronously by the kubelet. Note that because the scheduler uses the
node `status.allocatable` value when evaluating Pod fitness, there may
be a short delay between patching the node capacity with a new resource and the
first pod that requests the resource to be scheduled on that node.
**Example:**
Here is an example showing how to use `curl` to form an HTTP request that
advertises five "example.com/foo" resources on node `k8s-node-1` whose master
is `k8s-master`.
```shell
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "add", "path": "/status/capacity/example.com~1foo", "value": "5"}]' \
http://k8s-master:8080/api/v1/nodes/k8s-node-1/status
```
**Note**: In the preceding request, `~1` is the encoding for the character `/`
in the patch path. The operation path value in JSON-Patch is interpreted as a
JSON-Pointer. For more details, see
[IETF RFC 6901, section 3](https://tools.ietf.org/html/rfc6901#section-3).
{: .note}
To consume an Extended Resource in a Pod, include the resource name as a key
in the `spec.containers[].resources.requests` map.
**Note:** Extended resources cannot be overcommitted, so request and limit
must be equal if both are present in a container spec.
{: .note}
The Pod is scheduled only if all of the resource requests are
satisfied, including cpu, memory and any Extended Resources. The Pod will
remain in the `PENDING` state as long as the resource request cannot be met by
any node.
**Example:**
The Pod below requests 2 cpus and 1 "example.com/foo" (an extended resource.)
```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: myimage
resources:
requests:
cpu: 2
example.com/foo: 1
```
## Planned Improvements
Kubernetes version 1.5 only allows resource quantities to be specified on a
@@ -9,7 +9,7 @@ This page shows how to specify opaque integer resources for a Node.
Opaque integer resources allow cluster administrators to advertise node-level
resources that would otherwise be unknown to Kubernetes.
{% include feature-state-alpha.md %}
{% include feature-state-deprecated.md %}
{% endcapture %}
@@ -6,7 +6,7 @@ title: Assign Opaque Integer Resources to a Container
This page shows how to assign opaque integer resources to a Container.
{% include feature-state-alpha.md %}
{% include feature-state-deprecated.md %}
{% endcapture %}