diff --git a/docs/deployment/schedulers/k3s.md b/docs/deployment/schedulers/k3s.md index 74545ab8c..500f98f4c 100644 --- a/docs/deployment/schedulers/k3s.md +++ b/docs/deployment/schedulers/k3s.md @@ -1322,8 +1322,8 @@ If unspecified for any task, the default reservation will be `.1` CPU and `128Mi | `letsencrypt-server` | app + global | `prod` | `--scheduler-k3s-letsencrypt-server`, `--scheduler-k3s-global-letsencrypt-server`, `--scheduler-k3s-computed-letsencrypt-server` | ACME directory (`prod` or `staging`) used for app certificates, or `false` to disable all automatic certificate issuance | | `namespace` | app + global | `default` | `--scheduler-k3s-namespace`, `--scheduler-k3s-global-namespace`, `--scheduler-k3s-computed-namespace` | Kubernetes namespace into which the app's resources are installed | | `network-interface` | global only | `eth0` | `--scheduler-k3s-global-network-interface`, `--scheduler-k3s-computed-network-interface` | Host network interface used by k3s | -| `node-sysctls-image` | global only | `busybox:1.36` | `--scheduler-k3s-global-node-sysctls-image` | Image used to apply node-level sysctls, override for air-gapped clusters | -| `node-sysctls-pause-image` | global only | `registry.k8s.io/pause:3.9` | `--scheduler-k3s-global-node-sysctls-pause-image` | Image keeping the node sysctls daemonset pods running | +| `node-sysctls-image` | global only | `busybox:1.36` | `--scheduler-k3s-global-node-sysctls-image`, `--scheduler-k3s-computed-node-sysctls-image` | Image used to apply node-level sysctls, override for air-gapped clusters | +| `node-sysctls-pause-image` | global only | `registry.k8s.io/pause:3.9` | `--scheduler-k3s-global-node-sysctls-pause-image`, `--scheduler-k3s-computed-node-sysctls-pause-image` | Image keeping the node sysctls daemonset pods running | | `rollback-on-failure` | app + global | `false` | `--scheduler-k3s-rollback-on-failure`, `--scheduler-k3s-global-rollback-on-failure`, `--scheduler-k3s-computed-rollback-on-failure` | When `true`, helm rolls back the release if a deploy fails | | `shm-size` | app + global | none | `--scheduler-k3s-shm-size`, `--scheduler-k3s-global-shm-size`, `--scheduler-k3s-computed-shm-size` | `/dev/shm` size override applied to app containers | | `token` | global only | none | `--scheduler-k3s-global-token` (masked as `*******` in default stdout output; the raw value is returned when queried via `--format json` or when this flag is requested explicitly) | Cluster join token used by `scheduler-k3s:cluster-add` | diff --git a/plugins/scheduler-k3s/functions.go b/plugins/scheduler-k3s/functions.go index 70426990b..dafa96067 100644 --- a/plugins/scheduler-k3s/functions.go +++ b/plugins/scheduler-k3s/functions.go @@ -1646,8 +1646,12 @@ func getComputedKustomizeRootPath(appName string) string { return kustomizeRootPath } +func getGlobalNodeSysctlsImage() string { + return common.PropertyGet("scheduler-k3s", "--global", "node-sysctls-image") +} + func getComputedNodeSysctlsImage() string { - image := common.PropertyGet("scheduler-k3s", "--global", "node-sysctls-image") + image := getGlobalNodeSysctlsImage() if image == "" { image = DefaultNodeSysctlsImage } @@ -1655,8 +1659,12 @@ func getComputedNodeSysctlsImage() string { return image } +func getGlobalNodeSysctlsPauseImage() string { + return common.PropertyGet("scheduler-k3s", "--global", "node-sysctls-pause-image") +} + func getComputedNodeSysctlsPauseImage() string { - image := common.PropertyGet("scheduler-k3s", "--global", "node-sysctls-pause-image") + image := getGlobalNodeSysctlsPauseImage() if image == "" { image = DefaultNodeSysctlsPauseImage } diff --git a/plugins/scheduler-k3s/report.go b/plugins/scheduler-k3s/report.go index c2e9b805d..8beeebc04 100644 --- a/plugins/scheduler-k3s/report.go +++ b/plugins/scheduler-k3s/report.go @@ -40,85 +40,89 @@ func ReportSingleApp(appName string, format string, infoFlag string) error { } flags = map[string]common.ReportFunc{ - "--scheduler-k3s-computed-cert-issuer-kind": reportComputedCertIssuerKind, - "--scheduler-k3s-global-cert-issuer-kind": reportGlobalCertIssuerKind, - "--scheduler-k3s-computed-cert-issuer-name": reportComputedCertIssuerName, - "--scheduler-k3s-global-cert-issuer-name": reportGlobalCertIssuerName, - "--scheduler-k3s-computed-deploy-timeout": reportComputedDeployTimeout, - "--scheduler-k3s-global-deploy-timeout": reportGlobalDeployTimeout, - "--scheduler-k3s-computed-image-pull-secrets": reportComputedImagePullSecrets, - "--scheduler-k3s-global-image-pull-secrets": reportGlobalImagePullSecrets, - "--scheduler-k3s-computed-ingress-class": reportComputedIngressClass, - "--scheduler-k3s-global-ingress-class": reportGlobalIngressClass, - "--scheduler-k3s-computed-kubeconfig-path": reportComputedKubeconfigPath, - "--scheduler-k3s-global-kubeconfig-path": reportGlobalKubeconfigPath, - "--scheduler-k3s-computed-kube-context": reportComputedKubeContext, - "--scheduler-k3s-global-kube-context": reportGlobalKubeContext, - "--scheduler-k3s-computed-kustomize-root-path": reportComputedKustomizeRootPath, - "--scheduler-k3s-global-kustomize-root-path": reportGlobalKustomizeRootPath, - "--scheduler-k3s-computed-letsencrypt-server": reportComputedLetsencryptServer, - "--scheduler-k3s-global-letsencrypt-server": reportGlobalLetsencryptServer, - "--scheduler-k3s-computed-letsencrypt-email-prod": reportComputedLetsencryptEmailProd, - "--scheduler-k3s-global-letsencrypt-email-prod": reportGlobalLetsencryptEmailProd, - "--scheduler-k3s-computed-letsencrypt-email-stag": reportComputedLetsencryptEmailStag, - "--scheduler-k3s-global-letsencrypt-email-stag": reportGlobalLetsencryptEmailStag, - "--scheduler-k3s-computed-namespace": reportComputedNamespace, - "--scheduler-k3s-global-namespace": reportGlobalNamespace, - "--scheduler-k3s-computed-network-interface": reportComputedNetworkInterface, - "--scheduler-k3s-global-network-interface": reportGlobalNetworkInterface, - "--scheduler-k3s-global-node-sysctls-image": reportGlobalNodeSysctlsImage, - "--scheduler-k3s-global-node-sysctls-pause-image": reportGlobalNodeSysctlsPauseImage, - "--scheduler-k3s-computed-rollback-on-failure": reportComputedRollbackOnFailure, - "--scheduler-k3s-global-rollback-on-failure": reportGlobalRollbackOnFailure, - "--scheduler-k3s-computed-shm-size": reportComputedShmSize, - "--scheduler-k3s-global-shm-size": reportGlobalShmSize, - tokenFlag: tokenReportFunc, + "--scheduler-k3s-computed-cert-issuer-kind": reportComputedCertIssuerKind, + "--scheduler-k3s-global-cert-issuer-kind": reportGlobalCertIssuerKind, + "--scheduler-k3s-computed-cert-issuer-name": reportComputedCertIssuerName, + "--scheduler-k3s-global-cert-issuer-name": reportGlobalCertIssuerName, + "--scheduler-k3s-computed-deploy-timeout": reportComputedDeployTimeout, + "--scheduler-k3s-global-deploy-timeout": reportGlobalDeployTimeout, + "--scheduler-k3s-computed-image-pull-secrets": reportComputedImagePullSecrets, + "--scheduler-k3s-global-image-pull-secrets": reportGlobalImagePullSecrets, + "--scheduler-k3s-computed-ingress-class": reportComputedIngressClass, + "--scheduler-k3s-global-ingress-class": reportGlobalIngressClass, + "--scheduler-k3s-computed-kubeconfig-path": reportComputedKubeconfigPath, + "--scheduler-k3s-global-kubeconfig-path": reportGlobalKubeconfigPath, + "--scheduler-k3s-computed-kube-context": reportComputedKubeContext, + "--scheduler-k3s-global-kube-context": reportGlobalKubeContext, + "--scheduler-k3s-computed-kustomize-root-path": reportComputedKustomizeRootPath, + "--scheduler-k3s-global-kustomize-root-path": reportGlobalKustomizeRootPath, + "--scheduler-k3s-computed-letsencrypt-server": reportComputedLetsencryptServer, + "--scheduler-k3s-global-letsencrypt-server": reportGlobalLetsencryptServer, + "--scheduler-k3s-computed-letsencrypt-email-prod": reportComputedLetsencryptEmailProd, + "--scheduler-k3s-global-letsencrypt-email-prod": reportGlobalLetsencryptEmailProd, + "--scheduler-k3s-computed-letsencrypt-email-stag": reportComputedLetsencryptEmailStag, + "--scheduler-k3s-global-letsencrypt-email-stag": reportGlobalLetsencryptEmailStag, + "--scheduler-k3s-computed-namespace": reportComputedNamespace, + "--scheduler-k3s-global-namespace": reportGlobalNamespace, + "--scheduler-k3s-computed-network-interface": reportComputedNetworkInterface, + "--scheduler-k3s-global-network-interface": reportGlobalNetworkInterface, + "--scheduler-k3s-computed-node-sysctls-image": reportComputedNodeSysctlsImage, + "--scheduler-k3s-global-node-sysctls-image": reportGlobalNodeSysctlsImage, + "--scheduler-k3s-computed-node-sysctls-pause-image": reportComputedNodeSysctlsPauseImage, + "--scheduler-k3s-global-node-sysctls-pause-image": reportGlobalNodeSysctlsPauseImage, + "--scheduler-k3s-computed-rollback-on-failure": reportComputedRollbackOnFailure, + "--scheduler-k3s-global-rollback-on-failure": reportGlobalRollbackOnFailure, + "--scheduler-k3s-computed-shm-size": reportComputedShmSize, + "--scheduler-k3s-global-shm-size": reportGlobalShmSize, + tokenFlag: tokenReportFunc, } } else { flags = map[string]common.ReportFunc{ - "--scheduler-k3s-computed-cert-issuer-kind": reportComputedCertIssuerKind, - "--scheduler-k3s-cert-issuer-kind": reportCertIssuerKind, - "--scheduler-k3s-global-cert-issuer-kind": reportGlobalCertIssuerKind, - "--scheduler-k3s-computed-cert-issuer-name": reportComputedCertIssuerName, - "--scheduler-k3s-cert-issuer-name": reportCertIssuerName, - "--scheduler-k3s-global-cert-issuer-name": reportGlobalCertIssuerName, - "--scheduler-k3s-computed-deploy-timeout": reportComputedDeployTimeout, - "--scheduler-k3s-deploy-timeout": reportDeployTimeout, - "--scheduler-k3s-global-deploy-timeout": reportGlobalDeployTimeout, - "--scheduler-k3s-computed-image-pull-secrets": reportComputedImagePullSecrets, - "--scheduler-k3s-image-pull-secrets": reportImagePullSecrets, - "--scheduler-k3s-global-image-pull-secrets": reportGlobalImagePullSecrets, - "--scheduler-k3s-computed-ingress-class": reportComputedIngressClass, - "--scheduler-k3s-global-ingress-class": reportGlobalIngressClass, - "--scheduler-k3s-computed-kubeconfig-path": reportComputedKubeconfigPath, - "--scheduler-k3s-global-kubeconfig-path": reportGlobalKubeconfigPath, - "--scheduler-k3s-computed-kube-context": reportComputedKubeContext, - "--scheduler-k3s-global-kube-context": reportGlobalKubeContext, - "--scheduler-k3s-computed-kustomize-root-path": reportComputedKustomizeRootPath, - "--scheduler-k3s-kustomize-root-path": reportKustomizeRootPath, - "--scheduler-k3s-global-kustomize-root-path": reportGlobalKustomizeRootPath, - "--scheduler-k3s-computed-letsencrypt-server": reportComputedLetsencryptServer, - "--scheduler-k3s-letsencrypt-server": reportLetsencryptServer, - "--scheduler-k3s-global-letsencrypt-server": reportGlobalLetsencryptServer, - "--scheduler-k3s-computed-letsencrypt-email-prod": reportComputedLetsencryptEmailProd, - "--scheduler-k3s-letsencrypt-email-prod": reportLetsencryptEmailProd, - "--scheduler-k3s-global-letsencrypt-email-prod": reportGlobalLetsencryptEmailProd, - "--scheduler-k3s-computed-letsencrypt-email-stag": reportComputedLetsencryptEmailStag, - "--scheduler-k3s-letsencrypt-email-stag": reportLetsencryptEmailStag, - "--scheduler-k3s-global-letsencrypt-email-stag": reportGlobalLetsencryptEmailStag, - "--scheduler-k3s-computed-namespace": reportComputedNamespace, - "--scheduler-k3s-namespace": reportNamespace, - "--scheduler-k3s-global-namespace": reportGlobalNamespace, - "--scheduler-k3s-computed-network-interface": reportComputedNetworkInterface, - "--scheduler-k3s-global-network-interface": reportGlobalNetworkInterface, - "--scheduler-k3s-global-node-sysctls-image": reportGlobalNodeSysctlsImage, - "--scheduler-k3s-global-node-sysctls-pause-image": reportGlobalNodeSysctlsPauseImage, - "--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, + "--scheduler-k3s-computed-cert-issuer-kind": reportComputedCertIssuerKind, + "--scheduler-k3s-cert-issuer-kind": reportCertIssuerKind, + "--scheduler-k3s-global-cert-issuer-kind": reportGlobalCertIssuerKind, + "--scheduler-k3s-computed-cert-issuer-name": reportComputedCertIssuerName, + "--scheduler-k3s-cert-issuer-name": reportCertIssuerName, + "--scheduler-k3s-global-cert-issuer-name": reportGlobalCertIssuerName, + "--scheduler-k3s-computed-deploy-timeout": reportComputedDeployTimeout, + "--scheduler-k3s-deploy-timeout": reportDeployTimeout, + "--scheduler-k3s-global-deploy-timeout": reportGlobalDeployTimeout, + "--scheduler-k3s-computed-image-pull-secrets": reportComputedImagePullSecrets, + "--scheduler-k3s-image-pull-secrets": reportImagePullSecrets, + "--scheduler-k3s-global-image-pull-secrets": reportGlobalImagePullSecrets, + "--scheduler-k3s-computed-ingress-class": reportComputedIngressClass, + "--scheduler-k3s-global-ingress-class": reportGlobalIngressClass, + "--scheduler-k3s-computed-kubeconfig-path": reportComputedKubeconfigPath, + "--scheduler-k3s-global-kubeconfig-path": reportGlobalKubeconfigPath, + "--scheduler-k3s-computed-kube-context": reportComputedKubeContext, + "--scheduler-k3s-global-kube-context": reportGlobalKubeContext, + "--scheduler-k3s-computed-kustomize-root-path": reportComputedKustomizeRootPath, + "--scheduler-k3s-kustomize-root-path": reportKustomizeRootPath, + "--scheduler-k3s-global-kustomize-root-path": reportGlobalKustomizeRootPath, + "--scheduler-k3s-computed-letsencrypt-server": reportComputedLetsencryptServer, + "--scheduler-k3s-letsencrypt-server": reportLetsencryptServer, + "--scheduler-k3s-global-letsencrypt-server": reportGlobalLetsencryptServer, + "--scheduler-k3s-computed-letsencrypt-email-prod": reportComputedLetsencryptEmailProd, + "--scheduler-k3s-letsencrypt-email-prod": reportLetsencryptEmailProd, + "--scheduler-k3s-global-letsencrypt-email-prod": reportGlobalLetsencryptEmailProd, + "--scheduler-k3s-computed-letsencrypt-email-stag": reportComputedLetsencryptEmailStag, + "--scheduler-k3s-letsencrypt-email-stag": reportLetsencryptEmailStag, + "--scheduler-k3s-global-letsencrypt-email-stag": reportGlobalLetsencryptEmailStag, + "--scheduler-k3s-computed-namespace": reportComputedNamespace, + "--scheduler-k3s-namespace": reportNamespace, + "--scheduler-k3s-global-namespace": reportGlobalNamespace, + "--scheduler-k3s-computed-network-interface": reportComputedNetworkInterface, + "--scheduler-k3s-global-network-interface": reportGlobalNetworkInterface, + "--scheduler-k3s-computed-node-sysctls-image": reportComputedNodeSysctlsImage, + "--scheduler-k3s-global-node-sysctls-image": reportGlobalNodeSysctlsImage, + "--scheduler-k3s-computed-node-sysctls-pause-image": reportComputedNodeSysctlsPauseImage, + "--scheduler-k3s-global-node-sysctls-pause-image": reportGlobalNodeSysctlsPauseImage, + "--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, } } @@ -686,14 +690,22 @@ func reportGlobalNetworkInterface(appName string) string { return getGlobalNetworkInterface() } -func reportGlobalNodeSysctlsImage(appName string) string { +func reportComputedNodeSysctlsImage(appName string) string { return getComputedNodeSysctlsImage() } -func reportGlobalNodeSysctlsPauseImage(appName string) string { +func reportGlobalNodeSysctlsImage(appName string) string { + return getGlobalNodeSysctlsImage() +} + +func reportComputedNodeSysctlsPauseImage(appName string) string { return getComputedNodeSysctlsPauseImage() } +func reportGlobalNodeSysctlsPauseImage(appName string) string { + return getGlobalNodeSysctlsPauseImage() +} + func reportComputedRollbackOnFailure(appName string) string { return getComputedRollbackOnFailure(appName) } diff --git a/tests/unit/scheduler-k3s-report.bats b/tests/unit/scheduler-k3s-report.bats index f70d6fd6c..76268eb2b 100644 --- a/tests/unit/scheduler-k3s-report.bats +++ b/tests/unit/scheduler-k3s-report.bats @@ -7,7 +7,7 @@ setup() { } teardown() { - for prop in cert-issuer-kind cert-issuer-name deploy-timeout image-pull-secrets ingress-class kubeconfig-path kube-context kustomize-root-path namespace network-interface rollback-on-failure shm-size token; do + for prop in cert-issuer-kind cert-issuer-name deploy-timeout image-pull-secrets ingress-class kubeconfig-path kube-context kustomize-root-path namespace network-interface node-sysctls-image node-sysctls-pause-image rollback-on-failure shm-size token; do dokku scheduler-k3s:set --global "$prop" >/dev/null 2>/dev/null || true done global_teardown @@ -56,6 +56,8 @@ assert_k3s_global_unset_set() { assert_k3s_global_unset_set "network-interface" "eth0" "eth1" assert_k3s_global_unset_set "kubeconfig-path" "/etc/rancher/k3s/k3s.yaml" "/tmp/custom-kubeconfig.yaml" assert_k3s_global_unset_set "cert-issuer-kind" "ClusterIssuer" "Issuer" + assert_k3s_global_unset_set "node-sysctls-image" "busybox:1.36" "registry.internal/busybox:1.36" + assert_k3s_global_unset_set "node-sysctls-pause-image" "registry.k8s.io/pause:3.9" "registry.internal/pause:3.9" } @test "(scheduler-k3s:report --global) empty-default properties expose computed sibling" {