Specify runtime configuration for sandbox shims
Signed-off-by: Maksym Pavlenko <pavlenko.maksym@gmail.com>
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Maksym Pavlenko
					Maksym Pavlenko