Commit Graph

8778 Commits

Author SHA1 Message Date
Lantao Liu
9d5990fe4f Add sandbox /dev/shm.
Signed-off-by: Lantao Liu <lantaol@google.com>
2017-06-11 09:49:46 +00:00
Lantao Liu
5398a3b7ec Add mount/unmount in os interface
Signed-off-by: Lantao Liu <lantaol@google.com>
2017-06-11 09:23:04 +00:00
Lantao Liu
ffa4ffe3bf Mount cgroup into the container and add unit test for privileged mount.
Signed-off-by: Lantao Liu <lantaol@google.com>
2017-06-11 02:23:59 +00:00
Lantao Liu
e9a930b28b Merge pull request #51 from heartlock/support-privileged
Support privileged
2017-06-10 17:30:57 -07:00
Qiang Huang
4e8548cd3f Merge pull request #987 from crosbymichael/report-jun9
Add dev report for june 9th
2017-06-10 21:48:25 +08:00
Michael Crosby
7fb4c6d185 Add dev report for june 9th
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-09 16:33:36 -07:00
Michael Crosby
cf602e3aac Merge pull request #979 from dmcgowan/content-upload-lock-fix
Replace lockfile with reference lock
2017-06-09 15:02:57 -07:00
Stephen Day
7759386675 Merge pull request #986 from estesp/non-block-grpc-dist
Don't use WithBlock() on `dist` gRPC connection
2017-06-09 13:59:32 -07:00
Phil Estes
9f028b50cb
Don't use WithBlock() on dist gRPC connection
When using WithBlock() on the dialer, the connection timeout must fully
expire before any status is provided to the user about whether they can
even connect to the socket. For example, if the containerd socket is
root-owned and the user tries `dist images ls` without `sudo`, the
default is 30 sec. of "hang" before the command returns.

Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
2017-06-09 15:40:14 -04:00
Michael Crosby
beaff3d81d Merge pull request #985 from samuelkarp/task-delete-nil-check
containerd: nil-check before calling io.Close
2017-06-09 11:31:04 -07:00
Michael Crosby
c45dae71db Merge pull request #983 from tonistiigi/fix-ctx-imports
Fix context package imports
2017-06-09 11:23:49 -07:00
Samuel Karp
779efbce6a containerd: nil-check before calling io.Close
Signed-off-by: Samuel Karp <skarp@amazon.com>
2017-06-09 11:21:40 -07:00
Derek McGowan
6c91ee2dac Merge pull request #980 from crosbymichael/service-tasks
Namespace tasks within runtime
2017-06-09 11:02:33 -07:00
Tonis Tiigi
39d55cc498 Fix context package imports
Conflicting with definition of plugin.Differ

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2017-06-09 10:58:29 -07:00
Michael Crosby
588c11852b Move task list to runtimes
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-09 10:37:33 -07:00
Michael Crosby
a40f307e88 Namespace cgroups monitor ids
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-09 10:35:17 -07:00
Michael Crosby
745398b2e9 Remove tasks map from service
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-09 10:35:17 -07:00
Derek McGowan
3c4e2a36dc Merge pull request #976 from crosbymichael/attach
Add `ctr attach` for reattaching to running task
2017-06-09 10:19:18 -07:00
Michael Crosby
5d1669bcfb Add ctr attach for reattaching to running task
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-09 10:10:39 -07:00
Lantao Liu
227dbe97f2 Merge pull request #50 from Crazykev/resolv
Generate and maintain resolv.conf for sandbox
2017-06-09 09:41:23 -07:00
Crazykev
62d1e5dc10 add unit test
Signed-off-by: Crazykev <crazykev@zju.edu.cn>
2017-06-09 19:36:30 +08:00
Crazykev
9bf7ffd51a generate and maintain resolv.conf for sandbox
Signed-off-by: Crazykev <crazykev@zju.edu.cn>
2017-06-09 19:36:30 +08:00
heartlock
73fbe90c5b update vendor
Signed-off-by: heartlock <21521209@zju.edu.cn>
2017-06-09 15:42:13 +08:00
heartlock
dda03f733a support privileged
Signed-off-by: heartlock <21521209@zju.edu.cn>
2017-06-09 15:42:04 +08:00
Derek McGowan
1cdb010783
Replace lockfile with reference lock
Updates content service to handle lock errors and return
them to the client. The client remote handler has been
updated to retry when a resource is locked until the
resource is unlocked or the expected resource exists.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2017-06-08 16:07:38 -07:00
Michael Crosby
a6314cad65 Merge pull request #971 from stevvooe/namespace-snapshotters
snapshot/storage: namespace snapshot drivers
2017-06-08 13:37:16 -07:00
Stephen J Day
b1a70aa335
snapshot/storage: namespace snapshot drivers
Signed-off-by: Stephen J Day <stephen.day@docker.com>
2017-06-08 12:29:26 -07:00
Derek McGowan
b591af4224 Merge pull request #977 from crosbymichael/tip
Remove tip
2017-06-08 11:07:28 -07:00
Michael Crosby
4fbfe1d083 Merge pull request #974 from miaoyq/del-alias-of-images
Remove the redundant alias of 'dist images'
2017-06-08 10:50:47 -07:00
Michael Crosby
385a007661 Remove tip
Go tip test runners are 2x as slow as everything else.

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-08 10:34:39 -07:00
Kenfe-Mickaël Laventure
18d53c2e6e Merge pull request #972 from stevvooe/namespace-containers-storage
metadata: properly namespace containers storage
2017-06-08 09:54:32 -04:00
Yanqiang Miao
7627130ea3 Remove the redundant alias of 'dist images'
Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>
2017-06-08 18:56:29 +08:00
Stephen J Day
6414c68b16
metadata: properly namespace containers storage
Signed-off-by: Stephen J Day <stephen.day@docker.com>
2017-06-07 17:58:40 -07:00
Stephen Day
0b13b07092 Merge pull request #970 from dmcgowan/remote-writer-ref
Set the remote writer ref on writer creation
2017-06-07 16:51:38 -07:00
Derek McGowan
9211a1daa7
Set the remote writer ref on writer creation
Ensures that status calls to the remote writer correctly
sets the ref.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2017-06-07 16:40:42 -07:00
Lantao Liu
56e474f207 Merge pull request #69 from Random-Liu/use-containerd-version
Use containerd version returned by version service.
2017-06-07 15:26:37 -07:00
Lantao Liu
f770d4fea3 Use containerd version returned by version service.
Signed-off-by: Lantao Liu <lantaol@google.com>
2017-06-07 22:04:09 +00:00
Derek McGowan
636a24eef6
Add status tracker for Docker remote push
Update push client to use status tracker

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2017-06-07 10:59:52 -07:00
Derek McGowan
5615b68f06
Update pusher to use content writer
Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2017-06-07 10:57:00 -07:00
Derek McGowan
621760f10a
Add ReaderAt support to content store
Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2017-06-07 10:43:00 -07:00
Kenfe-Mickaël Laventure
9c0897d524 Merge pull request #967 from crosbymichael/task-ns
Namespace tasks via runc --root
2017-06-07 07:31:14 -07:00
Michael Crosby
497db9ac06 Namespace tasks via runc --root
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-06 16:31:00 -07:00
Michael Crosby
95efd45db0 Merge pull request #946 from dmcgowan/client-dist-pull
Update dist pull to use client
2017-06-06 15:25:22 -07:00
Kenfe-Mickaël Laventure
6428b4bad0 Merge pull request #962 from crosbymichael/client-ctr
Port ctr to use client package
2017-06-06 15:20:47 -07:00
Derek McGowan
ca25c0408e
Update dist pull to use client
Replaced pull unpacker with boolean to call unpack.
Added unpack and target to image type.
Updated progress logic for pull.
Added list images to client.
Updated rootfs unpacker to use client.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2017-06-06 15:03:52 -07:00
Michael Crosby
4c1af8fdd8 Port ctr to use client
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-06 14:53:50 -07:00
Michael Crosby
bdf9f5f738 Merge pull request #963 from stevvooe/namespaces-support
namespaces: support within containerd
2017-06-06 14:45:25 -07:00
Derek McGowan
ecc08d7524 Merge pull request #964 from crosbymichael/criu-test
Only run checkpoint test if criu is installed
2017-06-06 14:33:39 -07:00
Michael Crosby
304fc470f4 Only run checkpoint test if criu is installed
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2017-06-06 14:18:59 -07:00
Stephen J Day
af2718b01f
namespaces: support within containerd
To support multi-tenancy, containerd allows the collection of metadata
and runtime objects within a heirarchical storage primitive known as
namespaces. Data cannot be shared across these namespaces, unless
allowed by the service. This allows multiple sets of containers to
managed without interaction between the clients that management. This
means that different users, such as SwarmKit, K8s, Docker and others can
use containerd without coordination. Through labels, one may use
namespaces as a tool for cleanly organizing the use of containerd
containers, including the metadata storage for higher level features,
such as ACLs.

