123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*
- Copyright 2016 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package images
- import (
- "fmt"
- kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
- "k8s.io/kubernetes/cmd/kubeadm/app/constants"
- kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
- )
- // GetGenericImage generates and returns a platform agnostic image (backed by manifest list)
- func GetGenericImage(prefix, image, tag string) string {
- return fmt.Sprintf("%s/%s:%s", prefix, image, tag)
- }
- // GetKubernetesImage generates and returns the image for the components managed in the Kubernetes main repository,
- // including the control-plane components ad kube-proxy. If specified, the HyperKube image will be used.
- func GetKubernetesImage(image string, cfg *kubeadmapi.ClusterConfiguration) string {
- if cfg.UseHyperKubeImage {
- image = constants.HyperKube
- }
- repoPrefix := cfg.GetControlPlaneImageRepository()
- kubernetesImageTag := kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion)
- return GetGenericImage(repoPrefix, image, kubernetesImageTag)
- }
- // GetDNSImage generates and returns the image for the DNS, that can be CoreDNS or kube-dns.
- // Given that kube-dns uses 3 containers, an additional imageName parameter was added
- func GetDNSImage(cfg *kubeadmapi.ClusterConfiguration, imageName string) string {
- // DNS uses default image repository by default
- dnsImageRepository := cfg.ImageRepository
- // unless an override is specified
- if cfg.DNS.ImageRepository != "" {
- dnsImageRepository = cfg.DNS.ImageRepository
- }
- // DNS uses an imageTag that corresponds to the DNS version matching the Kubernetes version
- dnsImageTag := constants.GetDNSVersion(cfg.DNS.Type)
- // unless an override is specified
- if cfg.DNS.ImageTag != "" {
- dnsImageTag = cfg.DNS.ImageTag
- }
- return GetGenericImage(dnsImageRepository, imageName, dnsImageTag)
- }
- // GetEtcdImage generates and returns the image for etcd
- func GetEtcdImage(cfg *kubeadmapi.ClusterConfiguration) string {
- // Etcd uses default image repository by default
- etcdImageRepository := cfg.ImageRepository
- // unless an override is specified
- if cfg.Etcd.Local != nil && cfg.Etcd.Local.ImageRepository != "" {
- etcdImageRepository = cfg.Etcd.Local.ImageRepository
- }
- // Etcd uses an imageTag that corresponds to the etcd version matching the Kubernetes version
- etcdImageTag := constants.DefaultEtcdVersion
- etcdVersion, err := constants.EtcdSupportedVersion(cfg.KubernetesVersion)
- if err == nil {
- etcdImageTag = etcdVersion.String()
- }
- // unless an override is specified
- if cfg.Etcd.Local != nil && cfg.Etcd.Local.ImageTag != "" {
- etcdImageTag = cfg.Etcd.Local.ImageTag
- }
- return GetGenericImage(etcdImageRepository, constants.Etcd, etcdImageTag)
- }
- // GetPauseImage returns the image for the "pause" container
- func GetPauseImage(cfg *kubeadmapi.ClusterConfiguration) string {
- return GetGenericImage(cfg.ImageRepository, "pause", constants.PauseVersion)
- }
- // GetControlPlaneImages returns a list of container images kubeadm expects to use on a control plane node
- func GetControlPlaneImages(cfg *kubeadmapi.ClusterConfiguration) []string {
- imgs := []string{}
- // start with core kubernetes images
- if cfg.UseHyperKubeImage {
- imgs = append(imgs, GetKubernetesImage(constants.HyperKube, cfg))
- } else {
- imgs = append(imgs, GetKubernetesImage(constants.KubeAPIServer, cfg))
- imgs = append(imgs, GetKubernetesImage(constants.KubeControllerManager, cfg))
- imgs = append(imgs, GetKubernetesImage(constants.KubeScheduler, cfg))
- imgs = append(imgs, GetKubernetesImage(constants.KubeProxy, cfg))
- }
- // pause is not available on the ci image repository so use the default image repository.
- imgs = append(imgs, GetPauseImage(cfg))
- // if etcd is not external then add the image as it will be required
- if cfg.Etcd.Local != nil {
- imgs = append(imgs, GetEtcdImage(cfg))
- }
- // Append the appropriate DNS images
- if cfg.DNS.Type == kubeadmapi.CoreDNS {
- imgs = append(imgs, GetDNSImage(cfg, constants.CoreDNSImageName))
- } else {
- imgs = append(imgs, GetDNSImage(cfg, constants.KubeDNSKubeDNSImageName))
- imgs = append(imgs, GetDNSImage(cfg, constants.KubeDNSSidecarImageName))
- imgs = append(imgs, GetDNSImage(cfg, constants.KubeDNSDnsMasqNannyImageName))
- }
- return imgs
- }
|