diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index bf9542a488ffbf02deb4dfd012bade181b315b2f..1f8fe203f8cb881522f7001d6062fea24ea8b139 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -12,7 +12,7 @@ import ( "time" "github.com/sirupsen/logrus" - "k8s.io/api/apps/v1beta1" + appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" policybeta1 "k8s.io/api/policy/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -52,7 +52,7 @@ type kubeResources struct { Services map[PostgresRole]*v1.Service Endpoints map[PostgresRole]*v1.Endpoints Secrets map[types.UID]*v1.Secret - Statefulset *v1beta1.StatefulSet + Statefulset *appsv1.StatefulSet PodDisruptionBudget *policybeta1.PodDisruptionBudget //Pods are treated separately //PVCs are treated separately @@ -214,7 +214,7 @@ func (c *Cluster) Create() error { service *v1.Service ep *v1.Endpoints - ss *v1beta1.StatefulSet + ss *appsv1.StatefulSet ) defer func() { @@ -315,7 +315,7 @@ func (c *Cluster) Create() error { return nil } -func (c *Cluster) compareStatefulSetWith(statefulSet *v1beta1.StatefulSet) *compareStatefulsetResult { +func (c *Cluster) compareStatefulSetWith(statefulSet *appsv1.StatefulSet) *compareStatefulsetResult { reasons := make([]string, 0) var match, needsRollUpdate, needsReplace bool diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index 4074c61c653ae66035ecbe7e5e129dc4acdf659a..78d1283878544af6e48a764be608c3ad507172bf 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -7,7 +7,7 @@ import ( "github.com/sirupsen/logrus" - "k8s.io/api/apps/v1beta1" + appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" policybeta1 "k8s.io/api/policy/v1beta1" "k8s.io/apimachinery/pkg/api/resource" @@ -711,7 +711,7 @@ func makeResources(cpuRequest, memoryRequest, cpuLimit, memoryLimit string) acid } } -func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*v1beta1.StatefulSet, error) { +func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.StatefulSet, error) { var ( err error @@ -917,25 +917,25 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*v1beta1.State // the operator has domain-specific logic on how to do rolling updates of PG clusters // so we do not use default rolling updates implemented by stateful sets // that leaves the legacy "OnDelete" update strategy as the only option - updateStrategy := v1beta1.StatefulSetUpdateStrategy{Type: v1beta1.OnDeleteStatefulSetStrategyType} + updateStrategy := appsv1.StatefulSetUpdateStrategy{Type: appsv1.OnDeleteStatefulSetStrategyType} - var podManagementPolicy v1beta1.PodManagementPolicyType + var podManagementPolicy appsv1.PodManagementPolicyType if c.OpConfig.PodManagementPolicy == "ordered_ready" { - podManagementPolicy = v1beta1.OrderedReadyPodManagement + podManagementPolicy = appsv1.OrderedReadyPodManagement } else if c.OpConfig.PodManagementPolicy == "parallel" { - podManagementPolicy = v1beta1.ParallelPodManagement + podManagementPolicy = appsv1.ParallelPodManagement } else { return nil, fmt.Errorf("could not set the pod management policy to the unknown value: %v", c.OpConfig.PodManagementPolicy) } - statefulSet := &v1beta1.StatefulSet{ + statefulSet := &appsv1.StatefulSet{ ObjectMeta: metav1.ObjectMeta{ Name: c.statefulSetName(), Namespace: c.Namespace, Labels: c.labelsSet(true), Annotations: map[string]string{rollingUpdateStatefulsetAnnotationKey: "false"}, }, - Spec: v1beta1.StatefulSetSpec{ + Spec: appsv1.StatefulSetSpec{ Replicas: &numberOfInstances, Selector: c.labelsSelector(), ServiceName: c.serviceName(Master), diff --git a/pkg/cluster/pod.go b/pkg/cluster/pod.go index 8beb561ec1674d9802cc67d0bb2a018b61438c57..095f859f0c80c1aefab75d1aa19c3bb769e11254 100644 --- a/pkg/cluster/pod.go +++ b/pkg/cluster/pod.go @@ -4,12 +4,12 @@ import ( "fmt" "math/rand" + appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/zalando/postgres-operator/pkg/spec" "github.com/zalando/postgres-operator/pkg/util" - "k8s.io/api/apps/v1beta1" ) func (c *Cluster) listPods() ([]v1.Pod, error) { @@ -205,7 +205,7 @@ func (c *Cluster) MigrateMasterPod(podName spec.NamespacedName) error { } // we must have a statefulset in the cluster for the migration to work if c.Statefulset == nil { - var sset *v1beta1.StatefulSet + var sset *appsv1.StatefulSet if sset, err = c.KubeClient.StatefulSets(c.Namespace).Get(c.statefulSetName(), metav1.GetOptions{}); err != nil { return fmt.Errorf("could not retrieve cluster statefulset: %v", err) diff --git a/pkg/cluster/resources.go b/pkg/cluster/resources.go index c89edac63417d10d2f422fb39e6d6a0c6fb44d74..5d181ba1f920accf6cee2a818cc2fdc8a94e57be 100644 --- a/pkg/cluster/resources.go +++ b/pkg/cluster/resources.go @@ -5,7 +5,7 @@ import ( "strconv" "strings" - "k8s.io/api/apps/v1beta1" + appsv1 "k8s.io/api/apps/v1" batchv1beta1 "k8s.io/api/batch/v1beta1" v1 "k8s.io/api/core/v1" policybeta1 "k8s.io/api/policy/v1beta1" @@ -64,7 +64,7 @@ func (c *Cluster) listResources() error { return nil } -func (c *Cluster) createStatefulSet() (*v1beta1.StatefulSet, error) { +func (c *Cluster) createStatefulSet() (*appsv1.StatefulSet, error) { c.setProcessName("creating statefulset") statefulSetSpec, err := c.generateStatefulSet(&c.Spec) if err != nil { @@ -95,7 +95,7 @@ func getPodIndex(podName string) (int32, error) { return int32(res), nil } -func (c *Cluster) preScaleDown(newStatefulSet *v1beta1.StatefulSet) error { +func (c *Cluster) preScaleDown(newStatefulSet *appsv1.StatefulSet) error { masterPod, err := c.getRolePods(Master) if err != nil { return fmt.Errorf("could not get master pod: %v", err) @@ -135,7 +135,7 @@ func (c *Cluster) preScaleDown(newStatefulSet *v1beta1.StatefulSet) error { // setRollingUpdateFlagForStatefulSet sets the indicator or the rolling update requirement // in the StatefulSet annotation. -func (c *Cluster) setRollingUpdateFlagForStatefulSet(sset *v1beta1.StatefulSet, val bool) { +func (c *Cluster) setRollingUpdateFlagForStatefulSet(sset *appsv1.StatefulSet, val bool) { anno := sset.GetAnnotations() if anno == nil { anno = make(map[string]string) @@ -160,7 +160,7 @@ func (c *Cluster) applyRollingUpdateFlagforStatefulSet(val bool) error { // getRollingUpdateFlagFromStatefulSet returns the value of the rollingUpdate flag from the passed // StatefulSet, reverting to the default value in case of errors -func (c *Cluster) getRollingUpdateFlagFromStatefulSet(sset *v1beta1.StatefulSet, defaultValue bool) (flag bool) { +func (c *Cluster) getRollingUpdateFlagFromStatefulSet(sset *appsv1.StatefulSet, defaultValue bool) (flag bool) { anno := sset.GetAnnotations() flag = defaultValue @@ -181,7 +181,7 @@ func (c *Cluster) getRollingUpdateFlagFromStatefulSet(sset *v1beta1.StatefulSet, // mergeRollingUpdateFlagUsingCache returns the value of the rollingUpdate flag from the passed // statefulset, however, the value can be cleared if there is a cached flag in the cluster that // is set to false (the discrepancy could be a result of a failed StatefulSet update) -func (c *Cluster) mergeRollingUpdateFlagUsingCache(runningStatefulSet *v1beta1.StatefulSet) bool { +func (c *Cluster) mergeRollingUpdateFlagUsingCache(runningStatefulSet *appsv1.StatefulSet) bool { var ( cachedStatefulsetExists, clearRollingUpdateFromCache, podsRollingUpdateRequired bool ) @@ -207,7 +207,7 @@ func (c *Cluster) mergeRollingUpdateFlagUsingCache(runningStatefulSet *v1beta1.S return podsRollingUpdateRequired } -func (c *Cluster) updateStatefulSetAnnotations(annotations map[string]string) (*v1beta1.StatefulSet, error) { +func (c *Cluster) updateStatefulSetAnnotations(annotations map[string]string) (*appsv1.StatefulSet, error) { c.logger.Debugf("updating statefulset annotations") patchData, err := metaAnnotationsPatch(annotations) if err != nil { @@ -223,7 +223,7 @@ func (c *Cluster) updateStatefulSetAnnotations(annotations map[string]string) (* return result, nil } -func (c *Cluster) updateStatefulSet(newStatefulSet *v1beta1.StatefulSet) error { +func (c *Cluster) updateStatefulSet(newStatefulSet *appsv1.StatefulSet) error { c.setProcessName("updating statefulset") if c.Statefulset == nil { return fmt.Errorf("there is no statefulset in the cluster") @@ -264,7 +264,7 @@ func (c *Cluster) updateStatefulSet(newStatefulSet *v1beta1.StatefulSet) error { } // replaceStatefulSet deletes an old StatefulSet and creates the new using spec in the PostgreSQL CRD. -func (c *Cluster) replaceStatefulSet(newStatefulSet *v1beta1.StatefulSet) error { +func (c *Cluster) replaceStatefulSet(newStatefulSet *appsv1.StatefulSet) error { c.setProcessName("replacing statefulset") if c.Statefulset == nil { return fmt.Errorf("there is no statefulset in the cluster") @@ -676,7 +676,7 @@ func (c *Cluster) GetEndpointReplica() *v1.Endpoints { } // GetStatefulSet returns cluster's kubernetes StatefulSet -func (c *Cluster) GetStatefulSet() *v1beta1.StatefulSet { +func (c *Cluster) GetStatefulSet() *appsv1.StatefulSet { return c.Statefulset } diff --git a/pkg/cluster/types.go b/pkg/cluster/types.go index 5fd5029dbb1feca09cc8ce01d254521007442328..afdc7376e95dacb797bbb510fe8f90f3cdc5c3fc 100644 --- a/pkg/cluster/types.go +++ b/pkg/cluster/types.go @@ -4,7 +4,7 @@ import ( "time" acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" - "k8s.io/api/apps/v1beta1" + appsv1 "k8s.io/api/apps/v1" "k8s.io/api/core/v1" policybeta1 "k8s.io/api/policy/v1beta1" "k8s.io/apimachinery/pkg/types" @@ -60,7 +60,7 @@ type ClusterStatus struct { ReplicaService *v1.Service MasterEndpoint *v1.Endpoints ReplicaEndpoint *v1.Endpoints - StatefulSet *v1beta1.StatefulSet + StatefulSet *appsv1.StatefulSet PodDisruptionBudget *policybeta1.PodDisruptionBudget CurrentProcess Process diff --git a/pkg/cluster/util.go b/pkg/cluster/util.go index e97cfdd1bba2218009e32b2f2c2e66d06b747b96..8c02fed2eda3000c3ae7954aeaa37338892db44a 100644 --- a/pkg/cluster/util.go +++ b/pkg/cluster/util.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "k8s.io/api/apps/v1beta1" + appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" policybeta1 "k8s.io/api/policy/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -168,7 +168,7 @@ func (c *Cluster) logPDBChanges(old, new *policybeta1.PodDisruptionBudget, isUpd c.logger.Debugf("diff\n%s\n", util.PrettyDiff(old.Spec, new.Spec)) } -func (c *Cluster) logStatefulSetChanges(old, new *v1beta1.StatefulSet, isUpdate bool, reasons []string) { +func (c *Cluster) logStatefulSetChanges(old, new *appsv1.StatefulSet, isUpdate bool, reasons []string) { if isUpdate { c.logger.Infof("statefulset %q has been changed", util.NameFromMeta(old.ObjectMeta)) } else { diff --git a/pkg/util/k8sutil/k8sutil.go b/pkg/util/k8sutil/k8sutil.go index 4f1edcb0f39a759e5f68626d224f4af4fd52db9d..118d1df535a63fb29f4f3f9a1f69d10dd1d4f22e 100644 --- a/pkg/util/k8sutil/k8sutil.go +++ b/pkg/util/k8sutil/k8sutil.go @@ -16,8 +16,8 @@ import ( apiextbeta1 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/client-go/kubernetes" - "k8s.io/client-go/kubernetes/typed/apps/v1beta1" - v1core "k8s.io/client-go/kubernetes/typed/core/v1" + appsv1 "k8s.io/client-go/kubernetes/typed/apps/v1" + corev1 "k8s.io/client-go/kubernetes/typed/core/v1" policyv1beta1 "k8s.io/client-go/kubernetes/typed/policy/v1beta1" rbacv1beta1 "k8s.io/client-go/kubernetes/typed/rbac/v1beta1" "k8s.io/client-go/rest" @@ -29,17 +29,17 @@ import ( // KubernetesClient describes getters for Kubernetes objects type KubernetesClient struct { - v1core.SecretsGetter - v1core.ServicesGetter - v1core.EndpointsGetter - v1core.PodsGetter - v1core.PersistentVolumesGetter - v1core.PersistentVolumeClaimsGetter - v1core.ConfigMapsGetter - v1core.NodesGetter - v1core.NamespacesGetter - v1core.ServiceAccountsGetter - v1beta1.StatefulSetsGetter + corev1.SecretsGetter + corev1.ServicesGetter + corev1.EndpointsGetter + corev1.PodsGetter + corev1.PersistentVolumesGetter + corev1.PersistentVolumeClaimsGetter + corev1.ConfigMapsGetter + corev1.NodesGetter + corev1.NamespacesGetter + corev1.ServiceAccountsGetter + appsv1.StatefulSetsGetter rbacv1beta1.RoleBindingsGetter policyv1beta1.PodDisruptionBudgetsGetter apiextbeta1.CustomResourceDefinitionsGetter @@ -50,14 +50,14 @@ type KubernetesClient struct { } type mockSecret struct { - v1core.SecretInterface + corev1.SecretInterface } type MockSecretGetter struct { } type mockConfigMap struct { - v1core.ConfigMapInterface + corev1.ConfigMapInterface } type MockConfigMapsGetter struct { @@ -101,7 +101,7 @@ func NewFromConfig(cfg *rest.Config) (KubernetesClient, error) { kubeClient.PersistentVolumesGetter = client.CoreV1() kubeClient.NodesGetter = client.CoreV1() kubeClient.NamespacesGetter = client.CoreV1() - kubeClient.StatefulSetsGetter = client.AppsV1beta1() + kubeClient.StatefulSetsGetter = client.AppsV1() kubeClient.PodDisruptionBudgetsGetter = client.PolicyV1beta1() kubeClient.RESTClient = client.CoreV1().RESTClient() kubeClient.RoleBindingsGetter = client.RbacV1beta1() @@ -215,12 +215,12 @@ func (c *mockConfigMap) Get(name string, options metav1.GetOptions) (*v1.ConfigM } // Secrets to be mocked -func (c *MockSecretGetter) Secrets(namespace string) v1core.SecretInterface { +func (c *MockSecretGetter) Secrets(namespace string) corev1.SecretInterface { return &mockSecret{} } // ConfigMaps to be mocked -func (c *MockConfigMapsGetter) ConfigMaps(namespace string) v1core.ConfigMapInterface { +func (c *MockConfigMapsGetter) ConfigMaps(namespace string) corev1.ConfigMapInterface { return &mockConfigMap{} } diff --git a/ui/operator_ui/spiloutils.py b/ui/operator_ui/spiloutils.py index 5a7ad686833cf35c60cc1a8d79f3813c952aa363..7f080e3c9503a049ec41b0c685cfb16ecbcdce81 100644 --- a/ui/operator_ui/spiloutils.py +++ b/ui/operator_ui/spiloutils.py @@ -82,7 +82,7 @@ def request_delete(cluster, path, **kwargs): def resource_api_version(resource_type): return { 'postgresqls': 'apis/acid.zalan.do/v1', - 'statefulsets': 'apis/apps/v1beta1', + 'statefulsets': 'apis/apps/v1', }.get(resource_type, 'api/v1')