switch to policy API v1 for PDBs (#2008)
* switch to policy API v1 for PDBs * update e2e test dependencies * use kind 0.14.0 * bump K8s client in e2e docker image * bump e2e tests-runner
This commit is contained in:
parent
a119772efb
commit
2aa52094db
|
|
@ -16,7 +16,7 @@ RUN apt-get update \
|
||||||
curl \
|
curl \
|
||||||
vim \
|
vim \
|
||||||
&& pip3 install --no-cache-dir -r requirements.txt \
|
&& pip3 install --no-cache-dir -r requirements.txt \
|
||||||
&& curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.22.0/bin/linux/amd64/kubectl \
|
&& curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.24.3/bin/linux/amd64/kubectl \
|
||||||
&& chmod +x ./kubectl \
|
&& chmod +x ./kubectl \
|
||||||
&& mv ./kubectl /usr/local/bin/kubectl \
|
&& mv ./kubectl /usr/local/bin/kubectl \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ tools:
|
||||||
# install pinned version of 'kind'
|
# install pinned version of 'kind'
|
||||||
# go install must run outside of a dir with a (module-based) Go project !
|
# go install must run outside of a dir with a (module-based) Go project !
|
||||||
# otherwise go install updates project's dependencies and/or behaves differently
|
# otherwise go install updates project's dependencies and/or behaves differently
|
||||||
cd "/tmp" && GO111MODULE=on go install sigs.k8s.io/kind@v0.11.1
|
cd "/tmp" && GO111MODULE=on go install sigs.k8s.io/kind@v0.14.0
|
||||||
|
|
||||||
e2etest: tools copy clean
|
e2etest: tools copy clean
|
||||||
./run.sh main
|
./run.sh main
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
export cluster_name="postgres-operator-e2e-tests"
|
export cluster_name="postgres-operator-e2e-tests"
|
||||||
export kubeconfig_path="/tmp/kind-config-${cluster_name}"
|
export kubeconfig_path="/tmp/kind-config-${cluster_name}"
|
||||||
export operator_image="registry.opensource.zalan.do/acid/postgres-operator:latest"
|
export operator_image="registry.opensource.zalan.do/acid/postgres-operator:latest"
|
||||||
export e2e_test_runner_image="registry.opensource.zalan.do/acid/postgres-operator-e2e-tests-runner:0.3"
|
export e2e_test_runner_image="registry.opensource.zalan.do/acid/postgres-operator-e2e-tests-runner:0.4"
|
||||||
|
|
||||||
docker run -it --entrypoint /bin/bash --network=host -e "TERM=xterm-256color" \
|
docker run -it --entrypoint /bin/bash --network=host -e "TERM=xterm-256color" \
|
||||||
--mount type=bind,source="$(readlink -f ${kubeconfig_path})",target=/root/.kube/config \
|
--mount type=bind,source="$(readlink -f ${kubeconfig_path})",target=/root/.kube/config \
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
kubernetes==11.0.0
|
kubernetes==24.2.0
|
||||||
timeout_decorator==0.4.1
|
timeout_decorator==0.5.0
|
||||||
pyyaml==5.4.1
|
pyyaml==6.0
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ IFS=$'\n\t'
|
||||||
readonly cluster_name="postgres-operator-e2e-tests"
|
readonly cluster_name="postgres-operator-e2e-tests"
|
||||||
readonly kubeconfig_path="/tmp/kind-config-${cluster_name}"
|
readonly kubeconfig_path="/tmp/kind-config-${cluster_name}"
|
||||||
readonly spilo_image="registry.opensource.zalan.do/acid/spilo-14-e2e:0.1"
|
readonly spilo_image="registry.opensource.zalan.do/acid/spilo-14-e2e:0.1"
|
||||||
readonly e2e_test_runner_image="registry.opensource.zalan.do/acid/postgres-operator-e2e-tests-runner:0.3"
|
readonly e2e_test_runner_image="registry.opensource.zalan.do/acid/postgres-operator-e2e-tests-runner:0.4"
|
||||||
|
|
||||||
export GOPATH=${GOPATH-~/go}
|
export GOPATH=${GOPATH-~/go}
|
||||||
export PATH=${GOPATH}/bin:$PATH
|
export PATH=${GOPATH}/bin:$PATH
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ class K8sApi:
|
||||||
self.apps_v1 = client.AppsV1Api()
|
self.apps_v1 = client.AppsV1Api()
|
||||||
self.batch_v1_beta1 = client.BatchV1beta1Api()
|
self.batch_v1_beta1 = client.BatchV1beta1Api()
|
||||||
self.custom_objects_api = client.CustomObjectsApi()
|
self.custom_objects_api = client.CustomObjectsApi()
|
||||||
self.policy_v1_beta1 = client.PolicyV1beta1Api()
|
self.policy_v1 = client.PolicyV1Api()
|
||||||
self.storage_v1_api = client.StorageV1Api()
|
self.storage_v1_api = client.StorageV1Api()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -179,7 +179,7 @@ class K8s:
|
||||||
return len(self.api.apps_v1.list_namespaced_deployment(namespace, label_selector=labels).items)
|
return len(self.api.apps_v1.list_namespaced_deployment(namespace, label_selector=labels).items)
|
||||||
|
|
||||||
def count_pdbs_with_label(self, labels, namespace='default'):
|
def count_pdbs_with_label(self, labels, namespace='default'):
|
||||||
return len(self.api.policy_v1_beta1.list_namespaced_pod_disruption_budget(
|
return len(self.api.policy_v1.list_namespaced_pod_disruption_budget(
|
||||||
namespace, label_selector=labels).items)
|
namespace, label_selector=labels).items)
|
||||||
|
|
||||||
def count_running_pods(self, labels='application=spilo,cluster-name=acid-minimal-cluster', namespace='default'):
|
def count_running_pods(self, labels='application=spilo,cluster-name=acid-minimal-cluster', namespace='default'):
|
||||||
|
|
@ -471,7 +471,7 @@ class K8sBase:
|
||||||
return len(self.api.apps_v1.list_namespaced_deployment(namespace, label_selector=labels).items)
|
return len(self.api.apps_v1.list_namespaced_deployment(namespace, label_selector=labels).items)
|
||||||
|
|
||||||
def count_pdbs_with_label(self, labels, namespace='default'):
|
def count_pdbs_with_label(self, labels, namespace='default'):
|
||||||
return len(self.api.policy_v1_beta1.list_namespaced_pod_disruption_budget(
|
return len(self.api.policy_v1.list_namespaced_pod_disruption_budget(
|
||||||
namespace, label_selector=labels).items)
|
namespace, label_selector=labels).items)
|
||||||
|
|
||||||
def count_running_pods(self, labels='application=spilo,cluster-name=acid-minimal-cluster', namespace='default'):
|
def count_running_pods(self, labels='application=spilo,cluster-name=acid-minimal-cluster', namespace='default'):
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ import (
|
||||||
"github.com/zalando/postgres-operator/pkg/util/volumes"
|
"github.com/zalando/postgres-operator/pkg/util/volumes"
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policybeta1 "k8s.io/api/policy/v1beta1"
|
policyv1 "k8s.io/api/policy/v1"
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
|
@ -61,7 +61,7 @@ type kubeResources struct {
|
||||||
Endpoints map[PostgresRole]*v1.Endpoints
|
Endpoints map[PostgresRole]*v1.Endpoints
|
||||||
Secrets map[types.UID]*v1.Secret
|
Secrets map[types.UID]*v1.Secret
|
||||||
Statefulset *appsv1.StatefulSet
|
Statefulset *appsv1.StatefulSet
|
||||||
PodDisruptionBudget *policybeta1.PodDisruptionBudget
|
PodDisruptionBudget *policyv1.PodDisruptionBudget
|
||||||
//Pods are treated separately
|
//Pods are treated separately
|
||||||
//PVCs are treated separately
|
//PVCs are treated separately
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policybeta1 "k8s.io/api/policy/v1beta1"
|
policyv1 "k8s.io/api/policy/v1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
@ -1983,7 +1983,7 @@ func (c *Cluster) generateStandbyEnvironment(description *acidv1.StandbyDescript
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) generatePodDisruptionBudget() *policybeta1.PodDisruptionBudget {
|
func (c *Cluster) generatePodDisruptionBudget() *policyv1.PodDisruptionBudget {
|
||||||
minAvailable := intstr.FromInt(1)
|
minAvailable := intstr.FromInt(1)
|
||||||
pdbEnabled := c.OpConfig.EnablePodDisruptionBudget
|
pdbEnabled := c.OpConfig.EnablePodDisruptionBudget
|
||||||
|
|
||||||
|
|
@ -1992,14 +1992,14 @@ func (c *Cluster) generatePodDisruptionBudget() *policybeta1.PodDisruptionBudget
|
||||||
minAvailable = intstr.FromInt(0)
|
minAvailable = intstr.FromInt(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &policybeta1.PodDisruptionBudget{
|
return &policyv1.PodDisruptionBudget{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: c.podDisruptionBudgetName(),
|
Name: c.podDisruptionBudgetName(),
|
||||||
Namespace: c.Namespace,
|
Namespace: c.Namespace,
|
||||||
Labels: c.labelsSet(true),
|
Labels: c.labelsSet(true),
|
||||||
Annotations: c.annotationsSet(nil),
|
Annotations: c.annotationsSet(nil),
|
||||||
},
|
},
|
||||||
Spec: policybeta1.PodDisruptionBudgetSpec{
|
Spec: policyv1.PodDisruptionBudgetSpec{
|
||||||
MinAvailable: &minAvailable,
|
MinAvailable: &minAvailable,
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: c.roleLabelsSet(false, Master),
|
MatchLabels: c.roleLabelsSet(false, Master),
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import (
|
||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policyv1beta1 "k8s.io/api/policy/v1beta1"
|
policyv1 "k8s.io/api/policy/v1"
|
||||||
k8serrors "k8s.io/apimachinery/pkg/api/errors"
|
k8serrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
@ -1979,7 +1979,7 @@ func TestSidecars(t *testing.T) {
|
||||||
func TestGeneratePodDisruptionBudget(t *testing.T) {
|
func TestGeneratePodDisruptionBudget(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
c *Cluster
|
c *Cluster
|
||||||
out policyv1beta1.PodDisruptionBudget
|
out policyv1.PodDisruptionBudget
|
||||||
}{
|
}{
|
||||||
// With multiple instances.
|
// With multiple instances.
|
||||||
{
|
{
|
||||||
|
|
@ -1991,13 +1991,13 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
||||||
Spec: acidv1.PostgresSpec{TeamID: "myapp", NumberOfInstances: 3}},
|
Spec: acidv1.PostgresSpec{TeamID: "myapp", NumberOfInstances: 3}},
|
||||||
logger,
|
logger,
|
||||||
eventRecorder),
|
eventRecorder),
|
||||||
policyv1beta1.PodDisruptionBudget{
|
policyv1.PodDisruptionBudget{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "postgres-myapp-database-pdb",
|
Name: "postgres-myapp-database-pdb",
|
||||||
Namespace: "myapp",
|
Namespace: "myapp",
|
||||||
Labels: map[string]string{"team": "myapp", "cluster-name": "myapp-database"},
|
Labels: map[string]string{"team": "myapp", "cluster-name": "myapp-database"},
|
||||||
},
|
},
|
||||||
Spec: policyv1beta1.PodDisruptionBudgetSpec{
|
Spec: policyv1.PodDisruptionBudgetSpec{
|
||||||
MinAvailable: util.ToIntStr(1),
|
MinAvailable: util.ToIntStr(1),
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"},
|
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"},
|
||||||
|
|
@ -2015,13 +2015,13 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
||||||
Spec: acidv1.PostgresSpec{TeamID: "myapp", NumberOfInstances: 0}},
|
Spec: acidv1.PostgresSpec{TeamID: "myapp", NumberOfInstances: 0}},
|
||||||
logger,
|
logger,
|
||||||
eventRecorder),
|
eventRecorder),
|
||||||
policyv1beta1.PodDisruptionBudget{
|
policyv1.PodDisruptionBudget{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "postgres-myapp-database-pdb",
|
Name: "postgres-myapp-database-pdb",
|
||||||
Namespace: "myapp",
|
Namespace: "myapp",
|
||||||
Labels: map[string]string{"team": "myapp", "cluster-name": "myapp-database"},
|
Labels: map[string]string{"team": "myapp", "cluster-name": "myapp-database"},
|
||||||
},
|
},
|
||||||
Spec: policyv1beta1.PodDisruptionBudgetSpec{
|
Spec: policyv1.PodDisruptionBudgetSpec{
|
||||||
MinAvailable: util.ToIntStr(0),
|
MinAvailable: util.ToIntStr(0),
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"},
|
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"},
|
||||||
|
|
@ -2039,13 +2039,13 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
||||||
Spec: acidv1.PostgresSpec{TeamID: "myapp", NumberOfInstances: 3}},
|
Spec: acidv1.PostgresSpec{TeamID: "myapp", NumberOfInstances: 3}},
|
||||||
logger,
|
logger,
|
||||||
eventRecorder),
|
eventRecorder),
|
||||||
policyv1beta1.PodDisruptionBudget{
|
policyv1.PodDisruptionBudget{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "postgres-myapp-database-pdb",
|
Name: "postgres-myapp-database-pdb",
|
||||||
Namespace: "myapp",
|
Namespace: "myapp",
|
||||||
Labels: map[string]string{"team": "myapp", "cluster-name": "myapp-database"},
|
Labels: map[string]string{"team": "myapp", "cluster-name": "myapp-database"},
|
||||||
},
|
},
|
||||||
Spec: policyv1beta1.PodDisruptionBudgetSpec{
|
Spec: policyv1.PodDisruptionBudgetSpec{
|
||||||
MinAvailable: util.ToIntStr(0),
|
MinAvailable: util.ToIntStr(0),
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"},
|
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"},
|
||||||
|
|
@ -2063,13 +2063,13 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
||||||
Spec: acidv1.PostgresSpec{TeamID: "myapp", NumberOfInstances: 3}},
|
Spec: acidv1.PostgresSpec{TeamID: "myapp", NumberOfInstances: 3}},
|
||||||
logger,
|
logger,
|
||||||
eventRecorder),
|
eventRecorder),
|
||||||
policyv1beta1.PodDisruptionBudget{
|
policyv1.PodDisruptionBudget{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "postgres-myapp-database-databass-budget",
|
Name: "postgres-myapp-database-databass-budget",
|
||||||
Namespace: "myapp",
|
Namespace: "myapp",
|
||||||
Labels: map[string]string{"team": "myapp", "cluster-name": "myapp-database"},
|
Labels: map[string]string{"team": "myapp", "cluster-name": "myapp-database"},
|
||||||
},
|
},
|
||||||
Spec: policyv1beta1.PodDisruptionBudgetSpec{
|
Spec: policyv1.PodDisruptionBudgetSpec{
|
||||||
MinAvailable: util.ToIntStr(1),
|
MinAvailable: util.ToIntStr(1),
|
||||||
Selector: &metav1.LabelSelector{
|
Selector: &metav1.LabelSelector{
|
||||||
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"},
|
MatchLabels: map[string]string{"spilo-role": "master", "cluster-name": "myapp-database"},
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import (
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policybeta1 "k8s.io/api/policy/v1beta1"
|
policyv1 "k8s.io/api/policy/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
|
||||||
|
|
@ -404,7 +404,7 @@ func (c *Cluster) generateEndpointSubsets(role PostgresRole) []v1.EndpointSubset
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) createPodDisruptionBudget() (*policybeta1.PodDisruptionBudget, error) {
|
func (c *Cluster) createPodDisruptionBudget() (*policyv1.PodDisruptionBudget, error) {
|
||||||
podDisruptionBudgetSpec := c.generatePodDisruptionBudget()
|
podDisruptionBudgetSpec := c.generatePodDisruptionBudget()
|
||||||
podDisruptionBudget, err := c.KubeClient.
|
podDisruptionBudget, err := c.KubeClient.
|
||||||
PodDisruptionBudgets(podDisruptionBudgetSpec.Namespace).
|
PodDisruptionBudgets(podDisruptionBudgetSpec.Namespace).
|
||||||
|
|
@ -418,7 +418,7 @@ func (c *Cluster) createPodDisruptionBudget() (*policybeta1.PodDisruptionBudget,
|
||||||
return podDisruptionBudget, nil
|
return podDisruptionBudget, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) updatePodDisruptionBudget(pdb *policybeta1.PodDisruptionBudget) error {
|
func (c *Cluster) updatePodDisruptionBudget(pdb *policyv1.PodDisruptionBudget) error {
|
||||||
if c.PodDisruptionBudget == nil {
|
if c.PodDisruptionBudget == nil {
|
||||||
return fmt.Errorf("there is no pod disruption budget in the cluster")
|
return fmt.Errorf("there is no pod disruption budget in the cluster")
|
||||||
}
|
}
|
||||||
|
|
@ -602,6 +602,6 @@ func (c *Cluster) GetStatefulSet() *appsv1.StatefulSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPodDisruptionBudget returns cluster's kubernetes PodDisruptionBudget
|
// GetPodDisruptionBudget returns cluster's kubernetes PodDisruptionBudget
|
||||||
func (c *Cluster) GetPodDisruptionBudget() *policybeta1.PodDisruptionBudget {
|
func (c *Cluster) GetPodDisruptionBudget() *policyv1.PodDisruptionBudget {
|
||||||
return c.PodDisruptionBudget
|
return c.PodDisruptionBudget
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import (
|
||||||
"github.com/zalando/postgres-operator/pkg/util/k8sutil"
|
"github.com/zalando/postgres-operator/pkg/util/k8sutil"
|
||||||
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policybeta1 "k8s.io/api/policy/v1beta1"
|
policyv1 "k8s.io/api/policy/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -236,7 +236,7 @@ func (c *Cluster) syncEndpoint(role PostgresRole) error {
|
||||||
|
|
||||||
func (c *Cluster) syncPodDisruptionBudget(isUpdate bool) error {
|
func (c *Cluster) syncPodDisruptionBudget(isUpdate bool) error {
|
||||||
var (
|
var (
|
||||||
pdb *policybeta1.PodDisruptionBudget
|
pdb *policyv1.PodDisruptionBudget
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
if pdb, err = c.KubeClient.PodDisruptionBudgets(c.Namespace).Get(context.TODO(), c.podDisruptionBudgetName(), metav1.GetOptions{}); err == nil {
|
if pdb, err = c.KubeClient.PodDisruptionBudgets(c.Namespace).Get(context.TODO(), c.podDisruptionBudgetName(), metav1.GetOptions{}); err == nil {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import (
|
||||||
acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1"
|
acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1"
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policybeta1 "k8s.io/api/policy/v1beta1"
|
policyv1 "k8s.io/api/policy/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -65,7 +65,7 @@ type ClusterStatus struct {
|
||||||
MasterEndpoint *v1.Endpoints
|
MasterEndpoint *v1.Endpoints
|
||||||
ReplicaEndpoint *v1.Endpoints
|
ReplicaEndpoint *v1.Endpoints
|
||||||
StatefulSet *appsv1.StatefulSet
|
StatefulSet *appsv1.StatefulSet
|
||||||
PodDisruptionBudget *policybeta1.PodDisruptionBudget
|
PodDisruptionBudget *policyv1.PodDisruptionBudget
|
||||||
|
|
||||||
CurrentProcess Process
|
CurrentProcess Process
|
||||||
Worker uint32
|
Worker uint32
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ import (
|
||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policybeta1 "k8s.io/api/policy/v1beta1"
|
policyv1 "k8s.io/api/policy/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
|
||||||
|
|
@ -159,7 +159,7 @@ func metaAnnotationsPatch(annotations map[string]string) ([]byte, error) {
|
||||||
}{&meta})
|
}{&meta})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) logPDBChanges(old, new *policybeta1.PodDisruptionBudget, isUpdate bool, reason string) {
|
func (c *Cluster) logPDBChanges(old, new *policyv1.PodDisruptionBudget, isUpdate bool, reason string) {
|
||||||
if isUpdate {
|
if isUpdate {
|
||||||
c.logger.Infof("pod disruption budget %q has been changed", util.NameFromMeta(old.ObjectMeta))
|
c.logger.Infof("pod disruption budget %q has been changed", util.NameFromMeta(old.ObjectMeta))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ func newFakeK8sAnnotationsClient() (k8sutil.KubernetesClient, *k8sFake.Clientset
|
||||||
acidClientSet := fakeacidv1.NewSimpleClientset()
|
acidClientSet := fakeacidv1.NewSimpleClientset()
|
||||||
|
|
||||||
return k8sutil.KubernetesClient{
|
return k8sutil.KubernetesClient{
|
||||||
PodDisruptionBudgetsGetter: clientSet.PolicyV1beta1(),
|
PodDisruptionBudgetsGetter: clientSet.PolicyV1(),
|
||||||
ServicesGetter: clientSet.CoreV1(),
|
ServicesGetter: clientSet.CoreV1(),
|
||||||
StatefulSetsGetter: clientSet.AppsV1(),
|
StatefulSetsGetter: clientSet.AppsV1(),
|
||||||
PostgresqlsGetter: acidClientSet.AcidV1(),
|
PostgresqlsGetter: acidClientSet.AcidV1(),
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import (
|
||||||
"github.com/zalando/postgres-operator/pkg/spec"
|
"github.com/zalando/postgres-operator/pkg/spec"
|
||||||
apiappsv1 "k8s.io/api/apps/v1"
|
apiappsv1 "k8s.io/api/apps/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policybeta1 "k8s.io/api/policy/v1beta1"
|
apipolicyv1 "k8s.io/api/policy/v1"
|
||||||
apiextclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
|
apiextclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
|
||||||
apiextv1 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
|
apiextv1 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
|
@ -27,7 +27,7 @@ import (
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
appsv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
|
appsv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
|
||||||
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
policyv1beta1 "k8s.io/client-go/kubernetes/typed/policy/v1beta1"
|
policyv1 "k8s.io/client-go/kubernetes/typed/policy/v1"
|
||||||
rbacv1 "k8s.io/client-go/kubernetes/typed/rbac/v1"
|
rbacv1 "k8s.io/client-go/kubernetes/typed/rbac/v1"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
|
|
@ -61,7 +61,7 @@ type KubernetesClient struct {
|
||||||
appsv1.StatefulSetsGetter
|
appsv1.StatefulSetsGetter
|
||||||
appsv1.DeploymentsGetter
|
appsv1.DeploymentsGetter
|
||||||
rbacv1.RoleBindingsGetter
|
rbacv1.RoleBindingsGetter
|
||||||
policyv1beta1.PodDisruptionBudgetsGetter
|
policyv1.PodDisruptionBudgetsGetter
|
||||||
apiextv1.CustomResourceDefinitionsGetter
|
apiextv1.CustomResourceDefinitionsGetter
|
||||||
clientbatchv1beta1.CronJobsGetter
|
clientbatchv1beta1.CronJobsGetter
|
||||||
acidv1.OperatorConfigurationsGetter
|
acidv1.OperatorConfigurationsGetter
|
||||||
|
|
@ -156,7 +156,7 @@ func NewFromConfig(cfg *rest.Config) (KubernetesClient, error) {
|
||||||
kubeClient.NamespacesGetter = client.CoreV1()
|
kubeClient.NamespacesGetter = client.CoreV1()
|
||||||
kubeClient.StatefulSetsGetter = client.AppsV1()
|
kubeClient.StatefulSetsGetter = client.AppsV1()
|
||||||
kubeClient.DeploymentsGetter = client.AppsV1()
|
kubeClient.DeploymentsGetter = client.AppsV1()
|
||||||
kubeClient.PodDisruptionBudgetsGetter = client.PolicyV1beta1()
|
kubeClient.PodDisruptionBudgetsGetter = client.PolicyV1()
|
||||||
kubeClient.RESTClient = client.CoreV1().RESTClient()
|
kubeClient.RESTClient = client.CoreV1().RESTClient()
|
||||||
kubeClient.RoleBindingsGetter = client.RbacV1()
|
kubeClient.RoleBindingsGetter = client.RbacV1()
|
||||||
kubeClient.CronJobsGetter = client.BatchV1beta1()
|
kubeClient.CronJobsGetter = client.BatchV1beta1()
|
||||||
|
|
@ -214,7 +214,7 @@ func (client *KubernetesClient) SetPostgresCRDStatus(clusterName spec.Namespaced
|
||||||
}
|
}
|
||||||
|
|
||||||
// SamePDB compares the PodDisruptionBudgets
|
// SamePDB compares the PodDisruptionBudgets
|
||||||
func SamePDB(cur, new *policybeta1.PodDisruptionBudget) (match bool, reason string) {
|
func SamePDB(cur, new *apipolicyv1.PodDisruptionBudget) (match bool, reason string) {
|
||||||
//TODO: improve comparison
|
//TODO: improve comparison
|
||||||
match = reflect.DeepEqual(new.Spec, cur.Spec)
|
match = reflect.DeepEqual(new.Spec, cur.Spec)
|
||||||
if !match {
|
if !match {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue