Merge pull request #7572 from dokku/k3s-shm-size

Add support for setting shm-size for kubernetes deployments
This commit is contained in:
Jose Diaz-Gonzalez
2025-03-06 22:50:01 -06:00
committed by GitHub
8 changed files with 115 additions and 84 deletions

View File

@@ -1227,6 +1227,23 @@ func getComputedRollbackOnFailure(appName string) string {
return rollbackOnFailure
}
func getShmSize(appName string) string {
return common.PropertyGetDefault("scheduler-k3s", appName, "shm-size", "")
}
func getGlobalShmSize() string {
return common.PropertyGetDefault("scheduler-k3s", "--global", "shm-size", "")
}
func getComputedShmSize(appName string) string {
shmSize := getShmSize(appName)
if shmSize == "" {
shmSize = getGlobalShmSize()
}
return shmSize
}
func getGlobalGlobalToken() string {
return common.PropertyGet("scheduler-k3s", "--global", "token")
}
@@ -1436,7 +1453,7 @@ func getServerIP() (string, error) {
}
if len(serverIP) == 0 {
return "", fmt.Errorf(fmt.Sprintf("Unable to determine server ip address from network-interface %s", networkInterface))
return "", fmt.Errorf("Unable to determine server ip address from network-interface %s", networkInterface)
}
return serverIP, nil
}

View File

@@ -35,6 +35,9 @@ func ReportSingleApp(appName string, format string, infoFlag string) error {
"--scheduler-k3s-computed-rollback-on-failure": reportComputedRollbackOnFailure,
"--scheduler-k3s-rollback-on-failure": reportRollbackOnFailure,
"--scheduler-k3s-global-rollback-on-failure": reportGlobalRollbackOnFailure,
"--scheduler-k3s-computed-shm-size": reportComputedShmSize,
"--scheduler-k3s-global-shm-size": reportGlobalShmSize,
"--scheduler-k3s-shm-size": reportShmSize,
}
chartProperties, err := common.PropertyGetAllByPrefix("scheduler-k3s", "--global", "chart.")
@@ -172,3 +175,15 @@ func reportRollbackOnFailure(appName string) string {
func reportGlobalRollbackOnFailure(appName string) string {
return getGlobalRollbackOnFailure()
}
func reportComputedShmSize(appName string) string {
return getComputedShmSize(appName)
}
func reportGlobalShmSize(appName string) string {
return getGlobalShmSize()
}
func reportShmSize(appName string) string {
return getShmSize(appName)
}

View File

@@ -23,6 +23,7 @@ var (
"image-pull-secrets": "",
"namespace": "",
"rollback-on-failure": "",
"shm-size": "",
}
// GlobalProperties is a map of all valid global k3s properties
@@ -38,6 +39,7 @@ var (
"namespace": true,
"network-interface": true,
"rollback-on-failure": true,
"shm-size": true,
"token": true,
}
)

View File

@@ -113,6 +113,18 @@ type ProcessValues struct {
Replicas int32 `yaml:"replicas"`
Resources ProcessResourcesMap `yaml:"resources,omitempty"`
Web ProcessWeb `yaml:"web,omitempty"`
Volumes []ProcessVolume `yaml:"volumes,omitempty"`
}
type ProcessVolume struct {
Name string `yaml:"name"`
MountPath string `yaml:"mount_path"`
EmptyDir *ProcessVolumeEmptyDir `yaml:"empty_dir,omitempty"`
}
type ProcessVolumeEmptyDir struct {
Medium string `yaml:"medium"`
SizeLimit string `yaml:"size_limit"`
}
type ProcessAnnotations struct {

View File

@@ -116,8 +116,30 @@ spec:
{{- if $.Values.global.image.working_dir }}
workingDir: {{ $.Values.global.image.working_dir }}
{{- end }}
{{- if $config.volumes }}
volumeMounts:
{{- range $volume := $config.volumes }}
- name: {{ $volume.name }}
mountPath: {{ $volume.mount_path }}
{{- end }}
{{- end }}
{{- if $.Values.global.image.image_pull_secrets }}
imagePullSecrets:
- name: {{ $.Values.global.image.image_pull_secrets }}
{{- end }}
serviceAccountName: {{ $.Values.global.app_name }}
{{- if $config.volumes }}
volumes:
{{- range $volume := $config.volumes }}
- name: {{ $volume.name }}
{{- if $volume.empty_dir }}
emptyDir:
{{- if $volume.empty_dir.medium }}
medium: {{ $volume.empty_dir.medium }}
{{- end }}
{{- if $volume.empty_dir.size_limit }}
sizeLimit: {{ $volume.empty_dir.size_limit }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -382,6 +382,18 @@ func TriggerSchedulerDeploy(scheduler string, appName string, imageTag string) e
}
}
processVolumes := []ProcessVolume{}
if shmSize := getComputedShmSize(appName); shmSize != "" {
processVolumes = append(processVolumes, ProcessVolume{
Name: "shmem",
MountPath: "/dev/shm",
EmptyDir: &ProcessVolumeEmptyDir{
Medium: "Memory",
SizeLimit: shmSize,
},
})
}
for processType, processCount := range processes {
// todo: implement deployment annotations
// todo: implement pod annotations
@@ -439,6 +451,7 @@ func TriggerSchedulerDeploy(scheduler string, appName string, imageTag string) e
ProcessType: ProcessType_Worker,
Replicas: int32(processCount),
Resources: processResources,
Volumes: processVolumes,
}
if processType == "web" {
@@ -590,6 +603,7 @@ func TriggerSchedulerDeploy(scheduler string, appName string, imageTag string) e
ProcessType: ProcessType_Cron,
Replicas: 1,
Resources: processResources,
Volumes: processVolumes,
}
values.Processes[cronEntry.ID] = processValues