Namespaces

Namespaces cross-cut all containerd operations and are communicated via
context, either within the Go context or via GRPC headers. As a general
rule, no features are tied to namespace, other than organization. This
will be maintained into the future. They are created as a side-effect of
operating on them or may be created manually. Namespaces can be labeled
for organization. They cannot be deleted unless the namespace is empty,
although we may want to make it so one can clean up the entirety of
containerd by deleting a namespace.

Most users will interface with namespaces by setting in the
context or via the `CONTAINERD_NAMESPACE` environment variable, but the
experience is mostly left to the client. For `ctr` and `dist`, we have
defined a "default" namespace that will be created up on use, but there
is nothing special about it. As part of this PR we have plumbed this
behavior through all commands, cleaning up context management along the
way.

Namespaces in Action

Namespaces can be managed with the `ctr namespaces` subcommand. They
can be created, labeled and destroyed.

A few commands can demonstrate the power of namespaces for use with
images. First, lets create a namespace:

```
$ ctr namespaces create foo mylabel=bar
$ ctr namespaces ls
NAME LABELS
foo  mylabel=bar
```

We can see that we have a namespace `foo` and it has a label. Let's pull
an image:

```
$ dist pull docker.io/library/redis:latest
docker.io/library/redis:latest: resolved       |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:548a75066f3f280eb017a6ccda34c561ccf4f25459ef8e36d6ea582b6af1decf: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:d45bc46b48e45e8c72c41aedd2a173bcc7f1ea4084a8fcfc5251b1da2a09c0b6: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:5b690bc4eaa6434456ceaccf9b3e42229bd2691869ba439e515b28fe1a66c009: done           |++++++++++++++++++++++++++++++++++++++|
config-sha256:a858478874d144f6bfc03ae2d4598e2942fc9994159f2872e39fae88d45bd847: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:4cdd94354d2a873333a205a02dbb853dd763c73600e0cf64f60b4bd7ab694875: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:10a267c67f423630f3afe5e04bbbc93d578861ddcc54283526222f3ad5e895b9: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:c54584150374aa94b9f7c3fbd743adcff5adead7a3cf7207b0e51551ac4a5517: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:d1f9221193a65eaf1b0afc4f1d4fbb7f0f209369d2696e1c07671668e150ed2b: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:71c1f30d820f0457df186531dc4478967d075ba449bd3168a3e82137a47daf03: done           |++++++++++++++++++++++++++++++++++++++|
elapsed: 0.9 s total:   0.0 B (0.0 B/s)
INFO[0000] unpacking rootfs
INFO[0000] Unpacked chain id: sha256:41719840acf0f89e761f4a97c6074b6e2c6c25e3830fcb39301496b5d36f9b51
```

