From 0d6774f4aff40a4d37a1055461c8a2b7ef0e30b6 Mon Sep 17 00:00:00 2001 From: abhi Date: Thu, 30 Nov 2017 16:26:01 -0800 Subject: [PATCH] Setting containerd shim cgroup same as pod cgroup Signed-off-by: abhi --- pkg/opts/task.go | 22 ++++++++++++++++++++++ pkg/server/container_start.go | 7 ++++++- pkg/server/sandbox_run.go | 9 +++++++-- 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 pkg/opts/task.go diff --git a/pkg/opts/task.go b/pkg/opts/task.go new file mode 100644 index 000000000..37113ee38 --- /dev/null +++ b/pkg/opts/task.go @@ -0,0 +1,22 @@ +package opts + +import ( + "context" + + "github.com/containerd/containerd" + "github.com/containerd/containerd/linux/runctypes" +) + +// WithContainerdShimCgroup returns function that sets the containerd +// shim cgroup path +func WithContainerdShimCgroup(path string) containerd.NewTaskOpts { + return func(_ context.Context, _ *containerd.Client, r *containerd.TaskInfo) error { + r.Options = &runctypes.CreateOptions{ + ShimCgroup: path, + } + return nil + } +} + +//TODO: Since Options is an interface different WithXXX will be needed to set different +// combinations of CreateOptions. diff --git a/pkg/server/container_start.go b/pkg/server/container_start.go index a03d5c7ed..21d3edbc5 100644 --- a/pkg/server/container_start.go +++ b/pkg/server/container_start.go @@ -27,6 +27,7 @@ import ( "golang.org/x/net/context" "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" + criopts "github.com/kubernetes-incubator/cri-containerd/pkg/opts" cio "github.com/kubernetes-incubator/cri-containerd/pkg/server/io" containerstore "github.com/kubernetes-incubator/cri-containerd/pkg/store/container" ) @@ -126,7 +127,11 @@ func (c *criContainerdService) startContainer(ctx context.Context, return cntr.IO, nil } - task, err := container.NewTask(ctx, ioCreation) + var taskOpts []containerd.NewTaskOpts + if cgroup := sandbox.Config.GetLinux().GetCgroupParent(); cgroup != "" { + taskOpts = append(taskOpts, criopts.WithContainerdShimCgroup(cgroup)) + } + task, err := container.NewTask(ctx, ioCreation, taskOpts...) if err != nil { return fmt.Errorf("failed to create containerd task: %v", err) } diff --git a/pkg/server/sandbox_run.go b/pkg/server/sandbox_run.go index ce7e24fa6..7eec0c0c1 100644 --- a/pkg/server/sandbox_run.go +++ b/pkg/server/sandbox_run.go @@ -36,6 +36,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" customopts "github.com/kubernetes-incubator/cri-containerd/pkg/containerd/opts" + criopts "github.com/kubernetes-incubator/cri-containerd/pkg/opts" sandboxstore "github.com/kubernetes-incubator/cri-containerd/pkg/store/sandbox" "github.com/kubernetes-incubator/cri-containerd/pkg/util" ) @@ -205,9 +206,13 @@ func (c *criContainerdService) RunPodSandbox(ctx context.Context, r *runtime.Run glog.V(5).Infof("Create sandbox container (id=%q, name=%q).", id, name) // We don't need stdio for sandbox container. - task, err := container.NewTask(ctx, containerdio.NullIO) + var taskOpts []containerd.NewTaskOpts + if cgroup := config.GetLinux().GetCgroupParent(); cgroup != "" { + taskOpts = append(taskOpts, criopts.WithContainerdShimCgroup(cgroup)) + } + task, err := container.NewTask(ctx, containerdio.NullIO, taskOpts...) if err != nil { - return nil, fmt.Errorf("failed to create task for sandbox %q: %v", id, err) + return nil, fmt.Errorf("failed to create containerd task: %v", err) } defer func() { if retErr != nil {