From 834a02e6737ec51d99520a3f859a55ccfa913ff7 Mon Sep 17 00:00:00 2001 From: Serguei Bezverkhi Date: Fri, 15 Sep 2017 09:44:44 -0400 Subject: [PATCH] Switching to apps/v1beta2 Closes https://github.com/kubernetes/kubeadm/issues/390 --- cmd/kubeadm/app/phases/addons/dns/BUILD | 2 +- cmd/kubeadm/app/phases/addons/dns/dns.go | 4 ++-- cmd/kubeadm/app/phases/addons/dns/manifests.go | 2 +- cmd/kubeadm/app/phases/addons/proxy/BUILD | 2 +- .../app/phases/addons/proxy/manifests.go | 2 +- cmd/kubeadm/app/phases/addons/proxy/proxy.go | 4 ++-- cmd/kubeadm/app/phases/selfhosting/BUILD | 2 +- .../app/phases/selfhosting/selfhosting.go | 12 ++++++------ cmd/kubeadm/app/phases/upgrade/BUILD | 2 +- cmd/kubeadm/app/phases/upgrade/health.go | 6 +++--- cmd/kubeadm/app/phases/upgrade/prepull.go | 8 ++++---- cmd/kubeadm/app/phases/upgrade/selfhosted.go | 18 +++++++++--------- cmd/kubeadm/app/util/apiclient/BUILD | 2 +- cmd/kubeadm/app/util/apiclient/idempotency.go | 16 ++++++++-------- 14 files changed, 41 insertions(+), 41 deletions(-) diff --git a/cmd/kubeadm/app/phases/addons/dns/BUILD b/cmd/kubeadm/app/phases/addons/dns/BUILD index 22622cc9fa4..e133288b0c3 100644 --- a/cmd/kubeadm/app/phases/addons/dns/BUILD +++ b/cmd/kubeadm/app/phases/addons/dns/BUILD @@ -42,8 +42,8 @@ go_library( "//cmd/kubeadm/app/util/apiclient:go_default_library", "//pkg/api:go_default_library", "//pkg/util/version:go_default_library", + "//vendor/k8s.io/api/apps/v1beta2:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", - "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/cmd/kubeadm/app/phases/addons/dns/dns.go b/cmd/kubeadm/app/phases/addons/dns/dns.go index 516a1b8fce0..4ca3f70d5ec 100644 --- a/cmd/kubeadm/app/phases/addons/dns/dns.go +++ b/cmd/kubeadm/app/phases/addons/dns/dns.go @@ -21,8 +21,8 @@ import ( "net" "runtime" + apps "k8s.io/api/apps/v1beta2" "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kuberuntime "k8s.io/apimachinery/pkg/runtime" @@ -96,7 +96,7 @@ func CreateServiceAccount(client clientset.Interface) error { } func createKubeDNSAddon(deploymentBytes, serviceBytes []byte, client clientset.Interface) error { - kubednsDeployment := &extensions.Deployment{} + kubednsDeployment := &apps.Deployment{} if err := kuberuntime.DecodeInto(api.Codecs.UniversalDecoder(), deploymentBytes, kubednsDeployment); err != nil { return fmt.Errorf("unable to decode kube-dns deployment %v", err) } diff --git a/cmd/kubeadm/app/phases/addons/dns/manifests.go b/cmd/kubeadm/app/phases/addons/dns/manifests.go index 4aedb03b9f0..19460b6c926 100644 --- a/cmd/kubeadm/app/phases/addons/dns/manifests.go +++ b/cmd/kubeadm/app/phases/addons/dns/manifests.go @@ -19,7 +19,7 @@ package dns const ( // v170AndAboveKubeDNSDeployment is the kube-dns Deployment manifest for the kube-dns manifest for v1.7+ v170AndAboveKubeDNSDeployment = ` -apiVersion: extensions/v1beta1 +apiVersion: apps/v1beta2 kind: Deployment metadata: name: kube-dns diff --git a/cmd/kubeadm/app/phases/addons/proxy/BUILD b/cmd/kubeadm/app/phases/addons/proxy/BUILD index 95e6ecc4937..9f6958e194c 100644 --- a/cmd/kubeadm/app/phases/addons/proxy/BUILD +++ b/cmd/kubeadm/app/phases/addons/proxy/BUILD @@ -34,8 +34,8 @@ go_library( "//cmd/kubeadm/app/util/apiclient:go_default_library", "//pkg/api:go_default_library", "//plugin/pkg/scheduler/algorithm:go_default_library", + "//vendor/k8s.io/api/apps/v1beta2:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", - "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/api/rbac/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/cmd/kubeadm/app/phases/addons/proxy/manifests.go b/cmd/kubeadm/app/phases/addons/proxy/manifests.go index b9903192d14..df645cdf29d 100644 --- a/cmd/kubeadm/app/phases/addons/proxy/manifests.go +++ b/cmd/kubeadm/app/phases/addons/proxy/manifests.go @@ -50,7 +50,7 @@ data: // KubeProxyDaemonSet is the proxy DaemonSet manifest KubeProxyDaemonSet = ` -apiVersion: extensions/v1beta1 +apiVersion: apps/v1beta2 kind: DaemonSet metadata: labels: diff --git a/cmd/kubeadm/app/phases/addons/proxy/proxy.go b/cmd/kubeadm/app/phases/addons/proxy/proxy.go index 98c5dfe60d6..22154b1cfe9 100644 --- a/cmd/kubeadm/app/phases/addons/proxy/proxy.go +++ b/cmd/kubeadm/app/phases/addons/proxy/proxy.go @@ -20,8 +20,8 @@ import ( "fmt" "runtime" + apps "k8s.io/api/apps/v1beta2" "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" rbac "k8s.io/api/rbac/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kuberuntime "k8s.io/apimachinery/pkg/runtime" @@ -116,7 +116,7 @@ func createKubeProxyAddon(configMapBytes, daemonSetbytes []byte, client clientse return err } - kubeproxyDaemonSet := &extensions.DaemonSet{} + kubeproxyDaemonSet := &apps.DaemonSet{} if err := kuberuntime.DecodeInto(api.Codecs.UniversalDecoder(), daemonSetbytes, kubeproxyDaemonSet); err != nil { return fmt.Errorf("unable to decode kube-proxy daemonset %v", err) } diff --git a/cmd/kubeadm/app/phases/selfhosting/BUILD b/cmd/kubeadm/app/phases/selfhosting/BUILD index 0860458c1af..410872e0dab 100644 --- a/cmd/kubeadm/app/phases/selfhosting/BUILD +++ b/cmd/kubeadm/app/phases/selfhosting/BUILD @@ -35,8 +35,8 @@ go_library( "//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util/apiclient:go_default_library", "//pkg/api:go_default_library", + "//vendor/k8s.io/api/apps/v1beta2:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", - "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", diff --git a/cmd/kubeadm/app/phases/selfhosting/selfhosting.go b/cmd/kubeadm/app/phases/selfhosting/selfhosting.go index 010dcfd9eef..f310a4353ec 100644 --- a/cmd/kubeadm/app/phases/selfhosting/selfhosting.go +++ b/cmd/kubeadm/app/phases/selfhosting/selfhosting.go @@ -22,8 +22,8 @@ import ( "os" "time" + apps "k8s.io/api/apps/v1beta2" "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kuberuntime "k8s.io/apimachinery/pkg/runtime" clientset "k8s.io/client-go/kubernetes" @@ -129,28 +129,28 @@ func CreateSelfHostedControlPlane(manifestsDir, kubeConfigDir string, cfg *kubea } // BuildDaemonSet is responsible for mutating the PodSpec and return a DaemonSet which is suitable for the self-hosting purporse -func BuildDaemonSet(name string, podSpec *v1.PodSpec, mutators map[string][]PodSpecMutatorFunc) *extensions.DaemonSet { +func BuildDaemonSet(name string, podSpec *v1.PodSpec, mutators map[string][]PodSpecMutatorFunc) *apps.DaemonSet { // Mutate the PodSpec so it's suitable for self-hosting mutatePodSpec(mutators, name, podSpec) // Return a DaemonSet based on that Spec - return &extensions.DaemonSet{ + return &apps.DaemonSet{ ObjectMeta: metav1.ObjectMeta{ Name: kubeadmconstants.AddSelfHostedPrefix(name), Namespace: metav1.NamespaceSystem, Labels: BuildSelfhostedComponentLabels(name), }, - Spec: extensions.DaemonSetSpec{ + Spec: apps.DaemonSetSpec{ Template: v1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ Labels: BuildSelfhostedComponentLabels(name), }, Spec: *podSpec, }, - UpdateStrategy: extensions.DaemonSetUpdateStrategy{ + UpdateStrategy: apps.DaemonSetUpdateStrategy{ // Make the DaemonSet utilize the RollingUpdate rollout strategy - Type: extensions.RollingUpdateDaemonSetStrategyType, + Type: apps.RollingUpdateDaemonSetStrategyType, }, }, } diff --git a/cmd/kubeadm/app/phases/upgrade/BUILD b/cmd/kubeadm/app/phases/upgrade/BUILD index f4c3fcfe4f0..5290f85f5fa 100644 --- a/cmd/kubeadm/app/phases/upgrade/BUILD +++ b/cmd/kubeadm/app/phases/upgrade/BUILD @@ -36,8 +36,8 @@ go_library( "//pkg/bootstrap/api:go_default_library", "//pkg/util/version:go_default_library", "//pkg/version:go_default_library", + "//vendor/k8s.io/api/apps/v1beta2:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", - "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", diff --git a/cmd/kubeadm/app/phases/upgrade/health.go b/cmd/kubeadm/app/phases/upgrade/health.go index 466c720af3f..719eced4f30 100644 --- a/cmd/kubeadm/app/phases/upgrade/health.go +++ b/cmd/kubeadm/app/phases/upgrade/health.go @@ -21,8 +21,8 @@ import ( "net/http" "os" + apps "k8s.io/api/apps/v1beta2" "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/cmd/kubeadm/app/constants" @@ -166,7 +166,7 @@ func getNotReadyDaemonSets(client clientset.Interface) ([]error, error) { notReadyDaemonSets := []error{} for _, component := range constants.MasterComponents { dsName := constants.AddSelfHostedPrefix(component) - ds, err := client.ExtensionsV1beta1().DaemonSets(metav1.NamespaceSystem).Get(dsName, metav1.GetOptions{}) + ds, err := client.AppsV1beta2().DaemonSets(metav1.NamespaceSystem).Get(dsName, metav1.GetOptions{}) if err != nil { return nil, fmt.Errorf("couldn't get daemonset %q in the %s namespace", dsName, metav1.NamespaceSystem) } @@ -179,7 +179,7 @@ func getNotReadyDaemonSets(client clientset.Interface) ([]error, error) { } // daemonSetHealth is a helper function for getting the health of a DaemonSet's status -func daemonSetHealth(dsStatus *extensions.DaemonSetStatus) error { +func daemonSetHealth(dsStatus *apps.DaemonSetStatus) error { if dsStatus.CurrentNumberScheduled != dsStatus.DesiredNumberScheduled { return fmt.Errorf("current number of scheduled Pods ('%d') doesn't match the amount of desired Pods ('%d')", dsStatus.CurrentNumberScheduled, dsStatus.DesiredNumberScheduled) } diff --git a/cmd/kubeadm/app/phases/upgrade/prepull.go b/cmd/kubeadm/app/phases/upgrade/prepull.go index 30d9f7d3c5b..9339b548442 100644 --- a/cmd/kubeadm/app/phases/upgrade/prepull.go +++ b/cmd/kubeadm/app/phases/upgrade/prepull.go @@ -20,8 +20,8 @@ import ( "fmt" "time" + apps "k8s.io/api/apps/v1beta2" "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" clientset "k8s.io/client-go/kubernetes" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" @@ -146,14 +146,14 @@ func addPrepullPrefix(component string) string { } // buildPrePullDaemonSet builds the DaemonSet that ensures the control plane image is available -func buildPrePullDaemonSet(component, image string) *extensions.DaemonSet { +func buildPrePullDaemonSet(component, image string) *apps.DaemonSet { var gracePeriodSecs int64 - return &extensions.DaemonSet{ + return &apps.DaemonSet{ ObjectMeta: metav1.ObjectMeta{ Name: addPrepullPrefix(component), Namespace: metav1.NamespaceSystem, }, - Spec: extensions.DaemonSetSpec{ + Spec: apps.DaemonSetSpec{ Template: v1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ Labels: map[string]string{ diff --git a/cmd/kubeadm/app/phases/upgrade/selfhosted.go b/cmd/kubeadm/app/phases/upgrade/selfhosted.go index b6a02320e20..cef6420a899 100644 --- a/cmd/kubeadm/app/phases/upgrade/selfhosted.go +++ b/cmd/kubeadm/app/phases/upgrade/selfhosted.go @@ -20,8 +20,8 @@ import ( "fmt" "time" + apps "k8s.io/api/apps/v1beta2" "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" clientset "k8s.io/client-go/kubernetes" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" @@ -49,7 +49,7 @@ const ( // controlPlaneComponentResources holds the relevant Pod and DaemonSet associated with a control plane component type controlPlaneComponentResources struct { pod *v1.Pod - daemonSet *extensions.DaemonSet + daemonSet *apps.DaemonSet } // SelfHostedControlPlane upgrades a self-hosted control plane @@ -119,7 +119,7 @@ func SelfHostedControlPlane(client clientset.Interface, waiter apiclient.Waiter, // During this upgrade; the temporary/backup component will take over if err := apiclient.TryRunCommand(func() error { - if _, err := client.ExtensionsV1beta1().DaemonSets(newDS.ObjectMeta.Namespace).Update(newDS); err != nil { + if _, err := client.AppsV1beta2().DaemonSets(newDS.ObjectMeta.Namespace).Update(newDS); err != nil { return fmt.Errorf("couldn't update self-hosted component's DaemonSet: %v", err) } return nil @@ -158,13 +158,13 @@ func SelfHostedControlPlane(client clientset.Interface, waiter apiclient.Waiter, } // BuildUpgradedDaemonSetsFromConfig takes a config object and the current version and returns the DaemonSet objects to post to the master -func BuildUpgradedDaemonSetsFromConfig(cfg *kubeadmapi.MasterConfiguration, k8sVersion *version.Version) map[string]*extensions.DaemonSet { +func BuildUpgradedDaemonSetsFromConfig(cfg *kubeadmapi.MasterConfiguration, k8sVersion *version.Version) map[string]*apps.DaemonSet { // Here the map of different mutators to use for the control plane's podspec is stored mutators := selfhosting.GetMutatorsFromFeatureGates(cfg.FeatureGates) // Get the new PodSpecs to use controlPlanePods := controlplane.GetStaticPodSpecs(cfg, k8sVersion) // Store the created DaemonSets in this map - controlPlaneDaemonSets := map[string]*extensions.DaemonSet{} + controlPlaneDaemonSets := map[string]*apps.DaemonSet{} for _, component := range constants.MasterComponents { podSpec := controlPlanePods[component].Spec @@ -196,7 +196,7 @@ func buildTempUpgradeDSLabelQuery(component string) string { // mutateTempDaemonSet mutates the specified self-hosted DaemonSet for the specified component // in a way that makes it possible to post a nearly identical, temporary DaemonSet as a backup -func mutateTempDaemonSet(tempDS *extensions.DaemonSet, component string) { +func mutateTempDaemonSet(tempDS *apps.DaemonSet, component string) { // Prefix the name of the temporary DaemonSet with upgradeTempDSPrefix tempDS.ObjectMeta.Name = addTempUpgradeDSPrefix(tempDS.ObjectMeta.Name) // Set .Labels to something else than the "real" self-hosted components have @@ -206,7 +206,7 @@ func mutateTempDaemonSet(tempDS *extensions.DaemonSet, component string) { // Clean all unnecessary ObjectMeta fields tempDS.ObjectMeta = extractRelevantObjectMeta(tempDS.ObjectMeta) // Reset .Status as we're posting a new object - tempDS.Status = extensions.DaemonSetStatus{} + tempDS.Status = apps.DaemonSetStatus{} } // extractRelevantObjectMeta returns only the relevant parts of ObjectMeta required when creating @@ -234,7 +234,7 @@ func getCurrentControlPlaneComponentResources(client clientset.Interface) (map[s for _, component := range constants.MasterComponents { var podList *v1.PodList - var currentDS *extensions.DaemonSet + var currentDS *apps.DaemonSet // Get the self-hosted pod associated with the component podLabelSelector := selfhosting.BuildSelfHostedComponentLabelQuery(component) @@ -256,7 +256,7 @@ func getCurrentControlPlaneComponentResources(client clientset.Interface) (map[s if err := apiclient.TryRunCommand(func() error { var tryrunerr error // Try to get the current self-hosted component - currentDS, tryrunerr = client.ExtensionsV1beta1().DaemonSets(metav1.NamespaceSystem).Get(dsName, metav1.GetOptions{}) + currentDS, tryrunerr = client.AppsV1beta2().DaemonSets(metav1.NamespaceSystem).Get(dsName, metav1.GetOptions{}) return tryrunerr // note that tryrunerr is most likely nil here (in successful cases) }, selfHostingFailureThreshold); err != nil { return nil, err diff --git a/cmd/kubeadm/app/util/apiclient/BUILD b/cmd/kubeadm/app/util/apiclient/BUILD index 1537d4d22f1..c40b167ffd3 100644 --- a/cmd/kubeadm/app/util/apiclient/BUILD +++ b/cmd/kubeadm/app/util/apiclient/BUILD @@ -18,8 +18,8 @@ go_library( deps = [ "//cmd/kubeadm/app/constants:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", + "//vendor/k8s.io/api/apps/v1beta2:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", - "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/api/rbac/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/cmd/kubeadm/app/util/apiclient/idempotency.go b/cmd/kubeadm/app/util/apiclient/idempotency.go index 78147d51245..8804fa4160e 100644 --- a/cmd/kubeadm/app/util/apiclient/idempotency.go +++ b/cmd/kubeadm/app/util/apiclient/idempotency.go @@ -19,8 +19,8 @@ package apiclient import ( "fmt" + apps "k8s.io/api/apps/v1beta2" "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" rbac "k8s.io/api/rbac/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -71,13 +71,13 @@ func CreateOrUpdateServiceAccount(client clientset.Interface, sa *v1.ServiceAcco } // CreateOrUpdateDeployment creates a Deployment if the target resource doesn't exist. If the resource exists already, this function will update the resource instead. -func CreateOrUpdateDeployment(client clientset.Interface, deploy *extensions.Deployment) error { - if _, err := client.ExtensionsV1beta1().Deployments(deploy.ObjectMeta.Namespace).Create(deploy); err != nil { +func CreateOrUpdateDeployment(client clientset.Interface, deploy *apps.Deployment) error { + if _, err := client.AppsV1beta2().Deployments(deploy.ObjectMeta.Namespace).Create(deploy); err != nil { if !apierrors.IsAlreadyExists(err) { return fmt.Errorf("unable to create deployment: %v", err) } - if _, err := client.ExtensionsV1beta1().Deployments(deploy.ObjectMeta.Namespace).Update(deploy); err != nil { + if _, err := client.AppsV1beta2().Deployments(deploy.ObjectMeta.Namespace).Update(deploy); err != nil { return fmt.Errorf("unable to update deployment: %v", err) } } @@ -85,13 +85,13 @@ func CreateOrUpdateDeployment(client clientset.Interface, deploy *extensions.Dep } // CreateOrUpdateDaemonSet creates a DaemonSet if the target resource doesn't exist. If the resource exists already, this function will update the resource instead. -func CreateOrUpdateDaemonSet(client clientset.Interface, ds *extensions.DaemonSet) error { - if _, err := client.ExtensionsV1beta1().DaemonSets(ds.ObjectMeta.Namespace).Create(ds); err != nil { +func CreateOrUpdateDaemonSet(client clientset.Interface, ds *apps.DaemonSet) error { + if _, err := client.AppsV1beta2().DaemonSets(ds.ObjectMeta.Namespace).Create(ds); err != nil { if !apierrors.IsAlreadyExists(err) { return fmt.Errorf("unable to create daemonset: %v", err) } - if _, err := client.ExtensionsV1beta1().DaemonSets(ds.ObjectMeta.Namespace).Update(ds); err != nil { + if _, err := client.AppsV1beta2().DaemonSets(ds.ObjectMeta.Namespace).Update(ds); err != nil { return fmt.Errorf("unable to update daemonset: %v", err) } } @@ -104,7 +104,7 @@ func DeleteDaemonSetForeground(client clientset.Interface, namespace, name strin deleteOptions := &metav1.DeleteOptions{ PropagationPolicy: &foregroundDelete, } - return client.ExtensionsV1beta1().DaemonSets(namespace).Delete(name, deleteOptions) + return client.AppsV1beta2().DaemonSets(namespace).Delete(name, deleteOptions) } // CreateOrUpdateRole creates a Role if the target resource doesn't exist. If the resource exists already, this function will update the resource instead.