Skip to content

Commit aa4a1ad

Browse files
committed
Add support for pod disruption budget
1 parent 2838b78 commit aa4a1ad

File tree

17 files changed

+215
-0
lines changed

17 files changed

+215
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License.AGPL.txt in the project root for license information.
4+
5+
package common
6+
7+
import (
8+
"fmt"
9+
10+
policy "k8s.io/api/policy/v1"
11+
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
"k8s.io/apimachinery/pkg/util/intstr"
13+
)
14+
15+
func PodDisruptionBudget(context *RenderContext, component string, maxUnavailable int, selector *v1.LabelSelector) *policy.PodDisruptionBudget {
16+
muCount := intstr.FromInt(maxUnavailable)
17+
18+
return &policy.PodDisruptionBudget{
19+
ObjectMeta: v1.ObjectMeta{
20+
Name: fmt.Sprintf("%v-pdb", component),
21+
Namespace: context.Namespace,
22+
},
23+
Spec: policy.PodDisruptionBudgetSpec{
24+
MaxUnavailable: &muCount,
25+
Selector: selector,
26+
},
27+
}
28+
}

install/installer/pkg/components/blobserve/objects.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var Objects = common.CompositeRenderFunc(
1111
deployment,
1212
networkpolicy,
1313
rolebinding,
14+
pdb,
1415
common.GenerateService(Component, []common.ServicePort{
1516
{
1617
Name: ServicePortName,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package blobserve
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.DefaultLabels(Component),
18+
}),
19+
}, nil
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package dashboard
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.DefaultLabels(Component),
18+
}),
19+
}, nil
20+
}

install/installer/pkg/components/node-labeler/objects.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ var Objects = common.CompositeRenderFunc(
1515
deployment,
1616
role,
1717
rolebinding,
18+
pdb,
1819
common.DefaultServiceAccount(Component),
1920
func(cfg *common.RenderContext) ([]runtime.Object, error) {
2021
ports := []common.ServicePort{
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package wsmanager
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.DefaultLabels(Component),
18+
}),
19+
}, nil
20+
}

install/installer/pkg/components/openvsx-proxy/objects.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var Objects = common.CompositeRenderFunc(
1313
networkpolicy,
1414
rolebinding,
1515
statefulset,
16+
pdb,
1617
service,
1718
common.DefaultServiceAccount(Component),
1819
)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package openvsx_proxy
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.DefaultLabels(Component),
18+
}),
19+
}, nil
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package proxy
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.DefaultLabels(Component),
18+
}),
19+
}, nil
20+
}

install/installer/pkg/components/public-api-server/objects.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ func Objects(ctx *common.RenderContext) ([]runtime.Object, error) {
1414
configmap,
1515
deployment,
1616
rolebinding,
17+
pdb,
1718
common.DefaultServiceAccount(Component),
1819
service,
1920
networkpolicy,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package public_api_server
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.CustomizeLabel(ctx, Component, common.TypeMetaDeployment),
18+
}),
19+
}, nil
20+
}

install/installer/pkg/components/server/objects.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ var Objects = common.CompositeRenderFunc(
2222
func(ctx *common.RenderContext) ([]runtime.Object, error) {
2323
return Rolebinding(ctx, Component)
2424
},
25+
pdb,
2526
common.GenerateService(Component, []common.ServicePort{
2627
{
2728
Name: ContainerPortName,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package server
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.DefaultLabels(Component),
18+
}),
19+
}, nil
20+
}

install/installer/pkg/components/ws-manager-mk2/objects.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ var Objects common.RenderFunc = func(cfg *common.RenderContext) ([]runtime.Objec
1515
crd,
1616
configmap,
1717
deployment,
18+
pdb,
1819
networkpolicy,
1920
role,
2021
rolebinding,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package wsmanagermk2
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.DefaultLabels(Component),
18+
}),
19+
}, nil
20+
}

install/installer/pkg/components/ws-proxy/objects.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var Objects = common.CompositeRenderFunc(
1616
networkpolicy,
1717
rolebinding,
1818
role,
19+
pdb,
1920
func(cfg *common.RenderContext) ([]runtime.Object, error) {
2021
ports := []common.ServicePort{
2122
{
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package wsproxy
6+
7+
import (
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
)
13+
14+
func pdb(ctx *common.RenderContext) ([]runtime.Object, error) {
15+
return []runtime.Object{
16+
common.PodDisruptionBudget(ctx, Component, 1, &metav1.LabelSelector{
17+
MatchLabels: common.DefaultLabels(Component),
18+
}),
19+
}, nil
20+
}

0 commit comments

Comments
 (0)