You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: runtime-config-linux.md
+144-29
Original file line number
Diff line number
Diff line change
@@ -6,11 +6,24 @@ A namespace wraps a global system resource in an abstraction that makes it appea
6
6
Changes to the global resource are visible to other processes that are members of the namespace, but are invisible to other processes.
7
7
For more information, see [the man page](http://man7.org/linux/man-pages/man7/namespaces.7.html).
8
8
9
-
Namespaces are specified in the spec as an array of entries.
10
-
Each entry has a type field with possible values described below and an optional path element.
9
+
Namespaces are specified as an array of entries inside the `namespaces` root field.
10
+
The following parameters can be specified to setup namespaces:
11
+
12
+
***`type`***(string, required)* - namespace type. The following namespaces types are supported:
13
+
***`pid`** processes inside the container will only be able to see other processes inside the same container
14
+
***`network`** the container will have its own network stack
15
+
***`mount`** the container will have an isolated mount table
16
+
***`ipc`** processes inside the container will only be able to communicate to other processes inside the same container via system level IPC
17
+
***`uts`** the container will be able to have its own hostname and domain name
18
+
***`user`** the container will be able to remap user and group IDs from the host to local users and groups within the container
19
+
20
+
***`path`***(string, optional)* - path to namespace file
21
+
11
22
If a path is specified, that particular file is used to join that type of namespace.
12
23
Also, when a path is specified, a runtime MUST assume that the setup for that particular namespace has already been done and error out if the config specifies anything else related to that namespace.
13
24
25
+
###### Example
26
+
14
27
```json
15
28
"namespaces": [
16
29
{
@@ -36,32 +49,29 @@ Also, when a path is specified, a runtime MUST assume that the setup for that pa
36
49
]
37
50
```
38
51
39
-
#### Namespace types
52
+
##Devices
40
53
41
-
***`pid`** processes inside the container will only be able to see other processes inside the same container.
42
-
***`network`** the container will have its own network stack.
43
-
***`mount`** the container will have an isolated mount table.
44
-
***`ipc`** processes inside the container will only be able to communicate to other processes inside the same
45
-
container via system level IPC.
46
-
***`uts`** the container will be able to have its own hostname and domain name.
47
-
***`user`** the container will be able to remap user and group IDs from the host to local users and groups
48
-
within the container.
54
+
`devices` is an array specifying the list of devices to be created in the container.
49
55
50
-
## Devices
56
+
The following parameters can be specified:
57
+
58
+
***`type`***(char, required)* - type of device: `c`, `b`, `u` or `p`. More info in `man mknod`.
59
+
60
+
***`path`***(string, optional)* - full path to device inside container
61
+
62
+
***`major, minor`***(int64, required)* - major, minor numbers for device. More info in `man mknod`. There is a special value: `-1`, which means `*` for `device` cgroup setup.
51
63
52
-
Devices is an array specifying the list of devices to be created in the container.
53
-
Next parameters can be specified:
64
+
***`permissions`***(string, optional)* - cgroup permissions for device. A composition of `r` (*read*), `w` (*write*), and `m` (*mknod*).
54
65
55
-
***`type`** - type of device: `c`, `b`, `u` or `p`. More info in `man mknod`
56
-
***`path`** - full path to device inside container
57
-
***`major, minor`** - major, minor numbers for device. More info in `man mknod`.
58
-
There is special value: `-1`, which means `*` for `device`
59
-
cgroup setup.
60
-
***`permissions`** - cgroup permissions for device. A composition of `r`
61
-
(read), `w` (write), and `m` (mknod).
62
-
***`fileMode`** - file mode for device file
63
-
***`uid`** - uid of device owner
64
-
***`gid`** - gid of device owner
66
+
***`fileMode`***(uint32, optional)* - file mode for device file
67
+
68
+
***`uid`***(uint32, optional)* - uid of device owner
69
+
70
+
***`gid`***(uint32, optional)* - gid of device owner
71
+
72
+
**`fileMode`**, **`uid`** and **`gid`** are required if **`path`** is given and are otherwise not allowed.
73
+
74
+
###### Example
65
75
66
76
```json
67
77
"devices": [
@@ -154,6 +164,16 @@ For example, to run a new process in an existing container without updating limi
154
164
155
165
#### Disable out-of-memory killer
156
166
167
+
`disableOOMKiller` contains a boolean (`true` or `false`) that enables or disables the Out of Memory killer for a cgroup.
168
+
If enabled (`false`), tasks that attempt to consume more memory than they are allowed are immediately killed by the OOM killer.
169
+
The OOM killer is enabled by default in every cgroup using the `memory` subsystem.
170
+
To disable it, specify a value of `true`.
171
+
For more information, see [the memory cgroup man page](https://www.kernel.org/doc/Documentation/cgroups/memory.txt).
172
+
173
+
***`disableOOMKiller`***(bool, optional)* - enables or disables the OOM killer
174
+
175
+
###### Example
176
+
157
177
```json
158
178
"disableOOMKiller": false
159
179
```
@@ -168,6 +188,23 @@ More information on `oom_score_adj` available [here](https://www.kernel.org/doc/
168
188
169
189
#### Memory
170
190
191
+
`memory` represents the cgroup subsystem `memory` and it's used to set limits on the container's memory usage.
192
+
For more information, see [the memory cgroup man page](https://www.kernel.org/doc/Documentation/cgroups/memory.txt).
193
+
194
+
The following parameters can be specified to setup the controller:
195
+
196
+
***`limit`***(uint64, optional)* - sets limit of memory usage
197
+
198
+
***`reservation`***(uint64, optional)* - sets soft limit of memory usage
199
+
200
+
***`swap`***(uint64, optional)* - sets limit of memory+Swap usage
201
+
202
+
***`kernel`***(uint64, optional)* - sets hard limit for kernel memory
203
+
204
+
***`swappiness`***(uint64, optional)* - sets swappiness parameter of vmscan (See sysctl's vm.swappiness)
205
+
206
+
###### Example
207
+
171
208
```json
172
209
"memory": {
173
210
"limit": 0,
@@ -180,6 +217,27 @@ More information on `oom_score_adj` available [here](https://www.kernel.org/doc/
180
217
181
218
#### CPU
182
219
220
+
`cpu` represents the cgroup subsystems `cpu` and `cpusets`.
221
+
For more information, see [the cpusets cgroup man page](https://www.kernel.org/doc/Documentation/cgroups/cpusets.txt).
222
+
223
+
The following parameters can be specified to setup the controller:
224
+
225
+
***`shares`***(uint64, optional)* - specifies a relative share of CPU time available to the tasks in a cgroup
226
+
227
+
***`quota`***(uint64, optional)* - specifies the total amount of time in microseconds for which all tasks in a cgroup can run during one period (as defined by **`period`** below)
228
+
229
+
***`period`***(uint64, optional)* - specifies a period of time in microseconds for how regularly a cgroup's access to CPU resources should be reallocated (CFS scheduler only)
230
+
231
+
***`realtimeRuntime`***(uint64, optional)* - specifies a period of time in microseconds for the longest continuous period in which the tasks in a cgroup have access to CPU resources
232
+
233
+
***`realtimePeriod`***(uint64, optional)* - same as **`period`** but applies to realtime scheduler only
234
+
235
+
***`cpus`***(cpus, optional)* - list of CPUs the container will run in
236
+
237
+
***`mems`***(mems, optional)* - list of Memory Nodes the container will run in
238
+
239
+
###### Example
240
+
183
241
```json
184
242
"cpu": {
185
243
"shares": 0,
@@ -195,18 +253,18 @@ More information on `oom_score_adj` available [here](https://www.kernel.org/doc/
195
253
#### Block IO Controller
196
254
197
255
`blockIO` represents the cgroup subsystem `blkio` which implements the block io controller.
198
-
For more information, see the [kernel cgroups documentation about `blkio`](https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt).
256
+
For more information, see [the kernel cgroups documentation about blkio](https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt).
199
257
200
-
The following parameters can be specified to setup the block io controller:
258
+
The following parameters can be specified to setup the controller:
201
259
202
260
***`blkioWeight`***(uint16, optional)* - specifies per-cgroup weight. This is default weight of the group on all devices until and unless overridden by per-device rules. The range is from 10 to 1000.
203
261
204
262
***`blkioLeafWeight`***(uint16, optional)* - equivalents of `blkioWeight` for the purpose of deciding how much weight tasks in the given cgroup has while competing with the cgroup's child cgroups. The range is from 10 to 1000.
205
263
206
264
***`blkioWeightDevice`***(array, optional)* - specifies the list of devices which will be bandwidth rate limited. The following parameters can be specified per-device:
207
265
***`major, minor`***(int64, required)* - major, minor numbers for device. More info in `man mknod`.
208
-
***`weight`***(uint16, optional)* - bandwidth rate for the device, range is from 10 to 1000.
209
-
***`leafWeight`***(uint16, optional)* - bandwidth rate for the device while competing with the cgroup's child cgroups, range is from 10 to 1000, cfq scheduler only.
266
+
***`weight`***(uint16, optional)* - bandwidth rate for the device, range is from 10 to 1000
267
+
***`leafWeight`***(uint16, optional)* - bandwidth rate for the device while competing with the cgroup's child cgroups, range is from 10 to 1000, CFQ scheduler only
210
268
211
269
You must specify at least one of `weight` or `leafWeight` in a given entry, and can specify both.
212
270
@@ -252,6 +310,18 @@ The following parameters can be specified to setup the block io controller:
252
310
253
311
#### Huge page limits
254
312
313
+
`hugepageLimits` represents the `hugetlb` controller which allows to limit the
314
+
HugeTLB usage per control group and enforces the controller limit during page fault.
315
+
For more information, see the [kernel cgroups documentation about HugeTLB](https://www.kernel.org/doc/Documentation/cgroups/hugetlb.txt).
316
+
317
+
`hugepageLimits` is an array of entries, each having the following structure:
***`limit`***(uint64, required)* - limit in bytes of *hugepagesize* HugeTLB usage
322
+
323
+
###### Example
324
+
255
325
```json
256
326
"hugepageLimits": [
257
327
{
@@ -263,9 +333,23 @@ The following parameters can be specified to setup the block io controller:
263
333
264
334
#### Network
265
335
336
+
`network` represents the cgroup subsystems `net_cls` and `net_prio`.
337
+
For more information, see [the net\_cls cgroup man page](https://www.kernel.org/doc/Documentation/cgroups/net_cls.txt) and [the net\_prio cgroup man page](https://www.kernel.org/doc/Documentation/cgroups/net_prio.txt).
338
+
339
+
The following parameters can be specified to setup these cgroup controllers:
340
+
341
+
***`classID`***(string, optional)* - is the network class identifier the cgroup's network packets will be tagged with
342
+
343
+
***`priorities`***(array, optional)* - specifies a list of objects of the priorities assigned to traffic originating from
344
+
processes in the group and egressing the system on various interfaces. The following parameters can be specified per-priority:
345
+
* **`name`***(string, required)* - interface name
346
+
* **`priority`***(uint32, required)* - priority applied to the interface
347
+
348
+
###### Example
349
+
266
350
```json
267
351
"network": {
268
-
"classId": "ClassId",
352
+
"classID": "0x100001",
269
353
"priorities": [
270
354
{
271
355
"name": "eth0",
@@ -279,11 +363,31 @@ The following parameters can be specified to setup the block io controller:
279
363
}
280
364
```
281
365
366
+
#### PIDs
367
+
368
+
`pids` represents the cgroup subsystem `pids`.
369
+
For more information, see [the pids cgroup man page](https://www.kernel.org/doc/Documentation/cgroups/pids.txt
370
+
).
371
+
372
+
The following paramters can be specified to setup the controller:
373
+
374
+
***`limit`***(int64, required)* - specifies the maximum number of tasks in the cgroup
375
+
376
+
###### Example
377
+
378
+
```json
379
+
"pids": {
380
+
"limit": 32771
381
+
}
382
+
```
383
+
282
384
## Sysctl
283
385
284
386
sysctl allows kernel parameters to be modified at runtime for the container.
285
387
For more information, see [the man page](http://man7.org/linux/man-pages/man8/sysctl.8.html)
`type` is a string with a value from those defined in [the man page](http://man7.org/linux/man-pages/man2/setrlimit.2.html).
298
402
The kernel enforces the `soft` limit for a resource while the `hard` limit acts as a ceiling for that value that could be set by an unprivileged process.
299
403
404
+
###### Example
405
+
300
406
```json
301
407
"rlimits": [
302
408
{
@@ -311,6 +417,9 @@ The kernel enforces the `soft` limit for a resource while the `hard` limit acts
311
417
312
418
SELinux process label specifies the label with which the processes in a container are run.
313
419
For more information about SELinux, see [Selinux documentation](http://selinuxproject.org/page/Main_Page)
0 commit comments