Skip to content

Commit 16d2b7a

Browse files
committed
Add convenience container-runtime flag for kubeadm
To enable the cri-o runtime you may now just use `minikube start --container-runtime=cri-o --bootstrapper=kubeadm` or `minikube start --container-runtiume=crio --bootstrapper=kubeadm` or `minikube start --extra-config=kubelet.container-runtime=remote --extra-config=kubelet.container-runtime-endpoint=/var/run/crio.sock --extra-config=image-service-endpoint=/var/run/crio.sock`
1 parent 967913b commit 16d2b7a

File tree

3 files changed

+72
-11
lines changed

3 files changed

+72
-11
lines changed

Diff for: pkg/minikube/bootstrapper/kubeadm/kubeadm.go

+32-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
"github.com/docker/machine/libmachine"
2929
"github.com/docker/machine/libmachine/state"
30+
"github.com/golang/glog"
3031
download "github.com/jimmidyson/go-download"
3132
"github.com/pkg/errors"
3233
"golang.org/x/sync/errgroup"
@@ -178,6 +179,30 @@ func (k *KubeadmBootstrapper) SetupCerts(k8s bootstrapper.KubernetesConfig) erro
178179
return bootstrapper.SetupCerts(k.c, k8s)
179180
}
180181

182+
// SetContainerRuntime possibly sets the container runtime, if it hasn't already
183+
// been specified by the extra-config option. It has a set of defaults known to
184+
// work for a particular runtime.
185+
func SetContainerRuntime(cfg map[string]string, runtime string) map[string]string {
186+
if _, ok := cfg["container-runtime"]; ok {
187+
glog.Infoln("Container runtime already set through extra options, ignoring --container-runtime flag.")
188+
return cfg
189+
}
190+
191+
switch runtime {
192+
case "crio", "cri-o":
193+
cfg["container-runtime"] = "remote"
194+
cfg["container-runtime-endpoint"] = "/var/run/crio.sock"
195+
cfg["image-service-endpoint"] = "/var/run/crio.sock"
196+
cfg["runtime-request-timeout"] = "15m"
197+
default:
198+
cfg["container-runtime"] = runtime
199+
}
200+
201+
return cfg
202+
}
203+
204+
// NewKubeletConfig generates a new systemd unit containing a configured kubelet
205+
// based on the options present in the KubernetesConfig.
181206
func NewKubeletConfig(k8s bootstrapper.KubernetesConfig) (string, error) {
182207
version, err := ParseKubernetesVersion(k8s.KubernetesVersion)
183208
if err != nil {
@@ -189,14 +214,17 @@ func NewKubeletConfig(k8s bootstrapper.KubernetesConfig) (string, error) {
189214
return "", errors.Wrap(err, "generating extra configuration for kubelet")
190215
}
191216

217+
extraOpts = SetContainerRuntime(extraOpts, k8s.ContainerRuntime)
192218
extraFlags := convertToFlags(extraOpts)
193219
b := bytes.Buffer{}
194220
opts := struct {
195-
ExtraOptions string
196-
FeatureGates string
221+
ExtraOptions string
222+
FeatureGates string
223+
ContainerRuntime string
197224
}{
198-
ExtraOptions: extraFlags,
199-
FeatureGates: k8s.FeatureGates,
225+
ExtraOptions: extraFlags,
226+
FeatureGates: k8s.FeatureGates,
227+
ContainerRuntime: k8s.ContainerRuntime,
200228
}
201229
if err := kubeletSystemdTemplate.Execute(&b, opts); err != nil {
202230
return "", err

Diff for: pkg/minikube/bootstrapper/kubeadm/templates.go

+21-7
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,31 @@ nodeName: {{.NodeName}}
4040
{{$val}}{{end}}
4141
{{end}}`))
4242

43-
var kubeletSystemdTemplate = template.Must(template.New("kubeletSystemdTemplate").Parse(`
43+
var kubeletSystemdTemplate = template.Must(template.New("kubeletSystemdTemplate").Funcs(template.FuncMap{
44+
"installWants": installWants,
45+
}).Parse(`
4446
[Service]
45-
Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true"
46-
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
47-
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.0.0.10 --cluster-domain=cluster.local"
48-
Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"
49-
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
5047
ExecStart=
51-
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_DNS_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS {{.ExtraOptions}} {{if .FeatureGates}}--feature-gates={{.FeatureGates}}{{end}}
48+
ExecStart=/usr/bin/kubelet {{.ExtraOptions}} {{if .FeatureGates}}--feature-gates={{.FeatureGates}}{{end}}
49+
50+
[Install]
51+
{{installWants .ContainerRuntime}}
5252
`))
5353

54+
func installWants(containerRuntime string) string {
55+
var wants string
56+
switch containerRuntime {
57+
case "":
58+
wants = "docker.socket"
59+
case "cri-o", "cri":
60+
wants = "crio.service"
61+
}
62+
if wants != "" {
63+
return fmt.Sprintf("Wants=%s", wants)
64+
}
65+
return ""
66+
}
67+
5468
const kubeletService = `
5569
[Unit]
5670
Description=kubelet: The Kubernetes Node Agent

Diff for: pkg/minikube/bootstrapper/kubeadm/versions.go

+19
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,17 @@ type VersionedExtraOption struct {
149149
GreaterThanOrEqual semver.Version
150150
}
151151

152+
// NewUnversionedOption returns a VersionedExtraOption that applies to all versions.
153+
func NewUnversionedOption(component, k, v string) VersionedExtraOption {
154+
return VersionedExtraOption{
155+
Option: util.ExtraOption{
156+
Component: component,
157+
Key: k,
158+
Value: v,
159+
},
160+
}
161+
}
162+
152163
var versionSpecificOpts = []VersionedExtraOption{
153164
{
154165
Option: util.ExtraOption{
@@ -158,6 +169,14 @@ var versionSpecificOpts = []VersionedExtraOption{
158169
},
159170
GreaterThanOrEqual: semver.MustParse("1.8.0-alpha.0"),
160171
},
172+
NewUnversionedOption(Kubelet, "kubeconfig", "/etc/kubernetes/kubelet.conf"),
173+
NewUnversionedOption(Kubelet, "require-kubeconfig", "true"),
174+
NewUnversionedOption(Kubelet, "pod-manifest-path", "/etc/kubernetes/manifests"),
175+
NewUnversionedOption(Kubelet, "allow-privileged", "true"),
176+
NewUnversionedOption(Kubelet, "cluster-dns", "10.0.0.10"),
177+
NewUnversionedOption(Kubelet, "cluster-domain", "cluster.local"),
178+
NewUnversionedOption(Kubelet, "cadvisor-port", "0"),
179+
NewUnversionedOption(Kubelet, "cgroup-driver", "cgroupfs"),
161180
}
162181

163182
func VersionIsBetween(version, gte, lte semver.Version) bool {

0 commit comments

Comments
 (0)