Path: blob/main/install/installer/pkg/components/database/cloudsql/deployment.go
3604 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 cloudsql56import (7"fmt"89"github.com/gitpod-io/gitpod/installer/pkg/common"1011appsv1 "k8s.io/api/apps/v1"12corev1 "k8s.io/api/core/v1"13metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"14"k8s.io/apimachinery/pkg/runtime"15"k8s.io/apimachinery/pkg/util/intstr"16"k8s.io/utils/pointer"17)1819func deployment(ctx *common.RenderContext) ([]runtime.Object, error) {20labels := common.CustomizeLabel(ctx, Component, common.TypeMetaDeployment)2122return []runtime.Object{23&appsv1.Deployment{24TypeMeta: common.TypeMetaDeployment,25ObjectMeta: metav1.ObjectMeta{26Name: fmt.Sprintf("%s-cloud-sql-proxy", Component),27Namespace: ctx.Namespace,28Labels: labels,29Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaDeployment),30},31Spec: appsv1.DeploymentSpec{32Strategy: appsv1.DeploymentStrategy{33Type: appsv1.RollingUpdateDeploymentStrategyType,34RollingUpdate: &appsv1.RollingUpdateDeployment{35MaxUnavailable: &intstr.IntOrString{IntVal: 0},36MaxSurge: &intstr.IntOrString{IntVal: 1},37},38},39Selector: &metav1.LabelSelector{MatchLabels: common.DefaultLabels(Component)},40Replicas: common.Replicas(ctx, Component),41Template: corev1.PodTemplateSpec{42ObjectMeta: metav1.ObjectMeta{43Name: Component,44Namespace: ctx.Namespace,45Labels: labels,46Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaDeployment),47},48Spec: corev1.PodSpec{49ServiceAccountName: Component,50EnableServiceLinks: pointer.Bool(false),51DNSPolicy: corev1.DNSClusterFirst,52RestartPolicy: corev1.RestartPolicyAlways,53TerminationGracePeriodSeconds: pointer.Int64(30),54Volumes: []corev1.Volume{{55Name: "cloudsql",56VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}},57}, {58Name: "gcloud-sql-token",59VolumeSource: corev1.VolumeSource{Secret: &corev1.SecretVolumeSource{60SecretName: ctx.Config.Database.CloudSQL.ServiceAccount.Name,61}},62}},63Containers: []corev1.Container{{64Name: "cloud-sql-proxy",65SecurityContext: &corev1.SecurityContext{66Privileged: pointer.Bool(false),67RunAsNonRoot: pointer.Bool(false),68AllowPrivilegeEscalation: pointer.Bool(false),69},70Image: ctx.ImageName(ImageRepo, ImageName, ImageVersion),71Command: []string{72"/cloud_sql_proxy",73"-dir=/cloudsql",74fmt.Sprintf("-instances=%s=tcp:0.0.0.0:%d", ctx.Config.Database.CloudSQL.Instance, Port),75"-credential_file=/credentials/credentials.json",76},77Ports: []corev1.ContainerPort{{78ContainerPort: Port,79}},80VolumeMounts: []corev1.VolumeMount{{81MountPath: "/cloudsql",82Name: "cloudsql",83}, {84MountPath: "/credentials",85Name: "gcloud-sql-token",86}},87Env: common.CustomizeEnvvar(ctx, Component, []corev1.EnvVar{}),88}},89},90},91},92},93}, nil94}959697