Skip to content

Commit d8072ee

Browse files
authored
[Feature] Use v1 PDB in 1.21 kubernetes (#1006)
1 parent 4405567 commit d8072ee

File tree

18 files changed

+341
-276
lines changed

18 files changed

+341
-276
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
- (Feature) Add `ArangoJob` CRD auto-installer
1111
- (Feature) Add RestartPolicyAlways to ArangoDeployment in order to restart ArangoDB on failure
1212
- (Feature) Set a leader in active fail-over mode
13+
- (Feature) Use policy/v1 instead policy/v1beta1
1314

1415
## [1.2.13](https://github.com/arangodb/kube-arangodb/tree/1.2.13) (2022-06-07)
1516
- (Bugfix) Fix arangosync members state inspection

pkg/deployment/resources/annotations.go

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,21 @@ package resources
2323
import (
2424
"context"
2525

26-
"github.com/arangodb/kube-arangodb/pkg/util/globals"
27-
28-
"github.com/arangodb/kube-arangodb/pkg/deployment/patch"
29-
"github.com/arangodb/kube-arangodb/pkg/util/collection"
30-
inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector"
3126
monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
27+
"github.com/rs/zerolog/log"
28+
core "k8s.io/api/core/v1"
29+
policyv1 "k8s.io/api/policy/v1"
30+
policyv1beta1 "k8s.io/api/policy/v1beta1"
31+
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
3232
"k8s.io/apimachinery/pkg/types"
3333

3434
"github.com/arangodb/kube-arangodb/pkg/apis/deployment"
3535
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
36+
"github.com/arangodb/kube-arangodb/pkg/deployment/patch"
37+
"github.com/arangodb/kube-arangodb/pkg/util/collection"
38+
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3639
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
37-
"github.com/rs/zerolog/log"
38-
core "k8s.io/api/core/v1"
39-
policy "k8s.io/api/policy/v1beta1"
40-
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
40+
inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector"
4141
)
4242

4343
type PatchFunc func(name string, d []byte) error
@@ -98,8 +98,15 @@ func (r *Resources) EnsureAnnotations(ctx context.Context, cachedStatus inspecto
9898

9999
patchPDB := func(name string, d []byte) error {
100100
return globals.GetGlobalTimeouts().Kubernetes().RunWithTimeout(ctx, func(ctxChild context.Context) error {
101+
if _, err := cachedStatus.PodDisruptionBudget().V1(); err == nil {
102+
_, err = cachedStatus.PodDisruptionBudgetsModInterface().V1().Patch(ctxChild, name,
103+
types.JSONPatchType, d, meta.PatchOptions{})
104+
return err
105+
}
106+
101107
_, err := cachedStatus.PodDisruptionBudgetsModInterface().V1Beta1().Patch(ctxChild, name,
102108
types.JSONPatchType, d, meta.PatchOptions{})
109+
103110
return err
104111
})
105112
}
@@ -206,15 +213,29 @@ func ensureServicesAnnotations(patch PatchFunc, cachedStatus inspectorInterface.
206213
return nil
207214
}
208215

209-
func ensurePdbsAnnotations(patch PatchFunc, cachedStatus inspectorInterface.Inspector, kind, name, namespace string, spec api.DeploymentSpec) error {
210-
i, err := cachedStatus.PodDisruptionBudget().V1Beta1()
216+
func ensurePdbsAnnotations(patch PatchFunc, cachedStatus inspectorInterface.Inspector, kind, name, namespace string,
217+
spec api.DeploymentSpec) error {
218+
if inspector, err := cachedStatus.PodDisruptionBudget().V1(); err == nil {
219+
if err := inspector.Iterate(func(podDisruptionBudget *policyv1.PodDisruptionBudget) error {
220+
ensureAnnotationsMap(podDisruptionBudget.Kind, podDisruptionBudget, spec, patch)
221+
return nil
222+
}, func(podDisruptionBudget *policyv1.PodDisruptionBudget) bool {
223+
return k8sutil.IsChildResource(kind, name, namespace, podDisruptionBudget)
224+
}); err != nil {
225+
return err
226+
}
227+
228+
return nil
229+
}
230+
231+
inspector, err := cachedStatus.PodDisruptionBudget().V1Beta1()
211232
if err != nil {
212233
return err
213234
}
214-
if err := i.Iterate(func(podDisruptionBudget *policy.PodDisruptionBudget) error {
235+
if err := inspector.Iterate(func(podDisruptionBudget *policyv1beta1.PodDisruptionBudget) error {
215236
ensureAnnotationsMap(podDisruptionBudget.Kind, podDisruptionBudget, spec, patch)
216237
return nil
217-
}, func(podDisruptionBudget *policy.PodDisruptionBudget) bool {
238+
}, func(podDisruptionBudget *policyv1beta1.PodDisruptionBudget) bool {
218239
return k8sutil.IsChildResource(kind, name, namespace, podDisruptionBudget)
219240
}); err != nil {
220241
return err

pkg/deployment/resources/inspector/pdbs.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@ import (
2424
"context"
2525
"time"
2626

27-
"github.com/arangodb/kube-arangodb/pkg/util/errors"
28-
"github.com/arangodb/kube-arangodb/pkg/util/globals"
29-
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
3027
policyv1 "k8s.io/api/policy/v1"
3128
policyv1beta1 "k8s.io/api/policy/v1beta1"
3229
apiErrors "k8s.io/apimachinery/pkg/api/errors"
3330
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
3431
"k8s.io/apimachinery/pkg/runtime/schema"
32+
33+
"github.com/arangodb/kube-arangodb/pkg/util/errors"
34+
"github.com/arangodb/kube-arangodb/pkg/util/globals"
35+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
3536
)
3637

3738
func init() {
@@ -50,7 +51,7 @@ func (p podDisruptionBudgetsInspectorLoader) Component() throttle.Component {
5051
func (p podDisruptionBudgetsInspectorLoader) Load(ctx context.Context, i *inspectorState) {
5152
var q podDisruptionBudgetsInspector
5253

53-
if i.versionInfo.Major() == 128 && i.versionInfo.Minor() >= 21 { // Above 1.21, disable temporally
54+
if i.versionInfo.CompareTo("1.21") >= 0 {
5455
p.loadV1(ctx, i, &q)
5556

5657
q.v1beta1 = &podDisruptionBudgetsInspectorV1Beta1{

pkg/deployment/resources/inspector/pdbs_anonymous.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
package inspector
2222

2323
import (
24-
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous"
2524
"k8s.io/apimachinery/pkg/runtime/schema"
25+
26+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous"
2627
)
2728

2829
func (p *podDisruptionBudgetsInspector) Anonymous(gvk schema.GroupVersionKind) (anonymous.Interface, bool) {

pkg/deployment/resources/inspector/pdbs_constants.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@
2121
package inspector
2222

2323
import (
24-
policy "k8s.io/api/policy/v1"
24+
policyv1 "k8s.io/api/policy/v1"
2525
"k8s.io/apimachinery/pkg/runtime/schema"
2626
)
2727

2828
// PodDisruptionBudget
2929
const (
30-
PodDisruptionBudgetGroup = policy.GroupName
30+
PodDisruptionBudgetGroup = policyv1.GroupName
3131
PodDisruptionBudgetResource = "poddisruptionbudgets"
3232
PodDisruptionBudgetKind = "PodDisruptionBudget"
3333
PodDisruptionBudgetVersionV1Beta1 = "v1beta1"
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
//
2+
// DISCLAIMER
3+
//
4+
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
5+
//
6+
// Licensed under the Apache License, Version 2.0 (the "License");
7+
// you may not use this file except in compliance with the License.
8+
// You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing, software
13+
// distributed under the License is distributed on an "AS IS" BASIS,
14+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
// See the License for the specific language governing permissions and
16+
// limitations under the License.
17+
//
18+
// Copyright holder is ArangoDB GmbH, Cologne, Germany
19+
//
20+
21+
package inspector
22+
23+
import (
24+
"context"
25+
26+
policyv1 "k8s.io/api/policy/v1"
27+
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
28+
"k8s.io/apimachinery/pkg/types"
29+
policytypedv1 "k8s.io/client-go/kubernetes/typed/policy/v1"
30+
31+
poddisruptionbudgetv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1"
32+
)
33+
34+
type podDisruptionBudgetsModV1 struct {
35+
i *inspectorState
36+
}
37+
38+
func (p podDisruptionBudgetsMod) V1() poddisruptionbudgetv1.ModInterface {
39+
return podDisruptionBudgetsModV1(p)
40+
}
41+
42+
func (p podDisruptionBudgetsModV1) client() policytypedv1.PodDisruptionBudgetInterface {
43+
return p.i.Client().Kubernetes().PolicyV1().PodDisruptionBudgets(p.i.Namespace())
44+
}
45+
46+
func (p podDisruptionBudgetsModV1) Create(ctx context.Context, podDisruptionBudget *policyv1.PodDisruptionBudget,
47+
opts meta.CreateOptions) (*policyv1.PodDisruptionBudget, error) {
48+
if podDisruptionBudget, err := p.client().Create(ctx, podDisruptionBudget, opts); err != nil {
49+
return podDisruptionBudget, err
50+
} else {
51+
p.i.GetThrottles().PodDisruptionBudget().Invalidate()
52+
return podDisruptionBudget, err
53+
}
54+
}
55+
56+
func (p podDisruptionBudgetsModV1) Update(ctx context.Context, podDisruptionBudget *policyv1.PodDisruptionBudget,
57+
opts meta.UpdateOptions) (*policyv1.PodDisruptionBudget, error) {
58+
if podDisruptionBudget, err := p.client().Update(ctx, podDisruptionBudget, opts); err != nil {
59+
return podDisruptionBudget, err
60+
} else {
61+
p.i.GetThrottles().PodDisruptionBudget().Invalidate()
62+
return podDisruptionBudget, err
63+
}
64+
}
65+
66+
func (p podDisruptionBudgetsModV1) Patch(ctx context.Context, name string, pt types.PatchType, data []byte,
67+
opts meta.PatchOptions, subresources ...string) (result *policyv1.PodDisruptionBudget, err error) {
68+
if podDisruptionBudget, err := p.client().Patch(ctx, name, pt, data, opts, subresources...); err != nil {
69+
return podDisruptionBudget, err
70+
} else {
71+
p.i.GetThrottles().PodDisruptionBudget().Invalidate()
72+
return podDisruptionBudget, err
73+
}
74+
}
75+
76+
func (p podDisruptionBudgetsModV1) Delete(ctx context.Context, name string, opts meta.DeleteOptions) error {
77+
if err := p.client().Delete(ctx, name, opts); err != nil {
78+
return err
79+
} else {
80+
p.i.GetThrottles().PodDisruptionBudget().Invalidate()
81+
return err
82+
}
83+
}

pkg/deployment/resources/inspector/pdbs_mod_v1beta1.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,27 @@ package inspector
2323
import (
2424
"context"
2525

26-
podDisruptionBudgetv1beta1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1beta1"
27-
policy "k8s.io/api/policy/v1beta1"
26+
policyv1beta1 "k8s.io/api/policy/v1beta1"
2827
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
2928
"k8s.io/apimachinery/pkg/types"
30-
policyTyped "k8s.io/client-go/kubernetes/typed/policy/v1beta1"
29+
policytypedv1beta1 "k8s.io/client-go/kubernetes/typed/policy/v1beta1"
30+
31+
podsisruptionbudgetv1beta1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1beta1"
3132
)
3233

33-
func (p podDisruptionBudgetsMod) V1Beta1() podDisruptionBudgetv1beta1.ModInterface {
34-
return podDisruptionBudgetsModV1(p)
34+
func (p podDisruptionBudgetsMod) V1Beta1() podsisruptionbudgetv1beta1.ModInterface {
35+
return podDisruptionBudgetsModV1Beta1(p)
3536
}
3637

37-
type podDisruptionBudgetsModV1 struct {
38+
type podDisruptionBudgetsModV1Beta1 struct {
3839
i *inspectorState
3940
}
4041

41-
func (p podDisruptionBudgetsModV1) client() policyTyped.PodDisruptionBudgetInterface {
42+
func (p podDisruptionBudgetsModV1Beta1) client() policytypedv1beta1.PodDisruptionBudgetInterface {
4243
return p.i.Client().Kubernetes().PolicyV1beta1().PodDisruptionBudgets(p.i.Namespace())
4344
}
4445

45-
func (p podDisruptionBudgetsModV1) Create(ctx context.Context, podDisruptionBudget *policy.PodDisruptionBudget, opts meta.CreateOptions) (*policy.PodDisruptionBudget, error) {
46+
func (p podDisruptionBudgetsModV1Beta1) Create(ctx context.Context, podDisruptionBudget *policyv1beta1.PodDisruptionBudget, opts meta.CreateOptions) (*policyv1beta1.PodDisruptionBudget, error) {
4647
if podDisruptionBudget, err := p.client().Create(ctx, podDisruptionBudget, opts); err != nil {
4748
return podDisruptionBudget, err
4849
} else {
@@ -51,7 +52,7 @@ func (p podDisruptionBudgetsModV1) Create(ctx context.Context, podDisruptionBudg
5152
}
5253
}
5354

54-
func (p podDisruptionBudgetsModV1) Update(ctx context.Context, podDisruptionBudget *policy.PodDisruptionBudget, opts meta.UpdateOptions) (*policy.PodDisruptionBudget, error) {
55+
func (p podDisruptionBudgetsModV1Beta1) Update(ctx context.Context, podDisruptionBudget *policyv1beta1.PodDisruptionBudget, opts meta.UpdateOptions) (*policyv1beta1.PodDisruptionBudget, error) {
5556
if podDisruptionBudget, err := p.client().Update(ctx, podDisruptionBudget, opts); err != nil {
5657
return podDisruptionBudget, err
5758
} else {
@@ -60,7 +61,7 @@ func (p podDisruptionBudgetsModV1) Update(ctx context.Context, podDisruptionBudg
6061
}
6162
}
6263

63-
func (p podDisruptionBudgetsModV1) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *policy.PodDisruptionBudget, err error) {
64+
func (p podDisruptionBudgetsModV1Beta1) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *policyv1beta1.PodDisruptionBudget, err error) {
6465
if podDisruptionBudget, err := p.client().Patch(ctx, name, pt, data, opts, subresources...); err != nil {
6566
return podDisruptionBudget, err
6667
} else {
@@ -69,7 +70,7 @@ func (p podDisruptionBudgetsModV1) Patch(ctx context.Context, name string, pt ty
6970
}
7071
}
7172

72-
func (p podDisruptionBudgetsModV1) Delete(ctx context.Context, name string, opts meta.DeleteOptions) error {
73+
func (p podDisruptionBudgetsModV1Beta1) Delete(ctx context.Context, name string, opts meta.DeleteOptions) error {
7374
if err := p.client().Delete(ctx, name, opts); err != nil {
7475
return err
7576
} else {

pkg/deployment/resources/inspector/pdbs_v1.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ package inspector
2323
import (
2424
"context"
2525

26-
"github.com/arangodb/kube-arangodb/pkg/util/errors"
27-
ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1"
28-
policy "k8s.io/api/policy/v1"
26+
policyv1 "k8s.io/api/policy/v1"
2927
apiErrors "k8s.io/apimachinery/pkg/api/errors"
3028
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
29+
30+
"github.com/arangodb/kube-arangodb/pkg/util/errors"
31+
ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1"
3132
)
3233

3334
func (p *podDisruptionBudgetsInspector) V1() (ins.Inspector, error) {
@@ -41,7 +42,7 @@ func (p *podDisruptionBudgetsInspector) V1() (ins.Inspector, error) {
4142
type podDisruptionBudgetsInspectorV1 struct {
4243
podDisruptionBudgetInspector *podDisruptionBudgetsInspector
4344

44-
podDisruptionBudgets map[string]*policy.PodDisruptionBudget
45+
podDisruptionBudgets map[string]*policyv1.PodDisruptionBudget
4546
err error
4647
}
4748

@@ -65,16 +66,16 @@ func (p *podDisruptionBudgetsInspectorV1) validate() error {
6566
return nil
6667
}
6768

68-
func (p *podDisruptionBudgetsInspectorV1) PodDisruptionBudgets() []*policy.PodDisruptionBudget {
69-
var r []*policy.PodDisruptionBudget
69+
func (p *podDisruptionBudgetsInspectorV1) PodDisruptionBudgets() []*policyv1.PodDisruptionBudget {
70+
var r []*policyv1.PodDisruptionBudget
7071
for _, podDisruptionBudget := range p.podDisruptionBudgets {
7172
r = append(r, podDisruptionBudget)
7273
}
7374

7475
return r
7576
}
7677

77-
func (p *podDisruptionBudgetsInspectorV1) GetSimple(name string) (*policy.PodDisruptionBudget, bool) {
78+
func (p *podDisruptionBudgetsInspectorV1) GetSimple(name string) (*policyv1.PodDisruptionBudget, bool) {
7879
podDisruptionBudget, ok := p.podDisruptionBudgets[name]
7980
if !ok {
8081
return nil, false
@@ -93,7 +94,7 @@ func (p *podDisruptionBudgetsInspectorV1) Iterate(action ins.Action, filters ...
9394
return nil
9495
}
9596

96-
func (p *podDisruptionBudgetsInspectorV1) iteratePodDisruptionBudget(podDisruptionBudget *policy.PodDisruptionBudget, action ins.Action, filters ...ins.Filter) error {
97+
func (p *podDisruptionBudgetsInspectorV1) iteratePodDisruptionBudget(podDisruptionBudget *policyv1.PodDisruptionBudget, action ins.Action, filters ...ins.Filter) error {
9798
for _, f := range filters {
9899
if f == nil {
99100
continue
@@ -111,7 +112,7 @@ func (p *podDisruptionBudgetsInspectorV1) Read() ins.ReadInterface {
111112
return p
112113
}
113114

114-
func (p *podDisruptionBudgetsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*policy.PodDisruptionBudget, error) {
115+
func (p *podDisruptionBudgetsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*policyv1.PodDisruptionBudget, error) {
115116
if s, ok := p.GetSimple(name); !ok {
116117
return nil, apiErrors.NewNotFound(PodDisruptionBudgetGR(), name)
117118
} else {

0 commit comments

Comments
 (0)