Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/install/installer/pkg/components/redis/deployment.go
2501 views
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 redis
6
7
import (
8
"fmt"
9
10
"github.com/gitpod-io/gitpod/installer/pkg/cluster"
11
"github.com/gitpod-io/gitpod/installer/pkg/common"
12
13
appsv1 "k8s.io/api/apps/v1"
14
corev1 "k8s.io/api/core/v1"
15
v1 "k8s.io/api/core/v1"
16
"k8s.io/apimachinery/pkg/api/resource"
17
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18
"k8s.io/apimachinery/pkg/runtime"
19
"k8s.io/apimachinery/pkg/util/intstr"
20
"k8s.io/utils/pointer"
21
)
22
23
func deployment(ctx *common.RenderContext) ([]runtime.Object, error) {
24
labels := common.CustomizeLabel(ctx, Component, common.TypeMetaDeployment)
25
26
return []runtime.Object{
27
&appsv1.Deployment{
28
TypeMeta: common.TypeMetaDeployment,
29
ObjectMeta: metav1.ObjectMeta{
30
Name: Component,
31
Namespace: ctx.Namespace,
32
Labels: labels,
33
Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaDeployment),
34
},
35
Spec: appsv1.DeploymentSpec{
36
Selector: &metav1.LabelSelector{MatchLabels: common.DefaultLabels(Component)},
37
Replicas: common.Replicas(ctx, Component),
38
Strategy: common.DeploymentStrategy,
39
Template: corev1.PodTemplateSpec{
40
ObjectMeta: metav1.ObjectMeta{
41
Name: Component,
42
Namespace: ctx.Namespace,
43
Labels: labels,
44
Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaDeployment),
45
},
46
Spec: corev1.PodSpec{
47
Affinity: cluster.WithNodeAffinityHostnameAntiAffinity(Component, cluster.AffinityLabelMeta),
48
TopologySpreadConstraints: cluster.WithHostnameTopologySpread(Component),
49
PriorityClassName: common.SystemNodeCritical,
50
ServiceAccountName: Component,
51
EnableServiceLinks: pointer.Bool(false),
52
DNSPolicy: corev1.DNSClusterFirst,
53
RestartPolicy: corev1.RestartPolicyAlways,
54
TerminationGracePeriodSeconds: pointer.Int64(30),
55
SecurityContext: &corev1.PodSecurityContext{
56
RunAsNonRoot: pointer.Bool(false),
57
},
58
Containers: []corev1.Container{
59
{
60
Name: ContainerName,
61
Image: ctx.ImageDigest(common.ThirdPartyContainerRepo(ctx.Config.Repository, RegistryRepo), RegistryImage, ImageDigest),
62
ImagePullPolicy: corev1.PullIfNotPresent,
63
Command: []string{
64
"redis-server",
65
`--save ""`, // disable persistence
66
"--appendonly no", // disable persistence
67
"--maxmemory 100mb",
68
"--maxmemory-policy allkeys-lru", // evict on LRU basis,
69
fmt.Sprintf("--port %d", Port),
70
},
71
Env: common.CustomizeEnvvar(ctx, Component, common.MergeEnv(
72
common.DefaultEnv(&ctx.Config),
73
)),
74
Ports: []corev1.ContainerPort{
75
{
76
ContainerPort: Port,
77
Name: PortName,
78
Protocol: *common.TCPProtocol,
79
},
80
},
81
Resources: common.ResourceRequirements(ctx, Component, ContainerName, corev1.ResourceRequirements{
82
Requests: corev1.ResourceList{
83
"cpu": resource.MustParse("0.1"),
84
"memory": resource.MustParse("128M"),
85
},
86
}),
87
SecurityContext: &corev1.SecurityContext{
88
RunAsGroup: pointer.Int64(65532),
89
RunAsNonRoot: pointer.Bool(true),
90
RunAsUser: pointer.Int64(65532),
91
},
92
ReadinessProbe: &corev1.Probe{
93
ProbeHandler: corev1.ProbeHandler{
94
TCPSocket: &corev1.TCPSocketAction{
95
Port: intstr.FromInt(Port),
96
},
97
},
98
InitialDelaySeconds: 5,
99
PeriodSeconds: 30,
100
FailureThreshold: 5,
101
SuccessThreshold: 1,
102
TimeoutSeconds: 3,
103
},
104
},
105
{
106
Name: ExporterContainerName,
107
Image: ctx.ImageDigest(common.ThirdPartyContainerRepo(ctx.Config.Repository, ExporterRegistryRepo), ExporterRegistryImage, ExporterImageDigest),
108
ImagePullPolicy: corev1.PullIfNotPresent,
109
Env: common.CustomizeEnvvar(ctx, Component, common.MergeEnv(
110
[]v1.EnvVar{
111
{
112
Name: "REDIS_ADDR",
113
Value: fmt.Sprintf("redis://localhost:%d", Port),
114
},
115
{
116
Name: "REDIS_EXPORTER_WEB_LISTEN_ADDRESS",
117
Value: fmt.Sprintf("127.0.0.1:%d", ExporterPort),
118
},
119
{
120
Name: "REDIS_EXPORTER_LOG_FORMAT",
121
Value: "json",
122
},
123
},
124
)),
125
Ports: []corev1.ContainerPort{
126
{
127
ContainerPort: ExporterPort,
128
Name: ExporterPortName,
129
Protocol: *common.TCPProtocol,
130
},
131
},
132
Resources: common.ResourceRequirements(ctx, Component, ContainerName, corev1.ResourceRequirements{
133
Requests: corev1.ResourceList{
134
"cpu": resource.MustParse("0.1"),
135
"memory": resource.MustParse("5M"),
136
},
137
}),
138
SecurityContext: &corev1.SecurityContext{
139
RunAsGroup: pointer.Int64(65532),
140
RunAsNonRoot: pointer.Bool(true),
141
RunAsUser: pointer.Int64(65532),
142
},
143
},
144
*common.KubeRBACProxyContainer(ctx),
145
},
146
Tolerations: common.WithTolerationWorkspaceComponentNotReady(ctx),
147
},
148
},
149
},
150
},
151
}, nil
152
}
153
154