Now, let's list the image:

```
$ dist images ls
REF                            TYPE  DIGEST SIZE
docker.io/library/redis:latest application/vnd.docker.distribution.manifest.v2+json sha256:548a75066f3f280eb017a6ccda34c561ccf4f25459ef8e36d6ea582b6af1decf 72.7 MiB
```

That looks normal. Let's list the images for the `foo` namespace and see
this in action:

```
$ CONTAINERD_NAMESPACE=foo dist images ls
REF TYPE DIGEST SIZE
```

Look at that! Nothing was pulled in the namespace `foo`. Let's do the
same pull:

```
$ CONTAINERD_NAMESPACE=foo dist pull docker.io/library/redis:latest
docker.io/library/redis:latest: resolved       |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:548a75066f3f280eb017a6ccda34c561ccf4f25459ef8e36d6ea582b6af1decf: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:d45bc46b48e45e8c72c41aedd2a173bcc7f1ea4084a8fcfc5251b1da2a09c0b6: done           |++++++++++++++++++++++++++++++++++++++|
config-sha256:a858478874d144f6bfc03ae2d4598e2942fc9994159f2872e39fae88d45bd847: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:4cdd94354d2a873333a205a02dbb853dd763c73600e0cf64f60b4bd7ab694875: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:c54584150374aa94b9f7c3fbd743adcff5adead7a3cf7207b0e51551ac4a5517: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:71c1f30d820f0457df186531dc4478967d075ba449bd3168a3e82137a47daf03: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:d1f9221193a65eaf1b0afc4f1d4fbb7f0f209369d2696e1c07671668e150ed2b: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:10a267c67f423630f3afe5e04bbbc93d578861ddcc54283526222f3ad5e895b9: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:5b690bc4eaa6434456ceaccf9b3e42229bd2691869ba439e515b28fe1a66c009: done           |++++++++++++++++++++++++++++++++++++++|
elapsed: 0.8 s total:   0.0 B (0.0 B/s)
INFO[0000] unpacking rootfs
INFO[0000] Unpacked chain id: sha256:41719840acf0f89e761f4a97c6074b6e2c6c25e3830fcb39301496b5d36f9b51
```

