Skip to content

Commit ef6b4e9

Browse files
committed
cluster up: set docker cgroup driver on kubelet config
On kubelet versions that support the --cgroup-driver argument, set the cgroup-driver flag to the one reported by docker.
1 parent 94d3449 commit ef6b4e9

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

pkg/bootstrap/docker/dockerhelper/helper.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,14 @@ func (h *Helper) dockerInfo() (*dockertypes.Info, error) {
7777
return h.info, nil
7878
}
7979

80+
func (h *Helper) CgroupDriver() (string, error) {
81+
info, err := h.dockerInfo()
82+
if err != nil {
83+
return "", err
84+
}
85+
return info.CgroupDriver, nil
86+
}
87+
8088
// HasInsecureRegistryArg checks whether the docker daemon is configured with
8189
// the appropriate insecure registry argument
8290
func (h *Helper) HasInsecureRegistryArg() (bool, error) {

pkg/bootstrap/docker/openshift/helper.go

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,10 @@ type StartOptions struct {
116116
}
117117

118118
// NewHelper creates a new OpenShift helper
119-
func NewHelper(client *docker.Client, hostHelper *host.HostHelper, image, containerName, publicHostname, routingSuffix string) *Helper {
119+
func NewHelper(client *docker.Client, dockerHelper *dockerhelper.Helper, hostHelper *host.HostHelper, image, containerName, publicHostname, routingSuffix string) *Helper {
120120
return &Helper{
121121
client: client,
122-
dockerHelper: dockerhelper.NewHelper(client, nil),
122+
dockerHelper: dockerHelper,
123123
execHelper: dockerexec.NewExecHelper(client, containerName),
124124
hostHelper: hostHelper,
125125
runHelper: run.NewRunHelper(client),
@@ -730,6 +730,19 @@ func (h *Helper) updateConfig(configDir string, opt *StartOptions) error {
730730
nodeCfg.DNSIP = ""
731731
}
732732
nodeCfg.DNSBindAddress = ""
733+
734+
if h.supportsCgroupDriver() {
735+
// Set the cgroup driver from the current docker
736+
cgroupDriver, err := h.dockerHelper.CgroupDriver()
737+
if err != nil {
738+
return err
739+
}
740+
if nodeCfg.KubeletArguments == nil {
741+
nodeCfg.KubeletArguments = configapi.ExtendedArguments{}
742+
}
743+
nodeCfg.KubeletArguments["cgroup-driver"] = []string{cgroupDriver}
744+
}
745+
733746
cfgBytes, err = configapilatest.WriteYAML(nodeCfg)
734747
if err != nil {
735748
return err
@@ -784,3 +797,25 @@ func getUsedPorts(data string) map[int]struct{} {
784797
glog.V(2).Infof("Used ports in container: %#v", ports)
785798
return ports
786799
}
800+
801+
func (h *Helper) supportsCgroupDriver() bool {
802+
script := `#!/bin/bash
803+
804+
# Exit with an error
805+
set -e
806+
807+
# Ensure we have a link to the openshift binary named kubelet
808+
if [[ ! -f /usr/bin/kubelet ]]; then
809+
ln -s /usr/bin/openshift /usr/bin/kubelet
810+
fi
811+
812+
kubelet --help | grep -- "--cgroup-driver"
813+
`
814+
rc, err := h.runHelper.New().Image(h.image).
815+
DiscardContainer().
816+
Entrypoint("/bin/bash").
817+
Command("-c", script).
818+
Run()
819+
820+
return rc == 0 && err == nil
821+
}

pkg/bootstrap/docker/up.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1071,7 +1071,7 @@ func (c *ClientStartConfig) Clients() (*client.Client, kclientset.Interface, err
10711071
// OpenShiftHelper returns a helper object to work with OpenShift on the server
10721072
func (c *CommonStartConfig) OpenShiftHelper() *openshift.Helper {
10731073
if c.openshiftHelper == nil {
1074-
c.openshiftHelper = openshift.NewHelper(c.dockerClient, c.HostHelper(), c.openshiftImage(), openshift.OpenShiftContainer, c.PublicHostname, c.RoutingSuffix)
1074+
c.openshiftHelper = openshift.NewHelper(c.dockerClient, c.DockerHelper(), c.HostHelper(), c.openshiftImage(), openshift.OpenShiftContainer, c.PublicHostname, c.RoutingSuffix)
10751075
}
10761076
return c.openshiftHelper
10771077
}

0 commit comments

Comments
 (0)