Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/install/installer/pkg/components/content-service/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 content_service
6
7
import (
8
"github.com/gitpod-io/gitpod/common-go/baseserver"
9
"github.com/gitpod-io/gitpod/installer/pkg/cluster"
10
"github.com/gitpod-io/gitpod/installer/pkg/common"
11
12
v1 "k8s.io/api/apps/v1"
13
corev1 "k8s.io/api/core/v1"
14
"k8s.io/apimachinery/pkg/api/resource"
15
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16
"k8s.io/apimachinery/pkg/runtime"
17
"k8s.io/utils/pointer"
18
)
19
20
func deployment(ctx *common.RenderContext) ([]runtime.Object, error) {
21
labels := common.CustomizeLabel(ctx, Component, common.TypeMetaDeployment)
22
23
configHash, err := common.ObjectHash(configmap(ctx))
24
if err != nil {
25
return nil, err
26
}
27
28
podSpec := corev1.PodSpec{
29
Affinity: cluster.WithNodeAffinityHostnameAntiAffinity(Component, cluster.AffinityLabelMeta),
30
TopologySpreadConstraints: cluster.WithHostnameTopologySpread(Component),
31
ServiceAccountName: Component,
32
EnableServiceLinks: pointer.Bool(false),
33
DNSPolicy: corev1.DNSClusterFirst,
34
RestartPolicy: corev1.RestartPolicyAlways,
35
TerminationGracePeriodSeconds: pointer.Int64(30),
36
Volumes: []corev1.Volume{
37
{
38
Name: "config",
39
VolumeSource: corev1.VolumeSource{
40
ConfigMap: &corev1.ConfigMapVolumeSource{
41
LocalObjectReference: corev1.LocalObjectReference{Name: Component},
42
},
43
},
44
},
45
common.CAVolume(),
46
},
47
Containers: []corev1.Container{{
48
Name: Component,
49
Image: ctx.ImageName(ctx.Config.Repository, Component, ctx.VersionManifest.Components.ContentService.Version),
50
ImagePullPolicy: corev1.PullIfNotPresent,
51
Args: []string{
52
"run",
53
"--config",
54
"/config/config.json",
55
},
56
Resources: common.ResourceRequirements(ctx, Component, Component, corev1.ResourceRequirements{
57
Requests: corev1.ResourceList{
58
"cpu": resource.MustParse("100m"),
59
"memory": resource.MustParse("32Mi"),
60
},
61
}),
62
Ports: []corev1.ContainerPort{{
63
Name: RPCServiceName,
64
ContainerPort: RPCPort,
65
}, {
66
ContainerPort: baseserver.BuiltinMetricsPort,
67
Name: baseserver.BuiltinMetricsPortName,
68
}},
69
SecurityContext: &corev1.SecurityContext{
70
Privileged: pointer.Bool(false),
71
RunAsUser: pointer.Int64(1000),
72
},
73
Env: common.CustomizeEnvvar(ctx, Component, common.MergeEnv(
74
common.DefaultEnv(&ctx.Config),
75
common.WorkspaceTracingEnv(ctx, Component),
76
[]corev1.EnvVar{{
77
Name: "GRPC_GO_RETRY",
78
Value: "on",
79
}},
80
)),
81
VolumeMounts: []corev1.VolumeMount{
82
{
83
Name: "config",
84
MountPath: "/config",
85
ReadOnly: true,
86
},
87
common.CAVolumeMount(),
88
},
89
}, *common.KubeRBACProxyContainer(ctx),
90
},
91
Tolerations: common.WithTolerationWorkspaceComponentNotReady(ctx),
92
}
93
94
err = common.AddStorageMounts(ctx, &podSpec, Component)
95
if err != nil {
96
return nil, err
97
}
98
99
return []runtime.Object{
100
&v1.Deployment{
101
TypeMeta: common.TypeMetaDeployment,
102
ObjectMeta: metav1.ObjectMeta{
103
Name: Component,
104
Namespace: ctx.Namespace,
105
Labels: labels,
106
Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaDeployment),
107
},
108
Spec: v1.DeploymentSpec{
109
Selector: &metav1.LabelSelector{MatchLabels: common.DefaultLabels(Component)},
110
Replicas: common.Replicas(ctx, Component),
111
Strategy: common.DeploymentStrategy,
112
Template: corev1.PodTemplateSpec{
113
ObjectMeta: metav1.ObjectMeta{
114
Name: Component,
115
Namespace: ctx.Namespace,
116
Labels: labels,
117
Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaDeployment, func() map[string]string {
118
return map[string]string{
119
common.AnnotationConfigChecksum: configHash,
120
}
121
}),
122
},
123
Spec: podSpec,
124
},
125
},
126
},
127
}, nil
128
}
129
130