Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HugePages documentation #5419

Merged
merged 1 commit into from
Sep 13, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions _data/tasks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,10 @@ toc:
section:
- docs/tasks/manage-gpus/scheduling-gpus.md

- title: Manage HugePages
section:
- docs/tasks/manage-hugepages/scheduling-hugepages.md

- title: Extend kubectl with plugins
section:
- docs/tasks/extend-kubectl/kubectl-plugins.md
4 changes: 4 additions & 0 deletions docs/tasks/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ Perform common tasks for managing a DaemonSet, such as performing a rolling upda

Configure and schedule NVIDIA GPUs for use as a resource by nodes in a cluster.

#### Managing HugePages

Configure and schedule huge pages as a schedulable resource in a cluster.

### What's next

If you would like to write a task page, see
Expand Down
81 changes: 81 additions & 0 deletions docs/tasks/manage-hugepages/scheduling-hugepages.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
approvers:
- derekwaynecarr
title: Manage HugePages
---

{% capture overview %}
{% include feature-state-alpha.md %}

Kubernetes supports the allocation and consumption of pre-allocated huge pages
by applications in a Pod as an **alpha** feature. This page describes how users
can consume huge pages and the current limitations.

{% endcapture %}

{% capture prerequisites %}

1. Kubernetes nodes must pre-allocate huge pages in order for the node to report
its huge page capacity. A node may only pre-allocate huge pages for a single
size.
1. A special **alpha** feature gate `HugePages` has to be set to true across the
system: `--feature-gates="HugePages=true"`.

The nodes will automatically discover and report all huge page resources as a
schedulable resource.

{% endcapture %}

{% capture steps %}

## API

Huge pages can be consumed via container level resource requirements using the
resource name `hugepages-<size>`, where size is the most compact binary notation
using integer values supported on a particular node. For example, if a node
supports 2048KiB page sizes, it will expose a schedulable resource
`hugepages-2Mi`. Unlike CPU or memory, huge pages do not support overcommit.

```yaml
apiVersion: v1
kind: Pod
metadata:
generateName: hugepages-volume-
spec:
containers:
- image: fedora:latest
command:
- sleep
- inf
name: example
volumeMounts:
- mountPath: /hugepages
name: hugepage
resources:
limits:
hugepages-2Mi: 100Mi
volumes:
- name: hugepage
emptyDir:
medium: HugePages
```

- Huge page requests must equal the limits. This is the default if limits are
specified, but requests are not.
- Huge pages are isolated at a pod scope, container isolation is planned in a
future iteration.
- EmptyDir volumes backed by huge pages may not consume more huge page memory
than the pod request.
- Applications that consume huge pages via `shmget()` with `SHM_HUGETLB` must
run with a supplemental group that matches `proc/sys/vm/hugetlb_shm_group`

## Future

- Support container isolation of huge pages in addition to pod isolation.
- NUMA locality guarnatees as a feature of quality of service.
- ResourceQuota support.
- LimitRange support.

{% endcapture %}

{% include templates/task.md %}