From b022de5f376c871f97b11c250360a6af68e8239a Mon Sep 17 00:00:00 2001 From: kuramal Date: Mon, 10 Jun 2019 11:32:22 +0800 Subject: [PATCH] add cni plugin config file max num config, set go-cni to commit 22460c0 Signed-off-by: kuramal --- docs/config.md | 6 +++++ pkg/config/config.go | 3 +++ pkg/server/service.go | 1 + vendor.conf | 2 +- vendor/github.com/containerd/go-cni/cni.go | 23 +++++++++++--------- vendor/github.com/containerd/go-cni/opts.go | 11 +++++++++- vendor/github.com/containerd/go-cni/types.go | 8 ++++--- 7 files changed, 39 insertions(+), 15 deletions(-) diff --git a/docs/config.md b/docs/config.md index f6da837e3..1629b8f1a 100644 --- a/docs/config.md +++ b/docs/config.md @@ -149,6 +149,12 @@ The explanation and default value of each configuration item are as follows: # conf_dir is the directory in which the admin places a CNI conf. conf_dir = "/etc/cni/net.d" + # max_conf_num is the max number of CNI plugin config file will load + # By default, the containerd will load only 1 CRI plugin. If you want load multiple CRI plugins, + # set max_conf_num > 1. You should know exactly each CRI plugin do, whether they are compatible. + # max i<= 0 means no limit. + max_conf_num = 1 + # conf_template is the file path of golang template used to generate # cni config. # If this is set, containerd will generate a cni config file from the diff --git a/pkg/config/config.go b/pkg/config/config.go index 41aabfefb..894951085 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -71,6 +71,8 @@ type CniConfig struct { NetworkPluginBinDir string `toml:"bin_dir" json:"binDir"` // NetworkPluginConfDir is the directory in which the admin places a CNI conf. NetworkPluginConfDir string `toml:"conf_dir" json:"confDir"` + // NetworkPluginMaxConfNum is the max number of plugin config file will load + NetworkPluginMaxConfNum int `toml:"max_conf_num" json:"maxConfNum"` // NetworkPluginConfTemplate is the file path of golang template used to generate // cni config. // When it is set, containerd will get cidr from kubelet to replace {{.PodCIDR}} in @@ -202,6 +204,7 @@ func DefaultConfig() PluginConfig { CniConfig: CniConfig{ NetworkPluginBinDir: "/opt/cni/bin", NetworkPluginConfDir: "/etc/cni/net.d", + NetworkPluginMaxConfNum: 1, NetworkPluginConfTemplate: "", }, ContainerdConfig: ContainerdConfig{ diff --git a/pkg/server/service.go b/pkg/server/service.go index dba45f372..6c35d810d 100644 --- a/pkg/server/service.go +++ b/pkg/server/service.go @@ -148,6 +148,7 @@ func NewCRIService(config criconfig.Config, client *containerd.Client) (CRIServi // of the default network interface as the pod IP. c.netPlugin, err = cni.New(cni.WithMinNetworkCount(networkAttachCount), cni.WithPluginConfDir(config.NetworkPluginConfDir), + cni.WithPluginMaxConfNum(config.NetworkPluginMaxConfNum), cni.WithPluginDir([]string{config.NetworkPluginBinDir})) if err != nil { return nil, errors.Wrap(err, "failed to initialize cni") diff --git a/vendor.conf b/vendor.conf index 22446c36c..053573008 100644 --- a/vendor.conf +++ b/vendor.conf @@ -5,7 +5,7 @@ github.com/containerd/console c12b1e7919c14469339a5d38f2f8ed9b64a9de23 github.com/containerd/containerd 32e788a8be3ab4418265693d9e742c30495fdd4c github.com/containerd/continuity bd77b46c8352f74eb12c85bdc01f4b90f69d66b4 github.com/containerd/fifo 3d5202aec260678c48179c56f40e6f38a095738c -github.com/containerd/go-cni e1dc76fa62e1665cf5d85fd617c6191d66f0e72d +github.com/containerd/go-cni 22460c018b64cf8bf4151b3ff9c4d077e6a88cbf github.com/containerd/go-runc 5a6d9f37cfa36b15efba46dc7ea349fa9b7143c3 github.com/containerd/ttrpc f02858b1457c5ca3aaec3a0803eb0d59f96e41d6 github.com/containerd/typeurl a93fcdb778cd272c6e9b3028b2f42d813e785d40 diff --git a/vendor/github.com/containerd/go-cni/cni.go b/vendor/github.com/containerd/go-cni/cni.go index c706793ed..bdd63b841 100644 --- a/vendor/github.com/containerd/go-cni/cni.go +++ b/vendor/github.com/containerd/go-cni/cni.go @@ -41,10 +41,11 @@ type CNI interface { } type ConfigResult struct { - PluginDirs []string - PluginConfDir string - Prefix string - Networks []*ConfNetwork + PluginDirs []string + PluginConfDir string + PluginMaxConfNum int + Prefix string + Networks []*ConfNetwork } type ConfNetwork struct { @@ -78,9 +79,10 @@ type libcni struct { func defaultCNIConfig() *libcni { return &libcni{ config: config{ - pluginDirs: []string{DefaultCNIDir}, - pluginConfDir: DefaultNetDir, - prefix: DefaultPrefix, + pluginDirs: []string{DefaultCNIDir}, + pluginConfDir: DefaultNetDir, + pluginMaxConfNum: DefaultMaxConfNum, + prefix: DefaultPrefix, }, cniConfig: &cnilibrary.CNIConfig{ Path: []string{DefaultCNIDir}, @@ -187,9 +189,10 @@ func (c *libcni) GetConfig() *ConfigResult { c.RLock() defer c.RUnlock() r := &ConfigResult{ - PluginDirs: c.config.pluginDirs, - PluginConfDir: c.config.pluginConfDir, - Prefix: c.config.prefix, + PluginDirs: c.config.pluginDirs, + PluginConfDir: c.config.pluginConfDir, + PluginMaxConfNum: c.config.pluginMaxConfNum, + Prefix: c.config.prefix, } for _, network := range c.networks { conf := &NetworkConfList{ diff --git a/vendor/github.com/containerd/go-cni/opts.go b/vendor/github.com/containerd/go-cni/opts.go index b277dd37d..4a6f66d05 100644 --- a/vendor/github.com/containerd/go-cni/opts.go +++ b/vendor/github.com/containerd/go-cni/opts.go @@ -54,6 +54,15 @@ func WithPluginConfDir(dir string) CNIOpt { } } +// WithPluginMaxConfNum can be used to configure the +// max cni plugin config file num. +func WithPluginMaxConfNum(max int) CNIOpt { + return func(c *libcni) error { + c.pluginMaxConfNum = max + return nil + } +} + // WithMinNetworkCount can be used to configure the // minimum networks to be configured and initialized // for the status to report success. By default its 1. @@ -159,7 +168,7 @@ func WithConfListFile(fileName string) CNIOpt { // the convention chosen is - the first network configuration in the sorted // list of network conf files as the default network. func WithDefaultConf(c *libcni) error { - return loadFromConfDir(c, 1) + return loadFromConfDir(c, c.pluginMaxConfNum) } // WithAllConf can be used to detect all network config diff --git a/vendor/github.com/containerd/go-cni/types.go b/vendor/github.com/containerd/go-cni/types.go index 9a0fe87ff..8583050e4 100644 --- a/vendor/github.com/containerd/go-cni/types.go +++ b/vendor/github.com/containerd/go-cni/types.go @@ -20,14 +20,16 @@ const ( CNIPluginName = "cni" DefaultNetDir = "/etc/cni/net.d" DefaultCNIDir = "/opt/cni/bin" + DefaultMaxConfNum = 1 VendorCNIDirTemplate = "%s/opt/%s/bin" DefaultPrefix = "eth" ) type config struct { - pluginDirs []string - pluginConfDir string - prefix string + pluginDirs []string + pluginConfDir string + pluginMaxConfNum int + prefix string } type PortMapping struct {