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