diff --git a/pkg/cri/sbserver/podsandbox/sandbox_run.go b/pkg/cri/sbserver/podsandbox/sandbox_run.go index d5aef016f..c4de080b2 100644 --- a/pkg/cri/sbserver/podsandbox/sandbox_run.go +++ b/pkg/cri/sbserver/podsandbox/sandbox_run.go @@ -86,7 +86,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller return nil, fmt.Errorf("failed to get image from containerd %q: %w", image.ID, err) } - ociRuntime, err := c.getSandboxRuntime(config, sandboxInfo.Runtime.Name) + ociRuntime, err := c.getSandboxRuntime(config, metadata.RuntimeHandler) if err != nil { return nil, fmt.Errorf("failed to get sandbox runtime: %w", err) } @@ -263,6 +263,7 @@ func (c *Controller) Start(ctx context.Context, id string) (resp *api.Controller SandboxID: id, Pid: task.Pid(), CreatedAt: protobuf.ToTimestamp(info.CreatedAt), + Labels: labels, } return resp, nil diff --git a/pkg/cri/sbserver/sandbox_run.go b/pkg/cri/sbserver/sandbox_run.go index 4fda0b739..90642f2cb 100644 --- a/pkg/cri/sbserver/sandbox_run.go +++ b/pkg/cri/sbserver/sandbox_run.go @@ -86,10 +86,29 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox } }() - sandboxInfo := sb.Sandbox{ - ID: id, - // TODO: runtime handler can be an empty string, should use default one and enable back validation of this field in metadata store. - Runtime: sb.RuntimeOpts{Name: r.GetRuntimeHandler()}, + var ( + err error + sandboxInfo = sb.Sandbox{ID: id} + ) + + ociRuntime, err := c.getSandboxRuntime(config, r.GetRuntimeHandler()) + if err != nil { + return nil, fmt.Errorf("unable to get OCI runtime for sandbox %q: %w", id, err) + } + + sandboxInfo.Runtime.Name = ociRuntime.Type + + // Retrieve runtime options + runtimeOpts, err := generateRuntimeOptions(ociRuntime, c.config) + if err != nil { + return nil, fmt.Errorf("failed to generate sandbox runtime options: %w", err) + } + + if runtimeOpts != nil { + sandboxInfo.Runtime.Options, err = typeurl.MarshalAny(runtimeOpts) + if err != nil { + return nil, fmt.Errorf("failed to marshal runtime options: %w", err) + } } // Save sandbox name @@ -127,11 +146,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox } }() - var ( - podNetwork = true - err error - ) - + podNetwork := true if goruntime.GOOS != "windows" && config.GetLinux().GetSecurityContext().GetNamespaceOptions().GetNetwork() == runtime.NamespaceMode_NODE { // Pod network is not needed on linux with host network. @@ -143,6 +158,11 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox podNetwork = false } + // No CNI on darwin yet + if goruntime.GOOS == "darwin" { + podNetwork = false + } + if podNetwork { netStart := time.Now() // If it is not in host network namespace then create a namespace and set the sandbox diff --git a/pkg/cri/sbserver/service.go b/pkg/cri/sbserver/service.go index 289b6a2b1..78880d822 100644 --- a/pkg/cri/sbserver/service.go +++ b/pkg/cri/sbserver/service.go @@ -27,14 +27,12 @@ import ( "time" "github.com/containerd/containerd" - sandboxapi "github.com/containerd/containerd/api/services/sandbox/v1" "github.com/containerd/containerd/oci" "github.com/containerd/containerd/pkg/cri/sbserver/podsandbox" "github.com/containerd/containerd/pkg/cri/streaming" "github.com/containerd/containerd/pkg/kmutex" "github.com/containerd/containerd/plugin" "github.com/containerd/containerd/sandbox" - "github.com/containerd/containerd/sandbox/proxy" runtime_alpha "github.com/containerd/containerd/third_party/k8s.io/cri-api/pkg/apis/runtime/v1alpha2" "github.com/containerd/go-cni" "github.com/sirupsen/logrus" @@ -191,7 +189,7 @@ func NewCRIService(config criconfig.Config, client *containerd.Client) (CRIServi // Load all sandbox controllers(pod sandbox controller and remote shim controller) c.sandboxControllers[criconfig.ModePodSandbox] = podsandbox.New(config, client, c.sandboxStore, c.os, c, c.baseOCISpecs) - c.sandboxControllers[criconfig.ModeShim] = proxy.NewSandboxController(sandboxapi.NewControllerClient(client.Conn())) + c.sandboxControllers[criconfig.ModeShim] = client.SandboxController() return c, nil } diff --git a/services/sandbox/controller_local.go b/services/sandbox/controller_local.go index 4215a59dc..ec62317f9 100644 --- a/services/sandbox/controller_local.go +++ b/services/sandbox/controller_local.go @@ -112,6 +112,7 @@ func (c *controllerLocal) Create(ctx context.Context, in *api.ControllerCreateRe Rootfs: in.Rootfs, Options: in.Options, }); err != nil { + // TODO: Delete sandbox shim here. return nil, fmt.Errorf("failed to start sandbox %s: %w", in.SandboxID, err) }