Path: blob/main/install/installer/pkg/components/ws-daemon/configmap.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 wsdaemon56import (7"fmt"8"time"910"github.com/gitpod-io/gitpod/common-go/baseserver"11"github.com/gitpod-io/gitpod/common-go/util"12"github.com/gitpod-io/gitpod/installer/pkg/common"13config "github.com/gitpod-io/gitpod/installer/pkg/config/v1"14"github.com/gitpod-io/gitpod/installer/pkg/config/v1/experimental"15wsdapi "github.com/gitpod-io/gitpod/ws-daemon/api"16"github.com/gitpod-io/gitpod/ws-daemon/pkg/cgroup"17wsdconfig "github.com/gitpod-io/gitpod/ws-daemon/pkg/config"18"github.com/gitpod-io/gitpod/ws-daemon/pkg/container"19"github.com/gitpod-io/gitpod/ws-daemon/pkg/content"20"github.com/gitpod-io/gitpod/ws-daemon/pkg/cpulimit"21"github.com/gitpod-io/gitpod/ws-daemon/pkg/daemon"22"github.com/gitpod-io/gitpod/ws-daemon/pkg/diskguard"23"github.com/gitpod-io/gitpod/ws-daemon/pkg/iws"24"github.com/gitpod-io/gitpod/ws-daemon/pkg/netlimit"2526corev1 "k8s.io/api/core/v1"27metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"28"k8s.io/apimachinery/pkg/runtime"29)3031func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {32var fsshift wsdapi.FSShiftMethod33switch ctx.Config.Workspace.Runtime.FSShiftMethod {34case config.FSShiftShiftFS:35fsshift = wsdapi.FSShiftMethod_SHIFTFS36default:37return nil, fmt.Errorf("unknown fs shift method: %s", ctx.Config.Workspace.Runtime.FSShiftMethod)38}3940cpuLimitConfig := cpulimit.Config{41Enabled: false,42CGroupBasePath: "/mnt/node-cgroups",43ControlPeriod: util.Duration(15 * time.Second),44}45var ioLimitConfig daemon.IOLimitConfig4647var procLimit int6448networkLimitConfig := netlimit.Config{49Enabled: false,50Enforce: false,51ConnectionsPerMinute: 3000,52BucketSize: 1000,53}5455oomScoreAdjConfig := cgroup.OOMScoreAdjConfig{56Enabled: false,57Tier1: 0,58Tier2: 0,59}6061runtimeMapping := make(map[string]string)62// default runtime mapping63runtimeMapping[ctx.Config.Workspace.Runtime.ContainerDRuntimeDir] = "/mnt/node0"6465var wscontroller daemon.WorkspaceControllerConfig6667// default workspace network CIDR (and fallback)68workspaceCIDR := "10.0.5.0/30"6970ctx.WithExperimental(func(ucfg *experimental.Config) error {71if ucfg.Workspace == nil {72return nil73}7475cpuLimitConfig.Enabled = ucfg.Workspace.CPULimits.Enabled76cpuLimitConfig.BurstLimit = ucfg.Workspace.CPULimits.BurstLimit77cpuLimitConfig.Limit = ucfg.Workspace.CPULimits.Limit78cpuLimitConfig.TotalBandwidth = ucfg.Workspace.CPULimits.NodeCPUBandwidth7980ioLimitConfig.WriteBWPerSecond = ucfg.Workspace.IOLimits.WriteBWPerSecond81ioLimitConfig.ReadBWPerSecond = ucfg.Workspace.IOLimits.ReadBWPerSecond82ioLimitConfig.WriteIOPS = ucfg.Workspace.IOLimits.WriteIOPS83ioLimitConfig.ReadIOPS = ucfg.Workspace.IOLimits.ReadIOPS8485networkLimitConfig.Enabled = ucfg.Workspace.NetworkLimits.Enabled86networkLimitConfig.Enforce = ucfg.Workspace.NetworkLimits.Enforce87networkLimitConfig.ConnectionsPerMinute = ucfg.Workspace.NetworkLimits.ConnectionsPerMinute88networkLimitConfig.BucketSize = ucfg.Workspace.NetworkLimits.BucketSize8990oomScoreAdjConfig.Enabled = ucfg.Workspace.OOMScores.Enabled91oomScoreAdjConfig.Tier1 = ucfg.Workspace.OOMScores.Tier192oomScoreAdjConfig.Tier2 = ucfg.Workspace.OOMScores.Tier29394if len(ucfg.Workspace.WSDaemon.Runtime.NodeToContainerMapping) > 0 {95// reset map96runtimeMapping = make(map[string]string)97for _, value := range ucfg.Workspace.WSDaemon.Runtime.NodeToContainerMapping {98runtimeMapping[value.Path] = value.Value99}100}101102procLimit = ucfg.Workspace.ProcLimit103104wscontroller.MaxConcurrentReconciles = 15105106if ucfg.Workspace.WorkspaceCIDR != "" {107workspaceCIDR = ucfg.Workspace.WorkspaceCIDR108}109110return nil111})112113wsdcfg := wsdconfig.Config{114Daemon: daemon.Config{115RegistryFacadeHost: fmt.Sprintf("reg.%s:%d", ctx.Config.Domain, common.RegistryFacadeServicePort),116Runtime: daemon.RuntimeConfig{117KubernetesNamespace: ctx.Namespace,118SecretsNamespace: common.WorkspaceSecretsNamespace,119Container: &container.Config{120Runtime: container.RuntimeContainerd,121Mapping: runtimeMapping,122Mounts: container.NodeMountsLookupConfig{123ProcLoc: "/mnt/mounts",124},125Containerd: &container.ContainerdConfig{126SocketPath: "/mnt/containerd/containerd.sock",127},128},129WorkspaceCIDR: workspaceCIDR,130},131Content: content.Config{132WorkingArea: ContainerWorkingAreaMk2,133WorkingAreaNode: HostWorkingAreaMk2,134TmpDir: "/tmp",135UserNamespaces: content.UserNamespacesConfig{136FSShift: content.FSShiftMethod(fsshift),137},138Storage: common.StorageConfig(ctx),139Backup: content.BackupConfig{140Timeout: util.Duration(time.Minute * 5),141Attempts: 3,142},143Initializer: content.InitializerConfig{144Command: "/app/content-initializer",145},146},147Uidmapper: iws.UidmapperConfig{148ProcLocation: "/proc",149RootRange: iws.UIDRange{150Start: 33333,151Size: 1,152},153UserRange: []iws.UIDRange{{154Start: 100000,155Size: 70000,156}},157},158CPULimit: cpuLimitConfig,159IOLimit: ioLimitConfig,160ProcLimit: procLimit,161NetLimit: networkLimitConfig,162OOMScores: oomScoreAdjConfig,163DiskSpaceGuard: diskguard.Config{164Enabled: true,165Interval: util.Duration(5 * time.Minute),166Locations: []diskguard.LocationConfig{{167Path: ContainerWorkingAreaMk2,168MinBytesAvail: 21474836480,169}},170},171WorkspaceController: wscontroller,172},173Service: baseserver.ServerConfiguration{174Address: fmt.Sprintf("0.0.0.0:%d", ServicePort),175TLS: &baseserver.TLSConfiguration{176CAPath: "/certs/ca.crt",177CertPath: "/certs/tls.crt",178KeyPath: "/certs/tls.key",179},180},181}182fc, err := common.ToJSONString(wsdcfg)183if err != nil {184return nil, fmt.Errorf("failed to marshal ws-daemon config: %w", err)185}186187return []runtime.Object{&corev1.ConfigMap{188TypeMeta: common.TypeMetaConfigmap,189ObjectMeta: metav1.ObjectMeta{190Name: Component,191Namespace: ctx.Namespace,192Labels: common.CustomizeLabel(ctx, Component, common.TypeMetaConfigmap),193Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaConfigmap),194},195Data: map[string]string{196"config.json": string(fc),197},198}}, nil199}200201202