From d46dfa2f766b9c7206db3ce1cf8174ff1d1d6895 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Wed, 12 Jul 2023 16:10:11 +0800
Subject: [PATCH 01/32] v1 pdb
---
pkg/controller/pdb.go | 91 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 91 insertions(+)
create mode 100644 pkg/controller/pdb.go
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
new file mode 100644
index 00000000000..ec7340282c6
--- /dev/null
+++ b/pkg/controller/pdb.go
@@ -0,0 +1,91 @@
+// Copyright (C) 2023, MinIO, Inc.
+//
+// This code is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License, version 3,
+// as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License, version 3,
+// along with this program. If not, see
+
+package controller
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2"
+ v1 "k8s.io/api/policy/v1"
+ k8serrors "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apimachinery/pkg/types"
+ "k8s.io/apimachinery/pkg/util/intstr"
+ "strings"
+)
+
+func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err error) {
+ for _, pool := range t.Spec.Pools {
+ if strings.TrimSpace(pool.Name) == "" {
+ continue
+ }
+ var pdb *v1.PodDisruptionBudget
+ var isCreate = false
+ pdb, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Get(ctx, pool.Name, metav1.GetOptions{})
+ if err != nil {
+ if k8serrors.IsNotFound(err) {
+ pdb = &v1.PodDisruptionBudget{}
+ isCreate = true
+ } else {
+ return err
+ }
+ }
+ if !isCreate {
+ // exist and as expected
+ if pdb.Spec.MaxUnavailable != nil && pdb.Spec.MaxUnavailable.IntValue() == (int(pool.Servers/2)) {
+ return nil
+ }
+ }
+ // set filed we expected
+ pdb.Name = pool.Name
+ pdb.Namespace = t.Namespace
+ maxUnavailable := intstr.FromInt(int(pool.Servers / 2))
+ pdb.Spec.MaxUnavailable = &maxUnavailable
+ pdb.Labels = map[string]string{
+ v2.TenantLabel: t.Name,
+ v2.PoolLabel: pool.Name,
+ }
+ pdb.Spec.Selector = metav1.SetAsLabelSelector(labels.Set{
+ v2.PoolLabel: pool.Name,
+ v2.TenantLabel: t.Name,
+ })
+ if isCreate {
+ _, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Create(ctx, pdb, metav1.CreateOptions{})
+ if err != nil {
+ return err
+ }
+ } else {
+ patchData := map[string]interface{}{
+ "spec": map[string]interface{}{
+ "maxUnavailable": pdb.Spec.MaxUnavailable,
+ },
+ }
+ pData, err := json.Marshal(patchData)
+ if err != nil {
+ return err
+ }
+ _, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Patch(ctx, t.Name, types.MergePatchType, pData, metav1.PatchOptions{})
+ if err != nil {
+ return nil
+ }
+ }
+ }
+ if len(t.Spec.Pools) == 0 {
+ return fmt.Errorf("%s empty pools", t.Name)
+ }
+ return nil
+}
From 11d2c96a143477776f7ff9faedbce1b7887455e2 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Wed, 12 Jul 2023 16:39:02 +0800
Subject: [PATCH 02/32] PDBAvailable
---
pkg/controller/pdb.go | 44 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index ec7340282c6..c1a69c625d1 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -25,7 +25,9 @@ import (
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr"
+ "k8s.io/klog/v2"
"strings"
+ "sync"
)
func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err error) {
@@ -89,3 +91,45 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
return nil
}
+
+type PDBAvailable struct {
+ v1 bool
+ v1beta bool
+}
+
+var globalPdbAvailable = PDBAvailable{}
+var globalPdbAvailableOnce = sync.Once{}
+
+func (c *Controller) PDBAvailable() PDBAvailable {
+ globalPdbAvailableOnce.Do(func() {
+ defer func() {
+ if globalPdbAvailable.v1 {
+ klog.Infof("PodDisruptionBudget: v1")
+ } else if globalPdbAvailable.v1beta {
+ klog.Infof("PodDisruptionBudget: v1beta")
+ } else {
+ klog.Infof("PodDisruptionBudget: unsupport")
+ }
+ }()
+ resouces, _ := c.kubeClientSet.Discovery().ServerPreferredResources()
+ for _, r := range resouces {
+ if r.GroupVersion == "policy/v1" {
+ for _, api := range r.APIResources {
+ if api.Kind == "PodDisruptionBudget" {
+ globalPdbAvailable.v1 = true
+ return
+ }
+ }
+ }
+ if r.GroupVersion == "policy/v1beta" {
+ for _, api := range r.APIResources {
+ if api.Kind == "PodDisruptionBudget" {
+ globalPdbAvailable.v1beta = true
+ return
+ }
+ }
+ }
+ }
+ })
+ return globalPdbAvailable
+}
From 25ab91eac250924f435251e05ada58078cce0df7 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Wed, 12 Jul 2023 16:41:08 +0800
Subject: [PATCH 03/32] Available
---
pkg/controller/pdb.go | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index c1a69c625d1..738d67dd2fc 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -97,6 +97,10 @@ type PDBAvailable struct {
v1beta bool
}
+func (p *PDBAvailable) Available() bool {
+ return p.v1 || p.v1beta
+}
+
var globalPdbAvailable = PDBAvailable{}
var globalPdbAvailableOnce = sync.Once{}
From 24818a585e032ae59900c8ffed46a0dfbb586773 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Wed, 12 Jul 2023 16:43:33 +0800
Subject: [PATCH 04/32] Available
---
pkg/controller/pdb.go | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 738d67dd2fc..700f9e911c8 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -31,6 +31,10 @@ import (
)
func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err error) {
+ available := c.PDBAvailable()
+ if !available.Available() {
+ return nil
+ }
for _, pool := range t.Spec.Pools {
if strings.TrimSpace(pool.Name) == "" {
continue
From 4112e5dd06b9614db1231df7ded134c2dfe4652f Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Wed, 12 Jul 2023 16:47:07 +0800
Subject: [PATCH 05/32] v1beat
---
pkg/controller/pdb.go | 146 ++++++++++++++++++++++++++++++------------
1 file changed, 105 insertions(+), 41 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 700f9e911c8..0bc2b7d1f37 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -20,6 +20,7 @@ import (
"fmt"
v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2"
v1 "k8s.io/api/policy/v1"
+ "k8s.io/api/policy/v1beta1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
@@ -39,56 +40,111 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if strings.TrimSpace(pool.Name) == "" {
continue
}
- var pdb *v1.PodDisruptionBudget
- var isCreate = false
- pdb, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Get(ctx, pool.Name, metav1.GetOptions{})
- if err != nil {
- if k8serrors.IsNotFound(err) {
- pdb = &v1.PodDisruptionBudget{}
- isCreate = true
- } else {
- return err
+ if available.V1Available() {
+ var pdb *v1.PodDisruptionBudget
+ var isCreate = false
+ pdb, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Get(ctx, pool.Name, metav1.GetOptions{})
+ if err != nil {
+ if k8serrors.IsNotFound(err) {
+ pdb = &v1.PodDisruptionBudget{}
+ isCreate = true
+ } else {
+ return err
+ }
}
- }
- if !isCreate {
- // exist and as expected
- if pdb.Spec.MaxUnavailable != nil && pdb.Spec.MaxUnavailable.IntValue() == (int(pool.Servers/2)) {
- return nil
+ if !isCreate {
+ // exist and as expected
+ if pdb.Spec.MaxUnavailable != nil && pdb.Spec.MaxUnavailable.IntValue() == (int(pool.Servers/2)) {
+ return nil
+ }
+ }
+ // set filed we expected
+ pdb.Name = pool.Name
+ pdb.Namespace = t.Namespace
+ maxUnavailable := intstr.FromInt(int(pool.Servers / 2))
+ pdb.Spec.MaxUnavailable = &maxUnavailable
+ pdb.Labels = map[string]string{
+ v2.TenantLabel: t.Name,
+ v2.PoolLabel: pool.Name,
+ }
+ pdb.Spec.Selector = metav1.SetAsLabelSelector(labels.Set{
+ v2.PoolLabel: pool.Name,
+ v2.TenantLabel: t.Name,
+ })
+ if isCreate {
+ _, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Create(ctx, pdb, metav1.CreateOptions{})
+ if err != nil {
+ return err
+ }
+ } else {
+ patchData := map[string]interface{}{
+ "spec": map[string]interface{}{
+ "maxUnavailable": pdb.Spec.MaxUnavailable,
+ },
+ }
+ pData, err := json.Marshal(patchData)
+ if err != nil {
+ return err
+ }
+ _, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Patch(ctx, t.Name, types.MergePatchType, pData, metav1.PatchOptions{})
+ if err != nil {
+ return nil
+ }
}
}
- // set filed we expected
- pdb.Name = pool.Name
- pdb.Namespace = t.Namespace
- maxUnavailable := intstr.FromInt(int(pool.Servers / 2))
- pdb.Spec.MaxUnavailable = &maxUnavailable
- pdb.Labels = map[string]string{
- v2.TenantLabel: t.Name,
- v2.PoolLabel: pool.Name,
- }
- pdb.Spec.Selector = metav1.SetAsLabelSelector(labels.Set{
- v2.PoolLabel: pool.Name,
- v2.TenantLabel: t.Name,
- })
- if isCreate {
- _, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Create(ctx, pdb, metav1.CreateOptions{})
+ if available.V1BetaAvailable() {
+ var pdb *v1beta1.PodDisruptionBudget
+ var isCreate = false
+ pdb, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Get(ctx, pool.Name, metav1.GetOptions{})
if err != nil {
- return err
+ if k8serrors.IsNotFound(err) {
+ pdb = &v1beta1.PodDisruptionBudget{}
+ isCreate = true
+ } else {
+ return err
+ }
}
- } else {
- patchData := map[string]interface{}{
- "spec": map[string]interface{}{
- "maxUnavailable": pdb.Spec.MaxUnavailable,
- },
+ if !isCreate {
+ // exist and as expected
+ if pdb.Spec.MaxUnavailable != nil && pdb.Spec.MaxUnavailable.IntValue() == (int(pool.Servers/2)) {
+ return nil
+ }
}
- pData, err := json.Marshal(patchData)
- if err != nil {
- return err
+ // set filed we expected
+ pdb.Name = pool.Name
+ pdb.Namespace = t.Namespace
+ maxUnavailable := intstr.FromInt(int(pool.Servers / 2))
+ pdb.Spec.MaxUnavailable = &maxUnavailable
+ pdb.Labels = map[string]string{
+ v2.TenantLabel: t.Name,
+ v2.PoolLabel: pool.Name,
}
- _, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Patch(ctx, t.Name, types.MergePatchType, pData, metav1.PatchOptions{})
- if err != nil {
- return nil
+ pdb.Spec.Selector = metav1.SetAsLabelSelector(labels.Set{
+ v2.PoolLabel: pool.Name,
+ v2.TenantLabel: t.Name,
+ })
+ if isCreate {
+ _, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Create(ctx, pdb, metav1.CreateOptions{})
+ if err != nil {
+ return err
+ }
+ } else {
+ patchData := map[string]interface{}{
+ "spec": map[string]interface{}{
+ "maxUnavailable": pdb.Spec.MaxUnavailable,
+ },
+ }
+ pData, err := json.Marshal(patchData)
+ if err != nil {
+ return err
+ }
+ _, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Patch(ctx, t.Name, types.MergePatchType, pData, metav1.PatchOptions{})
+ if err != nil {
+ return nil
+ }
}
}
+
}
if len(t.Spec.Pools) == 0 {
return fmt.Errorf("%s empty pools", t.Name)
@@ -101,6 +157,14 @@ type PDBAvailable struct {
v1beta bool
}
+func (p *PDBAvailable) V1Available() bool {
+ return p.v1
+}
+
+func (p *PDBAvailable) V1BetaAvailable() bool {
+ return p.v1beta
+}
+
func (p *PDBAvailable) Available() bool {
return p.v1 || p.v1beta
}
From 9143a2e3548bb0774e4da9eeebc154b557e680ae Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Wed, 12 Jul 2023 16:54:54 +0800
Subject: [PATCH 06/32] delete
---
pkg/controller/pdb.go | 57 +++++++++++++++++++++++++++++++++++--------
1 file changed, 47 insertions(+), 10 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 0bc2b7d1f37..d9eec1e617b 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -18,6 +18,9 @@ import (
"context"
"encoding/json"
"fmt"
+ "strings"
+ "sync"
+
v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2"
v1 "k8s.io/api/policy/v1"
"k8s.io/api/policy/v1beta1"
@@ -27,10 +30,41 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/klog/v2"
- "strings"
- "sync"
)
+func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
+ available := c.PDBAvailable()
+ if !available.Available() {
+ return nil
+ }
+ if available.V1Available() {
+ pdbs, err := c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).List(ctx, metav1.ListOptions{})
+ if err != nil {
+ return err
+ }
+ for _, pdb := range pdbs.Items {
+ err := c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Delete(ctx, pdb.Name, metav1.DeleteOptions{})
+ if err != nil {
+ return err
+ }
+ }
+ }
+ if available.V1BetaAvailable() {
+ pdbs, err := c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).List(ctx, metav1.ListOptions{})
+ if err != nil {
+ return err
+ }
+ for _, pdb := range pdbs.Items {
+ err := c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Delete(ctx, pdb.Name, metav1.DeleteOptions{})
+ if err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
+
+// CreateOrUpdatePDB - hold PDB as expected
func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err error) {
available := c.PDBAvailable()
if !available.Available() {
@@ -157,27 +191,30 @@ type PDBAvailable struct {
v1beta bool
}
+// V1Available - show if it support PDB v1
func (p *PDBAvailable) V1Available() bool {
return p.v1
}
+// V1BetaAvailable - show if it support PDB v1beta
func (p *PDBAvailable) V1BetaAvailable() bool {
return p.v1beta
}
+// Available - show if it support PDB
func (p *PDBAvailable) Available() bool {
return p.v1 || p.v1beta
}
-var globalPdbAvailable = PDBAvailable{}
-var globalPdbAvailableOnce = sync.Once{}
+var globalPDBAvailable = PDBAvailable{}
+var globalPDBAvailableOnce = sync.Once{}
func (c *Controller) PDBAvailable() PDBAvailable {
- globalPdbAvailableOnce.Do(func() {
+ globalPDBAvailableOnce.Do(func() {
defer func() {
- if globalPdbAvailable.v1 {
+ if globalPDBAvailable.v1 {
klog.Infof("PodDisruptionBudget: v1")
- } else if globalPdbAvailable.v1beta {
+ } else if globalPDBAvailable.v1beta {
klog.Infof("PodDisruptionBudget: v1beta")
} else {
klog.Infof("PodDisruptionBudget: unsupport")
@@ -188,7 +225,7 @@ func (c *Controller) PDBAvailable() PDBAvailable {
if r.GroupVersion == "policy/v1" {
for _, api := range r.APIResources {
if api.Kind == "PodDisruptionBudget" {
- globalPdbAvailable.v1 = true
+ globalPDBAvailable.v1 = true
return
}
}
@@ -196,12 +233,12 @@ func (c *Controller) PDBAvailable() PDBAvailable {
if r.GroupVersion == "policy/v1beta" {
for _, api := range r.APIResources {
if api.Kind == "PodDisruptionBudget" {
- globalPdbAvailable.v1beta = true
+ globalPDBAvailable.v1beta = true
return
}
}
}
}
})
- return globalPdbAvailable
+ return globalPDBAvailable
}
From 82e593d04ffd831ddfb7c294be93515fc57db8c4 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Wed, 12 Jul 2023 16:55:47 +0800
Subject: [PATCH 07/32] deletePDB
---
pkg/controller/pdb.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index d9eec1e617b..f2b2c537bcb 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -32,6 +32,7 @@ import (
"k8s.io/klog/v2"
)
+// DeletePDB - delete PDB for tenant
func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
available := c.PDBAvailable()
if !available.Available() {
From 72bab32c59dcd53946d3631add58b7e3f326f9f6 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Thu, 13 Jul 2023 17:47:20 +0800
Subject: [PATCH 08/32] deletePDB
---
pkg/controller/pdb.go | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index f2b2c537bcb..3d99c028e40 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -39,28 +39,24 @@ func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
return nil
}
if available.V1Available() {
- pdbs, err := c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).List(ctx, metav1.ListOptions{})
+ err := c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{
+ LabelSelector: metav1.SetAsLabelSelector(labels.Set{
+ v2.TenantLabel: t.Name,
+ }).String(),
+ })
if err != nil {
return err
}
- for _, pdb := range pdbs.Items {
- err := c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Delete(ctx, pdb.Name, metav1.DeleteOptions{})
- if err != nil {
- return err
- }
- }
}
if available.V1BetaAvailable() {
- pdbs, err := c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).List(ctx, metav1.ListOptions{})
+ err := c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{
+ LabelSelector: metav1.SetAsLabelSelector(labels.Set{
+ v2.TenantLabel: t.Name,
+ }).String(),
+ })
if err != nil {
return err
}
- for _, pdb := range pdbs.Items {
- err := c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Delete(ctx, pdb.Name, metav1.DeleteOptions{})
- if err != nil {
- return err
- }
- }
}
return nil
}
From f4e6d9bef6fbafc4ebfc334998ce06d7c9ee2035 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Fri, 14 Jul 2023 09:23:04 +0800
Subject: [PATCH 09/32] lint
---
pkg/controller/pdb.go | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 3d99c028e40..a5c17e9188d 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -183,12 +183,13 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
return nil
}
+// PDBAvailable - v1 for v1.PDB and v1beta for v1beta.PDB,flag for support or not
type PDBAvailable struct {
v1 bool
v1beta bool
}
-// V1Available - show if it support PDB v1
+// V1Available - show if it supports PDB v1
func (p *PDBAvailable) V1Available() bool {
return p.v1
}
@@ -198,7 +199,7 @@ func (p *PDBAvailable) V1BetaAvailable() bool {
return p.v1beta
}
-// Available - show if it support PDB
+// Available - show if it supports PDB
func (p *PDBAvailable) Available() bool {
return p.v1 || p.v1beta
}
@@ -206,6 +207,7 @@ func (p *PDBAvailable) Available() bool {
var globalPDBAvailable = PDBAvailable{}
var globalPDBAvailableOnce = sync.Once{}
+// PDBAvailable - return globalPDBAvailable
func (c *Controller) PDBAvailable() PDBAvailable {
globalPDBAvailableOnce.Do(func() {
defer func() {
From 2f36805b5b3fc08e9dbf4c8314fc448c6b8ccec3 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Fri, 14 Jul 2023 09:23:21 +0800
Subject: [PATCH 10/32] lint
---
pkg/controller/pdb.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index a5c17e9188d..d4cd36c67be 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -194,7 +194,7 @@ func (p *PDBAvailable) V1Available() bool {
return p.v1
}
-// V1BetaAvailable - show if it support PDB v1beta
+// V1BetaAvailable - show if it supports PDB v1beta
func (p *PDBAvailable) V1BetaAvailable() bool {
return p.v1beta
}
From c764fe337fee12c64e60e41d43d0ba2dd67b7fdd Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Fri, 14 Jul 2023 09:29:02 +0800
Subject: [PATCH 11/32] lint
---
pkg/controller/pdb.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index d4cd36c67be..16bf90e5f2a 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -73,7 +73,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
if available.V1Available() {
var pdb *v1.PodDisruptionBudget
- var isCreate = false
+ var isCreate bool
pdb, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Get(ctx, pool.Name, metav1.GetOptions{})
if err != nil {
if k8serrors.IsNotFound(err) {
@@ -125,7 +125,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
if available.V1BetaAvailable() {
var pdb *v1beta1.PodDisruptionBudget
- var isCreate = false
+ var isCreate bool
pdb, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Get(ctx, pool.Name, metav1.GetOptions{})
if err != nil {
if k8serrors.IsNotFound(err) {
From 3f26493663e972eaf66d4e463dbfd029e29e7679 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Fri, 14 Jul 2023 10:53:09 +0800
Subject: [PATCH 12/32] lint
---
pkg/controller/pdb.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 16bf90e5f2a..5cc9afcbd5b 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -204,8 +204,8 @@ func (p *PDBAvailable) Available() bool {
return p.v1 || p.v1beta
}
-var globalPDBAvailable = PDBAvailable{}
-var globalPDBAvailableOnce = sync.Once{}
+var globalPDBAvailable PDBAvailable
+var globalPDBAvailableOnce sync.Once
// PDBAvailable - return globalPDBAvailable
func (c *Controller) PDBAvailable() PDBAvailable {
From 3c091924570815504793a4948d3873639e79a526 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Fri, 14 Jul 2023 11:01:31 +0800
Subject: [PATCH 13/32] lint
---
pkg/controller/pdb.go | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 5cc9afcbd5b..0a86e4da30e 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -204,8 +204,10 @@ func (p *PDBAvailable) Available() bool {
return p.v1 || p.v1beta
}
-var globalPDBAvailable PDBAvailable
-var globalPDBAvailableOnce sync.Once
+var (
+ globalPDBAvailable PDBAvailable
+ globalPDBAvailableOnce sync.Once
+)
// PDBAvailable - return globalPDBAvailable
func (c *Controller) PDBAvailable() PDBAvailable {
From 81d8672907d0667d2d961362e299a903833b167b Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Sat, 15 Jul 2023 23:45:43 +0800
Subject: [PATCH 14/32] Add to controller
---
pkg/controller/decomission.go | 4 ++++
pkg/controller/main-controller.go | 6 ++++++
pkg/controller/pdb.go | 19 +++++++++++++++----
3 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/pkg/controller/decomission.go b/pkg/controller/decomission.go
index bbcde372e77..ca5e1bef40a 100644
--- a/pkg/controller/decomission.go
+++ b/pkg/controller/decomission.go
@@ -51,6 +51,10 @@ func (c *Controller) checkForPoolDecommission(ctx context.Context, key string, t
// if the number of pools in the spec is less that what we know in the status, a decomission is taking place
if len(tenant.Status.Pools) > len(tenant.Spec.Pools) {
+ err := c.DeletePDB(ctx, tenant)
+ if err != nil {
+ return nil, err
+ }
// check for empty pool names
var noDecom bool
for _, pool := range tenant.Spec.Pools {
diff --git a/pkg/controller/main-controller.go b/pkg/controller/main-controller.go
index b79a9fccf13..6732de6bc94 100644
--- a/pkg/controller/main-controller.go
+++ b/pkg/controller/main-controller.go
@@ -1306,6 +1306,12 @@ func (c *Controller) syncHandler(key string) (Result, error) {
c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "BucketsCreated", "Buckets created")
}
+ // Create Or Update PDB for tenant
+ err = c.CreateOrUpdatePDB(ctx, tenant)
+ if err != nil {
+ return WrapResult(Result{}, err)
+ }
+
// Finally, we update the status block of the Tenant resource to reflect the
// current state of the world
_, err = c.updateTenantStatus(ctx, tenant, StatusInitialized, totalAvailableReplicas)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 0a86e4da30e..d78393e2511 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -34,7 +34,7 @@ import (
// DeletePDB - delete PDB for tenant
func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
- available := c.PDBAvailable()
+ available := c.GetPDBAvailable()
if !available.Available() {
return nil
}
@@ -45,6 +45,11 @@ func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
}).String(),
})
if err != nil {
+ // don't exist
+ if k8serrors.IsNotFound(err) {
+ return nil
+ }
+ klog.Errorf("Delete tenant %s's V1.PDB failed:%s", t.Name, err.Error())
return err
}
}
@@ -55,6 +60,11 @@ func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
}).String(),
})
if err != nil {
+ // don't exist
+ if k8serrors.IsNotFound(err) {
+ return nil
+ }
+ klog.Errorf("Delete tenant %s's V1Bata.PDB failed:%s", t.Name, err.Error())
return err
}
}
@@ -63,7 +73,7 @@ func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
// CreateOrUpdatePDB - hold PDB as expected
func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err error) {
- available := c.PDBAvailable()
+ available := c.GetPDBAvailable()
if !available.Available() {
return nil
}
@@ -209,8 +219,9 @@ var (
globalPDBAvailableOnce sync.Once
)
-// PDBAvailable - return globalPDBAvailable
-func (c *Controller) PDBAvailable() PDBAvailable {
+// GetPDBAvailable - return globalPDBAvailable
+// thread safe
+func (c *Controller) GetPDBAvailable() PDBAvailable {
globalPDBAvailableOnce.Do(func() {
defer func() {
if globalPDBAvailable.v1 {
From 10bf3384ef3c54702783c7656e14be07ad56c4b7 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Mon, 17 Jul 2023 21:38:02 +0800
Subject: [PATCH 15/32] support minAvailable
---
pkg/controller/pdb.go | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index d78393e2511..c3a1cc0fd2e 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -95,15 +95,15 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
if !isCreate {
// exist and as expected
- if pdb.Spec.MaxUnavailable != nil && pdb.Spec.MaxUnavailable.IntValue() == (int(pool.Servers/2)) {
+ if pdb.Spec.MinAvailable != nil && pdb.Spec.MinAvailable.IntValue() == (int(pool.Servers/2)) {
return nil
}
}
// set filed we expected
pdb.Name = pool.Name
pdb.Namespace = t.Namespace
- maxUnavailable := intstr.FromInt(int(pool.Servers / 2))
- pdb.Spec.MaxUnavailable = &maxUnavailable
+ minAvailable := intstr.FromInt(int(pool.Servers/2) + 1)
+ pdb.Spec.MinAvailable = &minAvailable
pdb.Labels = map[string]string{
v2.TenantLabel: t.Name,
v2.PoolLabel: pool.Name,
@@ -120,7 +120,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
} else {
patchData := map[string]interface{}{
"spec": map[string]interface{}{
- "maxUnavailable": pdb.Spec.MaxUnavailable,
+ "minAvailable": pdb.Spec.MinAvailable,
},
}
pData, err := json.Marshal(patchData)
@@ -147,15 +147,15 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
if !isCreate {
// exist and as expected
- if pdb.Spec.MaxUnavailable != nil && pdb.Spec.MaxUnavailable.IntValue() == (int(pool.Servers/2)) {
+ if pdb.Spec.MinAvailable != nil && pdb.Spec.MinAvailable.IntValue() == (int(pool.Servers/2)) {
return nil
}
}
// set filed we expected
pdb.Name = pool.Name
pdb.Namespace = t.Namespace
- maxUnavailable := intstr.FromInt(int(pool.Servers / 2))
- pdb.Spec.MaxUnavailable = &maxUnavailable
+ minAvailable := intstr.FromInt(int(pool.Servers/2) + 1)
+ pdb.Spec.MinAvailable = &minAvailable
pdb.Labels = map[string]string{
v2.TenantLabel: t.Name,
v2.PoolLabel: pool.Name,
@@ -172,7 +172,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
} else {
patchData := map[string]interface{}{
"spec": map[string]interface{}{
- "maxUnavailable": pdb.Spec.MaxUnavailable,
+ "minAvailable": pdb.Spec.MinAvailable,
},
}
pData, err := json.Marshal(patchData)
From 7e93c822686f5c79436e5923bc294d80d9a4861c Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Mon, 17 Jul 2023 22:12:07 +0800
Subject: [PATCH 16/32] only sts ready can add pdb
---
pkg/controller/pdb.go | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index c3a1cc0fd2e..d9a18b82292 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -64,7 +64,7 @@ func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
if k8serrors.IsNotFound(err) {
return nil
}
- klog.Errorf("Delete tenant %s's V1Bata.PDB failed:%s", t.Name, err.Error())
+ klog.Errorf("Delete tenant %s's V1Beta.PDB failed:%s", t.Name, err.Error())
return err
}
}
@@ -81,6 +81,17 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if strings.TrimSpace(pool.Name) == "" {
continue
}
+ if available.Available() {
+ // check sts status first.
+ ssName := t.PoolStatefulsetName(&pool)
+ existingStatefulSet, err := c.statefulSetLister.StatefulSets(t.Namespace).Get(ssName)
+ if err != nil {
+ return err
+ }
+ if existingStatefulSet.Status.ReadyReplicas != existingStatefulSet.Status.Replicas || existingStatefulSet.Status.Replicas == 0 {
+ return nil
+ }
+ }
if available.V1Available() {
var pdb *v1.PodDisruptionBudget
var isCreate bool
From 42476f8215f6f72b31c3d841ade015dd67118643 Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 08:49:34 +0800
Subject: [PATCH 17/32] owner
---
pkg/controller/pdb.go | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index d9a18b82292..3853290a13e 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -18,6 +18,7 @@ import (
"context"
"encoding/json"
"fmt"
+ "k8s.io/apimachinery/pkg/runtime/schema"
"strings"
"sync"
@@ -123,6 +124,13 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
v2.PoolLabel: pool.Name,
v2.TenantLabel: t.Name,
})
+ pdb.OwnerReferences = []metav1.OwnerReference{
+ *metav1.NewControllerRef(t, schema.GroupVersionKind{
+ Group: v2.SchemeGroupVersion.Group,
+ Version: v2.SchemeGroupVersion.Version,
+ Kind: v2.MinIOCRDResourceKind,
+ }),
+ }
if isCreate {
_, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Create(ctx, pdb, metav1.CreateOptions{})
if err != nil {
@@ -175,6 +183,13 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
v2.PoolLabel: pool.Name,
v2.TenantLabel: t.Name,
})
+ pdb.OwnerReferences = []metav1.OwnerReference{
+ *metav1.NewControllerRef(t, schema.GroupVersionKind{
+ Group: v2.SchemeGroupVersion.Group,
+ Version: v2.SchemeGroupVersion.Version,
+ Kind: v2.MinIOCRDResourceKind,
+ }),
+ }
if isCreate {
_, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Create(ctx, pdb, metav1.CreateOptions{})
if err != nil {
From 3e81cb676855afd513f65bb5fcaebea1f4ba042a Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 08:55:11 +0800
Subject: [PATCH 18/32] lint
---
pkg/controller/pdb.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 3853290a13e..d820895b505 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -18,7 +18,6 @@ import (
"context"
"encoding/json"
"fmt"
- "k8s.io/apimachinery/pkg/runtime/schema"
"strings"
"sync"
@@ -28,6 +27,7 @@ import (
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/klog/v2"
From dbaed8c7f4c457a17507bd1a8c5295274079cdb5 Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 10:41:23 +0800
Subject: [PATCH 19/32] runtime
---
pkg/controller/pdb.go | 3 +++
1 file changed, 3 insertions(+)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index d820895b505..402676f2271 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -92,6 +92,9 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if existingStatefulSet.Status.ReadyReplicas != existingStatefulSet.Status.Replicas || existingStatefulSet.Status.Replicas == 0 {
return nil
}
+ if t.Status.CurrentState != StatusInitialized {
+ return nil
+ }
}
if available.V1Available() {
var pdb *v1.PodDisruptionBudget
From 61badd02d2b476c2d143c67f00a610e8f9d7c735 Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 10:44:41 +0800
Subject: [PATCH 20/32] runtime
---
pkg/controller/main-controller.go | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/pkg/controller/main-controller.go b/pkg/controller/main-controller.go
index 6732de6bc94..b857ffa8984 100644
--- a/pkg/controller/main-controller.go
+++ b/pkg/controller/main-controller.go
@@ -1306,15 +1306,16 @@ func (c *Controller) syncHandler(key string) (Result, error) {
c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "BucketsCreated", "Buckets created")
}
+ // Finally, we update the status block of the Tenant resource to reflect the
+ // current state of the world
+ tenant, err = c.updateTenantStatus(ctx, tenant, StatusInitialized, totalAvailableReplicas)
+
// Create Or Update PDB for tenant
err = c.CreateOrUpdatePDB(ctx, tenant)
if err != nil {
return WrapResult(Result{}, err)
}
- // Finally, we update the status block of the Tenant resource to reflect the
- // current state of the world
- _, err = c.updateTenantStatus(ctx, tenant, StatusInitialized, totalAvailableReplicas)
return WrapResult(Result{}, err)
}
From 8f7a9f6d657abc1fca98252e8034a8d16d5c6f7d Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 10:51:42 +0800
Subject: [PATCH 21/32] error
---
pkg/controller/pdb.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 402676f2271..2e2cedcb340 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -151,7 +151,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
_, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Patch(ctx, t.Name, types.MergePatchType, pData, metav1.PatchOptions{})
if err != nil {
- return nil
+ return err
}
}
}
@@ -210,7 +210,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
_, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Patch(ctx, t.Name, types.MergePatchType, pData, metav1.PatchOptions{})
if err != nil {
- return nil
+ return err
}
}
}
From 1e5c470a60e14c57d7b982b8cbb4d3da24a10efb Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 11:22:03 +0800
Subject: [PATCH 22/32] error
---
pkg/controller/main-controller.go | 8 ++++----
pkg/controller/pdb.go | 14 ++++++++------
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/pkg/controller/main-controller.go b/pkg/controller/main-controller.go
index b857ffa8984..2be7c60e8f7 100644
--- a/pkg/controller/main-controller.go
+++ b/pkg/controller/main-controller.go
@@ -1306,16 +1306,16 @@ func (c *Controller) syncHandler(key string) (Result, error) {
c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "BucketsCreated", "Buckets created")
}
- // Finally, we update the status block of the Tenant resource to reflect the
- // current state of the world
- tenant, err = c.updateTenantStatus(ctx, tenant, StatusInitialized, totalAvailableReplicas)
-
// Create Or Update PDB for tenant
err = c.CreateOrUpdatePDB(ctx, tenant)
if err != nil {
return WrapResult(Result{}, err)
}
+ // Finally, we update the status block of the Tenant resource to reflect the
+ // current state of the world
+ _, err = c.updateTenantStatus(ctx, tenant, StatusInitialized, totalAvailableReplicas)
+
return WrapResult(Result{}, err)
}
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 2e2cedcb340..2c45101b03c 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -97,9 +97,10 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
}
if available.V1Available() {
+ pdbName := t.Name + "-" + pool.Name
var pdb *v1.PodDisruptionBudget
var isCreate bool
- pdb, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Get(ctx, pool.Name, metav1.GetOptions{})
+ pdb, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Get(ctx, pdbName, metav1.GetOptions{})
if err != nil {
if k8serrors.IsNotFound(err) {
pdb = &v1.PodDisruptionBudget{}
@@ -115,7 +116,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
}
// set filed we expected
- pdb.Name = pool.Name
+ pdb.Name = pdbName
pdb.Namespace = t.Namespace
minAvailable := intstr.FromInt(int(pool.Servers/2) + 1)
pdb.Spec.MinAvailable = &minAvailable
@@ -149,16 +150,17 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if err != nil {
return err
}
- _, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Patch(ctx, t.Name, types.MergePatchType, pData, metav1.PatchOptions{})
+ _, err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).Patch(ctx, pdbName, types.MergePatchType, pData, metav1.PatchOptions{})
if err != nil {
return err
}
}
}
if available.V1BetaAvailable() {
+ pdbName := t.Name + "-" + pool.Name
var pdb *v1beta1.PodDisruptionBudget
var isCreate bool
- pdb, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Get(ctx, pool.Name, metav1.GetOptions{})
+ pdb, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Get(ctx, pdbName, metav1.GetOptions{})
if err != nil {
if k8serrors.IsNotFound(err) {
pdb = &v1beta1.PodDisruptionBudget{}
@@ -174,7 +176,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
}
// set filed we expected
- pdb.Name = pool.Name
+ pdb.Name = pdbName
pdb.Namespace = t.Namespace
minAvailable := intstr.FromInt(int(pool.Servers/2) + 1)
pdb.Spec.MinAvailable = &minAvailable
@@ -208,7 +210,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if err != nil {
return err
}
- _, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Patch(ctx, t.Name, types.MergePatchType, pData, metav1.PatchOptions{})
+ _, err = c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).Patch(ctx, pdbName, types.MergePatchType, pData, metav1.PatchOptions{})
if err != nil {
return err
}
From ba2d0eafc2346efd52f1c4a6c09facf4e0c20caf Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 11:23:39 +0800
Subject: [PATCH 23/32] status
---
pkg/controller/pdb.go | 3 ---
1 file changed, 3 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 2c45101b03c..47e47fecde8 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -92,9 +92,6 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if existingStatefulSet.Status.ReadyReplicas != existingStatefulSet.Status.Replicas || existingStatefulSet.Status.Replicas == 0 {
return nil
}
- if t.Status.CurrentState != StatusInitialized {
- return nil
- }
}
if available.V1Available() {
pdbName := t.Name + "-" + pool.Name
From 036666a70db934077d9abfc687971e91cec94e5a Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 11:42:15 +0800
Subject: [PATCH 24/32] if
---
pkg/controller/pdb.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 47e47fecde8..e002f90b4aa 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -108,7 +108,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
if !isCreate {
// exist and as expected
- if pdb.Spec.MinAvailable != nil && pdb.Spec.MinAvailable.IntValue() == (int(pool.Servers/2)) {
+ if pdb.Spec.MinAvailable != nil && pdb.Spec.MinAvailable.IntValue() == (int(pool.Servers/2)+1) {
return nil
}
}
@@ -168,7 +168,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
}
if !isCreate {
// exist and as expected
- if pdb.Spec.MinAvailable != nil && pdb.Spec.MinAvailable.IntValue() == (int(pool.Servers/2)) {
+ if pdb.Spec.MinAvailable != nil && pdb.Spec.MinAvailable.IntValue() == (int(pool.Servers/2)+1) {
return nil
}
}
From daf2d2af559ec5324a1fc771483baedce7d2a599 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Tue, 18 Jul 2023 12:21:11 +0800
Subject: [PATCH 25/32] tenant should
---
pkg/controller/main-controller.go | 8 ++++----
pkg/controller/pdb.go | 7 +++++--
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/pkg/controller/main-controller.go b/pkg/controller/main-controller.go
index 2be7c60e8f7..b857ffa8984 100644
--- a/pkg/controller/main-controller.go
+++ b/pkg/controller/main-controller.go
@@ -1306,16 +1306,16 @@ func (c *Controller) syncHandler(key string) (Result, error) {
c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "BucketsCreated", "Buckets created")
}
+ // Finally, we update the status block of the Tenant resource to reflect the
+ // current state of the world
+ tenant, err = c.updateTenantStatus(ctx, tenant, StatusInitialized, totalAvailableReplicas)
+
// Create Or Update PDB for tenant
err = c.CreateOrUpdatePDB(ctx, tenant)
if err != nil {
return WrapResult(Result{}, err)
}
- // Finally, we update the status block of the Tenant resource to reflect the
- // current state of the world
- _, err = c.updateTenantStatus(ctx, tenant, StatusInitialized, totalAvailableReplicas)
-
return WrapResult(Result{}, err)
}
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index e002f90b4aa..bf2c8fa1181 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -92,6 +92,9 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if existingStatefulSet.Status.ReadyReplicas != existingStatefulSet.Status.Replicas || existingStatefulSet.Status.Replicas == 0 {
return nil
}
+ if t.Status.CurrentState != StatusInitialized {
+ return nil
+ }
}
if available.V1Available() {
pdbName := t.Name + "-" + pool.Name
@@ -122,8 +125,8 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
v2.PoolLabel: pool.Name,
}
pdb.Spec.Selector = metav1.SetAsLabelSelector(labels.Set{
- v2.PoolLabel: pool.Name,
v2.TenantLabel: t.Name,
+ v2.PoolLabel: pool.Name,
})
pdb.OwnerReferences = []metav1.OwnerReference{
*metav1.NewControllerRef(t, schema.GroupVersionKind{
@@ -182,8 +185,8 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
v2.PoolLabel: pool.Name,
}
pdb.Spec.Selector = metav1.SetAsLabelSelector(labels.Set{
- v2.PoolLabel: pool.Name,
v2.TenantLabel: t.Name,
+ v2.PoolLabel: pool.Name,
})
pdb.OwnerReferences = []metav1.OwnerReference{
*metav1.NewControllerRef(t, schema.GroupVersionKind{
From ff7aef1754b7024abd0c1a4f82299fa9a2c42a86 Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Tue, 18 Jul 2023 14:22:08 +0800
Subject: [PATCH 26/32] suggest
---
pkg/controller/pdb.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index bf2c8fa1181..e0aeaa0a982 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -260,7 +260,7 @@ func (c *Controller) GetPDBAvailable() PDBAvailable {
} else if globalPDBAvailable.v1beta {
klog.Infof("PodDisruptionBudget: v1beta")
} else {
- klog.Infof("PodDisruptionBudget: unsupport")
+ klog.Infof("PodDisruptionBudget: not supported")
}
}()
resouces, _ := c.kubeClientSet.Discovery().ServerPreferredResources()
From 05ba1180f96aa2eefb95a433870c55f713bc469e Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Tue, 18 Jul 2023 19:24:07 +0800
Subject: [PATCH 27/32] update serviceCount
---
helm/operator/templates/cluster-role.yaml | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/helm/operator/templates/cluster-role.yaml b/helm/operator/templates/cluster-role.yaml
index 0b81deff385..9c425470c12 100644
--- a/helm/operator/templates/cluster-role.yaml
+++ b/helm/operator/templates/cluster-role.yaml
@@ -164,3 +164,14 @@ rules:
- get
- update
- create
+ - apiGroups:
+ - policy
+ resources:
+ - poddisruptionbudgets
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
\ No newline at end of file
From f049a4c0b47b03ba805ba244886a48bffa048721 Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Tue, 18 Jul 2023 19:41:01 +0800
Subject: [PATCH 28/32] update serviceCount
---
resources/base/cluster-role.yaml | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/resources/base/cluster-role.yaml b/resources/base/cluster-role.yaml
index bc3fee66b01..bb1a59d8a8d 100644
--- a/resources/base/cluster-role.yaml
+++ b/resources/base/cluster-role.yaml
@@ -163,3 +163,14 @@ rules:
- get
- update
- create
+ - apiGroups:
+ - policy
+ resources:
+ - poddisruptionbudgets
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
From bcdfe1735b86b1e3024a312f8e1f5fb8bc4eeaa2 Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Wed, 19 Jul 2023 18:33:31 +0800
Subject: [PATCH 29/32] fix
---
pkg/controller/pdb.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index e0aeaa0a982..f19dc6db2fe 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -112,7 +112,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if !isCreate {
// exist and as expected
if pdb.Spec.MinAvailable != nil && pdb.Spec.MinAvailable.IntValue() == (int(pool.Servers/2)+1) {
- return nil
+ continue
}
}
// set filed we expected
@@ -172,7 +172,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
if !isCreate {
// exist and as expected
if pdb.Spec.MinAvailable != nil && pdb.Spec.MinAvailable.IntValue() == (int(pool.Servers/2)+1) {
- return nil
+ continue
}
}
// set filed we expected
From b9c2f30314a4847418223a4a8c81b24bac389603 Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Wed, 19 Jul 2023 18:34:32 +0800
Subject: [PATCH 30/32] fix
---
pkg/controller/pdb.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index f19dc6db2fe..539b7e1fa4c 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -90,7 +90,7 @@ func (c *Controller) CreateOrUpdatePDB(ctx context.Context, t *v2.Tenant) (err e
return err
}
if existingStatefulSet.Status.ReadyReplicas != existingStatefulSet.Status.Replicas || existingStatefulSet.Status.Replicas == 0 {
- return nil
+ continue
}
if t.Status.CurrentState != StatusInitialized {
return nil
From 290f4b8ae0b7a672afc20ca0bc40b5c1e9f95ee6 Mon Sep 17 00:00:00 2001
From: "guozhi.li"
Date: Wed, 19 Jul 2023 18:45:22 +0800
Subject: [PATCH 31/32] fix
---
pkg/controller/pdb.go | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/pkg/controller/pdb.go b/pkg/controller/pdb.go
index 539b7e1fa4c..0e8a7e9d5b8 100644
--- a/pkg/controller/pdb.go
+++ b/pkg/controller/pdb.go
@@ -40,10 +40,8 @@ func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
return nil
}
if available.V1Available() {
- err := c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{
- LabelSelector: metav1.SetAsLabelSelector(labels.Set{
- v2.TenantLabel: t.Name,
- }).String(),
+ err = c.kubeClientSet.PolicyV1().PodDisruptionBudgets(t.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{
+ LabelSelector: fmt.Sprintf("%s=%s", v2.TenantLabel, t.Name),
})
if err != nil {
// don't exist
@@ -56,9 +54,7 @@ func (c *Controller) DeletePDB(ctx context.Context, t *v2.Tenant) (err error) {
}
if available.V1BetaAvailable() {
err := c.kubeClientSet.PolicyV1beta1().PodDisruptionBudgets(t.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{
- LabelSelector: metav1.SetAsLabelSelector(labels.Set{
- v2.TenantLabel: t.Name,
- }).String(),
+ LabelSelector: fmt.Sprintf("%s=%s", v2.TenantLabel, t.Name),
})
if err != nil {
// don't exist
From 63d05c5abedecdba0614ebed571fdc13b3e08cae Mon Sep 17 00:00:00 2001
From: jiuker <2818723467@qq.com>
Date: Wed, 19 Jul 2023 19:52:11 +0800
Subject: [PATCH 32/32] update serviceCount
---
helm/operator/templates/cluster-role.yaml | 3 ++-
resources/base/cluster-role.yaml | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/helm/operator/templates/cluster-role.yaml b/helm/operator/templates/cluster-role.yaml
index 9c425470c12..36c6e4d9f13 100644
--- a/helm/operator/templates/cluster-role.yaml
+++ b/helm/operator/templates/cluster-role.yaml
@@ -174,4 +174,5 @@ rules:
- get
- list
- patch
- - update
\ No newline at end of file
+ - update
+ - deletecollection
\ No newline at end of file
diff --git a/resources/base/cluster-role.yaml b/resources/base/cluster-role.yaml
index bb1a59d8a8d..22a8dcad694 100644
--- a/resources/base/cluster-role.yaml
+++ b/resources/base/cluster-role.yaml
@@ -174,3 +174,4 @@ rules:
- list
- patch
- update
+ - deletecollection