Path: blob/main/install/installer/pkg/components/node-labeler/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 wsmanager56import (7"fmt"89"github.com/gitpod-io/gitpod/installer/pkg/cluster"10"github.com/gitpod-io/gitpod/installer/pkg/common"11wsdaemon "github.com/gitpod-io/gitpod/installer/pkg/components/ws-daemon"12appsv1 "k8s.io/api/apps/v1"13corev1 "k8s.io/api/core/v1"14"k8s.io/apimachinery/pkg/api/resource"15metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"16"k8s.io/apimachinery/pkg/runtime"17"k8s.io/apimachinery/pkg/util/intstr"18"k8s.io/utils/pointer"19)2021func deployment(ctx *common.RenderContext) ([]runtime.Object, error) {22labels := common.CustomizeLabel(ctx, Component, common.TypeMetaDeployment)2324podSpec := corev1.PodSpec{25PriorityClassName: common.SystemNodeCritical,26Affinity: cluster.WithNodeAffinityHostnameAntiAffinity(Component, cluster.AffinityLabelServices),27TopologySpreadConstraints: cluster.WithHostnameTopologySpread(Component),28EnableServiceLinks: pointer.Bool(false),29ServiceAccountName: Component,30Containers: []corev1.Container{31{32Name: Component,33Image: ctx.ImageName(ctx.Config.Repository, Component, ctx.VersionManifest.Components.NodeLabeler.Version),34ImagePullPolicy: corev1.PullIfNotPresent,35Resources: common.ResourceRequirements(ctx, Component, Component, corev1.ResourceRequirements{36Requests: corev1.ResourceList{37"cpu": resource.MustParse("100m"),38"memory": resource.MustParse("32Mi"),39},40}),41Args: []string{42"run",43fmt.Sprintf("--registry-facade-port=%v", common.RegistryFacadeServicePort),44fmt.Sprintf("--ws-daemon-port=%v", wsdaemon.ServicePort),45fmt.Sprintf("--namespace=%v", ctx.Namespace),46},47Env: common.CustomizeEnvvar(ctx, Component, common.MergeEnv(48common.DefaultEnv(&ctx.Config),49)),50LivenessProbe: &corev1.Probe{51ProbeHandler: corev1.ProbeHandler{52HTTPGet: &corev1.HTTPGetAction{53Path: "/healthz",54Port: intstr.FromInt(HealthPort),55},56},57InitialDelaySeconds: 15,58PeriodSeconds: 20,59},60ReadinessProbe: &corev1.Probe{61ProbeHandler: corev1.ProbeHandler{62HTTPGet: &corev1.HTTPGetAction{63Path: "/readyz",64Port: intstr.FromInt(HealthPort),65},66},67InitialDelaySeconds: 5,68PeriodSeconds: 10,69},70},71*common.KubeRBACProxyContainerWithConfig(ctx),72},73Tolerations: common.WithTolerationWorkspaceComponentNotReady(ctx),74}7576return []runtime.Object{77&appsv1.Deployment{78TypeMeta: common.TypeMetaDeployment,79ObjectMeta: metav1.ObjectMeta{80Name: Component,81Namespace: ctx.Namespace,82Labels: labels,83Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaDeployment),84},85Spec: appsv1.DeploymentSpec{86Selector: &metav1.LabelSelector{MatchLabels: common.DefaultLabels(Component)},87Replicas: pointer.Int32(2),88Strategy: common.DeploymentStrategy,89Template: corev1.PodTemplateSpec{90ObjectMeta: metav1.ObjectMeta{91Name: Component,92Namespace: ctx.Namespace,93Labels: labels,94},95Spec: podSpec,96},97},98},99}, nil100}101102103