Skip to content

Commit c27f52e

Browse files
committed
Add caching for kubeadm
1 parent ca3c0b5 commit c27f52e

File tree

6 files changed

+54
-18
lines changed

6 files changed

+54
-18
lines changed

cmd/minikube/cmd/start.go

+11-8
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,11 @@ assumes you have already installed one of the VM drivers: virtualbox/vmwarefusio
8888

8989
func runStart(cmd *cobra.Command, args []string) {
9090
shouldCacheImages := viper.GetBool(cacheImages)
91+
k8sVersion := viper.GetString(kubernetesVersion)
92+
clusterBootstrapper := viper.GetString(cmdcfg.Bootstrapper)
93+
9194
if shouldCacheImages {
92-
go machine.CacheImagesForBootstrapper(viper.GetString(cmdcfg.Bootstrapper))
95+
go machine.CacheImagesForBootstrapper(k8sVersion, clusterBootstrapper)
9396
}
9497
api, err := machine.NewAPIClient()
9598
if err != nil {
@@ -112,8 +115,8 @@ func runStart(cmd *cobra.Command, args []string) {
112115
os.Exit(1)
113116
}
114117

115-
if dv := viper.GetString(kubernetesVersion); dv != constants.DefaultKubernetesVersion {
116-
validateK8sVersion(dv)
118+
if k8sVersion != constants.DefaultKubernetesVersion {
119+
validateK8sVersion(k8sVersion)
117120
}
118121

119122
config := cluster.MachineConfig{
@@ -195,7 +198,7 @@ func runStart(cmd *cobra.Command, args []string) {
195198
ShouldLoadCachedImages: shouldCacheImages,
196199
}
197200

198-
clusterBootstrapper, err := GetClusterBootstrapper(api, viper.GetString(cmdcfg.Bootstrapper))
201+
k8sBootstrapper, err := GetClusterBootstrapper(api, clusterBootstrapper)
199202
if err != nil {
200203
glog.Exitf("Error getting cluster bootstrapper: %s", err)
201204
}
@@ -211,13 +214,13 @@ func runStart(cmd *cobra.Command, args []string) {
211214
}
212215

213216
fmt.Println("Moving files into cluster...")
214-
if err := clusterBootstrapper.UpdateCluster(kubernetesConfig); err != nil {
217+
if err := k8sBootstrapper.UpdateCluster(kubernetesConfig); err != nil {
215218
glog.Errorln("Error updating cluster: ", err)
216219
cmdUtil.MaybeReportErrorAndExit(err)
217220
}
218221

219222
fmt.Println("Setting up certs...")
220-
if err := clusterBootstrapper.SetupCerts(kubernetesConfig); err != nil {
223+
if err := k8sBootstrapper.SetupCerts(kubernetesConfig); err != nil {
221224
glog.Errorln("Error configuring authentication: ", err)
222225
cmdUtil.MaybeReportErrorAndExit(err)
223226
}
@@ -253,12 +256,12 @@ func runStart(cmd *cobra.Command, args []string) {
253256
fmt.Println("Starting cluster components...")
254257

255258
if !exists {
256-
if err := clusterBootstrapper.StartCluster(kubernetesConfig); err != nil {
259+
if err := k8sBootstrapper.StartCluster(kubernetesConfig); err != nil {
257260
glog.Errorln("Error starting cluster: ", err)
258261
cmdUtil.MaybeReportErrorAndExit(err)
259262
}
260263
} else {
261-
if err := clusterBootstrapper.RestartCluster(kubernetesConfig); err != nil {
264+
if err := k8sBootstrapper.RestartCluster(kubernetesConfig); err != nil {
262265
glog.Errorln("Error restarting cluster: ", err)
263266
cmdUtil.MaybeReportErrorAndExit(err)
264267
}

pkg/minikube/bootstrapper/bootstrapper.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@ const (
5151
BootstrapperTypeKubeadm = "kubeadm"
5252
)
5353

54-
var CachedImagesForBootstrapper = map[string][]string{
55-
BootstrapperTypeLocalkube: constants.LocalkubeCachedImages,
54+
func GetCachedImageList(version string, bootstrapper string) []string {
55+
switch bootstrapper {
56+
case BootstrapperTypeLocalkube:
57+
return constants.LocalkubeCachedImages
58+
case BootstrapperTypeKubeadm:
59+
return constants.GetKubeadmCachedImages(version)
60+
default:
61+
return []string{}
62+
}
5663
}

pkg/minikube/bootstrapper/kubeadm/kubeadm.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"k8s.io/minikube/pkg/minikube/bootstrapper"
3636
"k8s.io/minikube/pkg/minikube/config"
3737
"k8s.io/minikube/pkg/minikube/constants"
38+
"k8s.io/minikube/pkg/minikube/machine"
3839
"k8s.io/minikube/pkg/minikube/sshutil"
3940
"k8s.io/minikube/pkg/util"
4041
)
@@ -174,7 +175,7 @@ func (k *KubeadmBootstrapper) StartCluster(k8s bootstrapper.KubernetesConfig) er
174175
func addAddons(files *[]assets.CopyableFile) error {
175176
// add addons to file list
176177
// custom addons
177-
assets.AddMinikubeAddonsDirToAssets(files)
178+
assets.AddMinikubeDirToAssets("addons", constants.AddonsPath, files)
178179
// bundled addons
179180
for addonName, addonBundle := range assets.Addons {
180181
// TODO(r2d4): Kubeadm ignores the kube-dns addon and uses its own.
@@ -228,6 +229,10 @@ func (k *KubeadmBootstrapper) SetupCerts(k8s bootstrapper.KubernetesConfig) erro
228229
}
229230

230231
func (k *KubeadmBootstrapper) UpdateCluster(cfg bootstrapper.KubernetesConfig) error {
232+
if cfg.ShouldLoadCachedImages {
233+
// Make best effort to load any cached images
234+
go machine.LoadImages(k.c, constants.GetKubeadmCachedImages(cfg.KubernetesVersion), constants.ImageCacheDir)
235+
}
231236
kubeadmCfg, err := k.generateConfig(cfg)
232237
if err != nil {
233238
return errors.Wrap(err, "generating kubeadm cfg")

pkg/minikube/bootstrapper/localkube/localkube.go

-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ func (lk *LocalkubeBootstrapper) UpdateCluster(config bootstrapper.KubernetesCon
109109
if config.ShouldLoadCachedImages {
110110
// Make best effort to load any cached images
111111
go machine.LoadImages(lk.cmd, constants.LocalkubeCachedImages, constants.ImageCacheDir)
112-
113112
}
114113

115114
copyableFiles := []assets.CopyableFile{}

pkg/minikube/constants/constants.go

+26
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,30 @@ var LocalkubeCachedImages = []string{
181181
"gcr.io/google_containers/pause-amd64:3.0",
182182
}
183183

184+
func GetKubeadmCachedImages(version string) []string {
185+
return []string{
186+
// Dashboard
187+
"gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.3",
188+
189+
// Addon Manager
190+
"gcr.io/google-containers/kube-addon-manager:v6.4-beta.2",
191+
192+
// Pause
193+
"gcr.io/google_containers/pause-amd64:3.0",
194+
195+
// DNS
196+
"gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.4",
197+
"gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.4",
198+
"gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.4",
199+
200+
// etcd
201+
"gcr.io/google_containers/etcd-amd64:3.0.17",
202+
203+
"gcr.io/google_containers/kube-proxy-amd64:" + version,
204+
"gcr.io/google_containers/kube-scheduler-amd64:" + version,
205+
"gcr.io/google_containers/kube-controller-manager-amd64:" + version,
206+
"gcr.io/google_containers/kube-apiserver-amd64:" + version,
207+
}
208+
}
209+
184210
var ImageCacheDir = MakeMiniPath("cache", "images")

pkg/minikube/machine/cache_images.go

+2-6
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,8 @@ import (
3939

4040
const tempLoadDir = "/tmp"
4141

42-
func CacheImagesForBootstrapper(clusterBootstrapper string) error {
43-
images, ok := bootstrapper.CachedImagesForBootstrapper[clusterBootstrapper]
44-
if !ok {
45-
glog.Infoln("Could not find list of images to cache for bootstrapper %s", clusterBootstrapper)
46-
return nil
47-
}
42+
func CacheImagesForBootstrapper(version string, clusterBootstrapper string) error {
43+
images := bootstrapper.GetCachedImageList(version, clusterBootstrapper)
4844

4945
if err := CacheImages(images, constants.ImageCacheDir); err != nil {
5046
return errors.Wrapf(err, "Caching images for %s", clusterBootstrapper)

0 commit comments

Comments
 (0)