summaryrefslogtreecommitdiff
path: root/plugin/executor
Commit message (Collapse)AuthorAgeFilesLines
* daemon: allow shimv2 runtimes to be configuredCory Snider2023-02-171-5/+6
| | | | | | | | | | | | | | | | | | | | Kubernetes only permits RuntimeClass values which are valid lowercase RFC 1123 labels, which disallows the period character. This prevents cri-dockerd from being able to support configuring alternative shimv2 runtimes for a pod as shimv2 runtime names must contain at least one period character. Add support for configuring named shimv2 runtimes in daemon.json so that runtime names can be aliased to Kubernetes-compatible names. Allow options to be set on shimv2 runtimes in daemon.json. The names of the new daemon runtime config fields have been selected to correspond with the equivalent field names in cri-containerd's configuration so that users can more easily follow documentation from the runtime vendor written for cri-containerd and apply it to daemon.json. Signed-off-by: Cory Snider <csnider@mirantis.com>
* Fix containerd task deletion after failed startCory Snider2022-11-021-1/+1
| | | | | | | | | | | | | Deleting a containerd task whose status is Created fails with a "precondition failed" error. This is because (aside from Windows) a process is spawned when the task is created, and deleting the task while the process is running would leak the process if it was allowed. libcontainerd and the containerd plugin executor mistakenly try to clean up from a failed start by deleting the created task, which will always fail with the aforementined error. Change them to pass the `WithProcessKill` delete option so the cleanup has a chance to succeed. Signed-off-by: Cory Snider <csnider@mirantis.com>
* Share logic to create-or-replace a containerCory Snider2022-08-241-32/+2
| | | | | | | | | The existing logic to handle container ID conflicts when attempting to create a plugin container is not nearly as robust as the implementation in daemon for user containers. Extract and refine the logic from daemon and use it in the plugin executor. Signed-off-by: Cory Snider <csnider@mirantis.com>
* Refactor libcontainerd to minimize c8d RPCsCory Snider2022-08-241-29/+103
| | | | | | | | | | | | | | | | | | | | | | | | The containerd client is very chatty at the best of times. Because the libcontained API is stateless and references containers and processes by string ID for every method call, the implementation is essentially forced to use the containerd client in a way which amplifies the number of redundant RPCs invoked to perform any operation. The libcontainerd remote implementation has to reload the containerd container, task and/or process metadata for nearly every operation. This in turn amplifies the number of context switches between dockerd and containerd to perform any container operation or handle a containerd event, increasing the load on the system which could otherwise be allocated to workloads. Overhaul the libcontainerd interface to reduce the impedance mismatch with the containerd client so that the containerd client can be used more efficiently. Split the API out into container, task and process interfaces which the consumer is expected to retain so that libcontainerd can retain state---especially the analogous containerd client objects---without having to manage any state-store inside the libcontainerd client. Signed-off-by: Cory Snider <csnider@mirantis.com>
* plugin: Executor.Signal() accept syscall.SignalSebastiaan van Stijn2022-05-051-2/+2
| | | | | | | This helps reducing some type-juggling / conversions further up the stack. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
* libcontainerd: SignalProcess(): accept syscall.SignalSebastiaan van Stijn2022-05-051-1/+2
| | | | | | | This helps reducing some type-juggling / conversions further up the stack. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
* daemon: move default namespaces to daemon/configSebastiaan van Stijn2022-04-171-3/+0
| | | | | | | Keeping the defaults in a single location, which also reduces the list of imports needed. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
* Configure shims from runtime configBrian Goff2020-07-131-9/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In dockerd we already have a concept of a "runtime", which specifies the OCI runtime to use (e.g. runc). This PR extends that config to add containerd shim configuration. This option is only exposed within the daemon itself (cannot be configured in daemon.json). This is due to issues in supporting unknown shims which will require more design work. What this change allows us to do is keep all the runtime config in one place. So the default "runc" runtime will just have it's already existing shim config codified within the runtime config alone. I've also added 2 more "stock" runtimes which are basically runc+shimv1 and runc+shimv2. These new runtime configurations are: - io.containerd.runtime.v1.linux - runc + v1 shim using the V1 shim API - io.containerd.runc.v2 - runc + shim v2 These names coincide with the actual names of the containerd shims. This allows the user to essentially control what shim is going to be used by either specifying these as a `--runtime` on container create or by setting `--default-runtime` on the daemon. For custom/user-specified runtimes, the default shim config (currently shim v1) is used. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
* cgroup2: use shim V2Akihiro Suda2020-01-011-2/+2
| | | | | | | | | | * Requires containerd binaries from containerd/containerd#3799 . Metrics are unimplemented yet. * Works with crun v0.10.4, but `--security-opt seccomp=unconfined` is needed unless using master version of libseccomp ( containers/crun#156, seccomp/libseccomp#177 ) * Doesn't work with master runc yet * Resource limitations are unimplemented Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
* goimports: fix importsSebastiaan van Stijn2019-09-181-1/+1
| | | | | | | Format the source according to latest goimports. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
* Add (hidden) flags to set containerd namespacesBrian Goff2019-07-111-2/+2
| | | | | | | | | | | | This allows our tests, which all share a containerd instance, to be a bit more isolated by setting the containerd namespaces to the generated daemon ID's rather than the default namespaces. This came about because I found in some cases we had test daemons failing to start (really very slow to start) because it was (seemingly) processing events from other tests. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
* Remove inmemory container mapMichael Crosby2019-04-052-174/+15
| | | | Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
* Remove libcontainerd status typeMichael Crosby2019-04-042-7/+8
| | | | Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
* Windows: Experimental: Allow containerd for runtimeJohn Howard2019-03-122-16/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: John Howard <jhoward@microsoft.com> This is the first step in refactoring moby (dockerd) to use containerd on Windows. Similar to the current model in Linux, this adds the option to enable it for runtime. It does not switch the graphdriver to containerd snapshotters. - Refactors libcontainerd to a series of subpackages so that either a "local" containerd (1) or a "remote" (2) containerd can be loaded as opposed to conditional compile as "local" for Windows and "remote" for Linux. - Updates libcontainerd such that Windows has an option to allow the use of a "remote" containerd. Here, it communicates over a named pipe using GRPC. This is currently guarded behind the experimental flag, an environment variable, and the providing of a pipename to connect to containerd. - Infrastructure pieces such as under pkg/system to have helper functions for determining whether containerd is being used. (1) "local" containerd is what the daemon on Windows has used since inception. It's not really containerd at all - it's simply local invocation of HCS APIs directly in-process from the daemon through the Microsoft/hcsshim library. (2) "remote" containerd is what docker on Linux uses for it's runtime. It means that there is a separate containerd service running, and docker communicates over GRPC to it. To try this out, you will need to start with something like the following: Window 1: containerd --log-level debug Window 2: $env:DOCKER_WINDOWS_CONTAINERD=1 dockerd --experimental -D --containerd \\.\pipe\containerd-containerd You will need the following binary from github.com/containerd/containerd in your path: - containerd.exe You will need the following binaries from github.com/Microsoft/hcsshim in your path: - runhcs.exe - containerd-shim-runhcs-v1.exe For LCOW, it will require and initrd.img and kernel in `C:\Program Files\Linux Containers`. This is no different to the current requirements. However, you may need updated binaries, particularly initrd.img built from Microsoft/opengcs as (at the time of writing), Linuxkit binaries are somewhat out of date. Note that containerd and hcsshim for HCS v2 APIs do not yet support all the required functionality needed for docker. This will come in time - this is a baby (although large) step to migrating Docker on Windows to containerd. Note that the HCS v2 APIs are only called on RS5+ builds. RS1..RS4 will still use HCS v1 APIs as the v2 APIs were not fully developed enough on these builds to be usable. This abstraction is done in HCSShim. (Referring specifically to runtime) Note the LCOW graphdriver still uses HCS v1 APIs regardless. Note also that this does not migrate docker to use containerd snapshotters rather than graphdrivers. This needs to be done in conjunction with Linux also doing the same switch.
* Use assert.NilError() instead of assert.Assert()Sebastiaan van Stijn2019-01-211-3/+3
| | | | Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
* libcontainerd: split client and supervisorDerek McGowan2018-08-061-4/+6
| | | | | | | Adds a supervisor package for starting and monitoring containerd. Separates grpc connection allowing access from daemon. Signed-off-by: Derek McGowan <derek@mcgstyle.net>
* Update tests to use gotest.tools 👼Vincent Demeester2018-06-131-1/+1
| | | | Signed-off-by: Vincent Demeester <vincent@sbr.pm>
* vendor: update containerd to 63522d9Tonis Tiigi2018-06-081-1/+1
| | | Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
* Fix panic on daemon restart with running pluginBrian Goff2018-06-071-26/+19
| | | | | | | | | | | | | | | | | | | | Scenario: Daemon is ungracefully shutdown and leaves plugins running (no live-restore). Daemon comes back up. The next time a container tries to use that plugin it will cause a daemon panic because the plugin client is not set. This fixes that by ensuring that the plugin does get shutdown. Note, I do not think there would be any harm in just re-attaching to the running plugin instead of shutting it down, however historically we shut down plugins and containers when live-restore is not enabled. [kir@: consolidate code to deleteTaskAndContainer, a few minor nits] Signed-off-by: Brian Goff <cpuguy83@gmail.com> Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
* Various code-cleanupSebastiaan van Stijn2018-05-231-1/+1
| | | | | | remove unnescessary import aliases, brackets, and so on. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
* Make sure plugin container is removed on failureBrian Goff2018-03-282-7/+191
| | | | Signed-off-by: Brian Goff <cpuguy83@gmail.com>
* Add canonical import commentDaniel Nephin2018-02-051-1/+1
| | | | Signed-off-by: Daniel Nephin <dnephin@docker.com>
* Move api/errdefs to errdefsBrian Goff2018-01-111-1/+1
| | | | Signed-off-by: Brian Goff <cpuguy83@gmail.com>
* Remove libcontainerd.IOPipeDaniel Nephin2018-01-091-1/+1
| | | | | | replaced with cio.DirectIO Signed-off-by: Daniel Nephin <dnephin@docker.com>
* daemon, plugin: follow containerd namespace conventionsStephen J Day2017-12-151-1/+1
| | | | | | | | | | | Follow the conventions for namespace naming set out by other projects, such as linuxkit and cri-containerd. Typically, they are some sort of host name, with a subdomain describing functionality of the namespace. In the case of linuxkit, services are launched in `services.linuxkit`. In cri-containerd, pods are launched in `k8s.io`, making it clear that these are from kubernetes. Signed-off-by: Stephen J Day <stephen.day@docker.com>
* Update daemon code for containerd API changesMichael Crosby2017-11-301-12/+12
| | | | Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
* Update libcontainerd to use containerd 1.0Kenfe-Mickael Laventure2017-10-201-17/+86
| | | | Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
* Decouple plugin manager from libcontainerd packageBrian Goff2017-09-191-0/+77
libcontainerd has a bunch of platform dependent code and huge interfaces that are a pain implement. To make the plugin manager a bit easier to work with, extract the plugin executor into an interface and move the containerd implementation to a separate package. Signed-off-by: Brian Goff <cpuguy83@gmail.com>