Wow, that was very snappy! Looks like we pulled that image into out
namespace but didn't have to download any new data because we are
sharing storage. Let's take a peak at the images we have in `foo`:

```
$ CONTAINERD_NAMESPACE=foo dist images ls
REF                            TYPE DIGEST SIZE
docker.io/library/redis:latest application/vnd.docker.distribution.manifest.v2+json sha256:548a75066f3f280eb017a6ccda34c561ccf4f25459ef8e36d6ea582b6af1decf 72.7 MiB
```

Now, let's remove that image from `foo`:

```
$ CONTAINERD_NAMESPACE=foo dist images rm
docker.io/library/redis:latest
```

Looks like it is gone:

```
$ CONTAINERD_NAMESPACE=foo dist images ls
REF TYPE DIGEST SIZE
```

But, as we can see, it is present in the `default` namespace:

```
$ dist images ls
REF                            TYPE DIGEST SIZE
docker.io/library/redis:latest application/vnd.docker.distribution.manifest.v2+json sha256:548a75066f3f280eb017a6ccda34c561ccf4f25459ef8e36d6ea582b6af1decf 72.7 MiB
```

What happened here? We can tell by listing the namespaces to get a
better understanding:

```
$ ctr namespaces ls
NAME    LABELS
default
foo     mylabel=bar
```

From the above, we can see that the `default` namespace was created with
the standard commands without the environment variable set. Isolating
the set of shared images while sharing the data that matters.

Since we removed the images for namespace `foo`, we can remove it now:

```
$ ctr namespaces rm foo
foo
```

However, when we try to remove the `default` namespace, we get an error:

```
$ ctr namespaces rm default
ctr: unable to delete default: rpc error: code = FailedPrecondition desc = namespace default must be empty
```

This is because we require that namespaces be empty when removed.

Caveats

- While most metadata objects are namespaced, containers and tasks may
exhibit some issues. We still need to move runtimes to namespaces and
the container metadata storage may not be fully worked out.
- Still need to migrate content store to metadata storage and namespace
the content store such that some data storage (ie images).
- Specifics of snapshot driver's relation to namespace needs to be
worked out in detail.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
2017-06-06 13:50:33 -07:00