@@ -116,10 +116,10 @@ type StartOptions struct {
116
116
}
117
117
118
118
// 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 {
120
120
return & Helper {
121
121
client : client ,
122
- dockerHelper : dockerhelper . NewHelper ( client , nil ) ,
122
+ dockerHelper : dockerHelper ,
123
123
execHelper : dockerexec .NewExecHelper (client , containerName ),
124
124
hostHelper : hostHelper ,
125
125
runHelper : run .NewRunHelper (client ),
@@ -730,6 +730,23 @@ func (h *Helper) updateConfig(configDir string, opt *StartOptions) error {
730
730
nodeCfg .DNSIP = ""
731
731
}
732
732
nodeCfg .DNSBindAddress = ""
733
+
734
+ if h .supportsEnforceNodeAllocatableArgument () {
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
+ if cgroupDriver != "systemd" {
745
+ nodeCfg .KubeletArguments ["enforce-node-allocatable" ] = []string {"" }
746
+ nodeCfg .KubeletArguments ["cgroups-per-qos" ] = []string {"false" }
747
+ }
748
+ }
749
+
733
750
cfgBytes , err = configapilatest .WriteYAML (nodeCfg )
734
751
if err != nil {
735
752
return err
@@ -784,3 +801,25 @@ func getUsedPorts(data string) map[int]struct{} {
784
801
glog .V (2 ).Infof ("Used ports in container: %#v" , ports )
785
802
return ports
786
803
}
804
+
805
+ func (h * Helper ) supportsEnforceNodeAllocatableArgument () bool {
806
+ script := `#!/bin/bash
807
+
808
+ # Exit with an error
809
+ set -e
810
+
811
+ # Ensure we have a link to the openshift binary named kubelet
812
+ if [[ ! -f /usr/bin/kubelet ]]; then
813
+ ln -s /usr/bin/openshift /usr/bin/kubelet
814
+ fi
815
+
816
+ kubelet --help | grep -- "--enforce-node-allocatable"
817
+ `
818
+ rc , err := h .runHelper .New ().Image (h .image ).
819
+ DiscardContainer ().
820
+ Entrypoint ("/bin/bash" ).
821
+ Command ("-c" , script ).
822
+ Run ()
823
+
824
+ return rc == 0 && err == nil
825
+ }
0 commit comments