瀏覽代碼

Add configuration option for containerd cri

Disable cri plugin by default in containerd and
allows an option to enable the plugin. This only
has an effect on containerd when supervised by
dockerd. When containerd is managed outside of
dockerd, the configuration is not effected.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
Derek McGowan 7 年之前
父節點
當前提交
8fb5f4d5c9

+ 1 - 0
cmd/dockerd/config.go

@@ -29,6 +29,7 @@ func installCommonConfigFlags(conf *config.Config, flags *pflag.FlagSet) {
 	flags.StringVarP(&conf.Root, "graph", "g", defaultDataRoot, "Root of the Docker runtime")
 	flags.StringVar(&conf.ExecRoot, "exec-root", defaultExecRoot, "Root directory for execution state files")
 	flags.StringVar(&conf.ContainerdAddr, "containerd", "", "containerd grpc address")
+	flags.BoolVar(&conf.CriContainerd, "cri-containerd", false, "start containerd with cri")
 
 	// "--graph" is "soft-deprecated" in favor of "data-root". This flag was added
 	// before Docker 1.0, so won't be removed, only hidden, to discourage its usage.

+ 3 - 0
cmd/dockerd/daemon_unix.go

@@ -56,6 +56,9 @@ func (cli *DaemonCli) getPlatformRemoteOptions() ([]libcontainerd.RemoteOption,
 	} else {
 		opts = append(opts, libcontainerd.WithStartDaemon(true))
 	}
+	if !cli.Config.CriContainerd {
+		opts = append(opts, libcontainerd.WithPlugin("cri", nil))
+	}
 
 	return opts, nil
 }

+ 5 - 0
daemon/config/config.go

@@ -198,6 +198,11 @@ type CommonConfig struct {
 	// ContainerAddr is the address used to connect to containerd if we're
 	// not starting it ourselves
 	ContainerdAddr string `json:"containerd,omitempty"`
+
+	// CriContainerd determines whether a supervised containerd instance
+	// should be configured with the CRI plugin enabled. This allows using
+	// Docker's containerd instance directly with a Kubernetes kubelet.
+	CriContainerd bool `json:"cri-containerd,omitempty"`
 }
 
 // IsValueSet returns true if a configuration value

+ 8 - 0
libcontainerd/remote_daemon_linux.go

@@ -31,6 +31,14 @@ func (r *remote) setDefaults() {
 	if r.OOMScore == 0 {
 		r.OOMScore = -999
 	}
+
+	for key, conf := range r.pluginConfs.Plugins {
+		if conf == nil {
+			r.DisabledPlugins = append(r.DisabledPlugins, key)
+			delete(r.pluginConfs.Plugins, key)
+		}
+	}
+
 	if r.snapshotter == "" {
 		r.snapshotter = "overlay"
 	}

+ 1 - 0
libcontainerd/remote_daemon_options.go

@@ -119,6 +119,7 @@ func (s snapshotter) Apply(r Remote) error {
 // WithPlugin allow configuring a containerd plugin
 // configuration values passed needs to be quoted if quotes are needed in
 // the toml format.
+// Setting the config to nil will disable a built-in plugin
 func WithPlugin(name string, conf interface{}) RemoteOption {
 	return pluginConf{
 		name: name,