at 23.11-pre 3.0 kB view raw
1{ config, lib, options, pkgs, ... }: 2 3with lib; 4 5let 6 top = config.services.kubernetes; 7 otop = options.services.kubernetes; 8 cfg = top.scheduler; 9in 10{ 11 ###### interface 12 options.services.kubernetes.scheduler = with lib.types; { 13 14 address = mkOption { 15 description = lib.mdDoc "Kubernetes scheduler listening address."; 16 default = "127.0.0.1"; 17 type = str; 18 }; 19 20 enable = mkEnableOption (lib.mdDoc "Kubernetes scheduler"); 21 22 extraOpts = mkOption { 23 description = lib.mdDoc "Kubernetes scheduler extra command line options."; 24 default = ""; 25 type = separatedString " "; 26 }; 27 28 featureGates = mkOption { 29 description = lib.mdDoc "List set of feature gates"; 30 default = top.featureGates; 31 defaultText = literalExpression "config.${otop.featureGates}"; 32 type = listOf str; 33 }; 34 35 kubeconfig = top.lib.mkKubeConfigOptions "Kubernetes scheduler"; 36 37 leaderElect = mkOption { 38 description = lib.mdDoc "Whether to start leader election before executing main loop."; 39 type = bool; 40 default = true; 41 }; 42 43 port = mkOption { 44 description = lib.mdDoc "Kubernetes scheduler listening port."; 45 default = 10251; 46 type = port; 47 }; 48 49 verbosity = mkOption { 50 description = lib.mdDoc '' 51 Optional glog verbosity level for logging statements. See 52 <https://github.com/kubernetes/community/blob/master/contributors/devel/logging.md> 53 ''; 54 default = null; 55 type = nullOr int; 56 }; 57 58 }; 59 60 ###### implementation 61 config = mkIf cfg.enable { 62 systemd.services.kube-scheduler = { 63 description = "Kubernetes Scheduler Service"; 64 wantedBy = [ "kubernetes.target" ]; 65 after = [ "kube-apiserver.service" ]; 66 serviceConfig = { 67 Slice = "kubernetes.slice"; 68 ExecStart = ''${top.package}/bin/kube-scheduler \ 69 --bind-address=${cfg.address} \ 70 ${optionalString (cfg.featureGates != []) 71 "--feature-gates=${concatMapStringsSep "," (feature: "${feature}=true") cfg.featureGates}"} \ 72 --kubeconfig=${top.lib.mkKubeConfig "kube-scheduler" cfg.kubeconfig} \ 73 --leader-elect=${boolToString cfg.leaderElect} \ 74 --secure-port=${toString cfg.port} \ 75 ${optionalString (cfg.verbosity != null) "--v=${toString cfg.verbosity}"} \ 76 ${cfg.extraOpts} 77 ''; 78 WorkingDirectory = top.dataDir; 79 User = "kubernetes"; 80 Group = "kubernetes"; 81 Restart = "on-failure"; 82 RestartSec = 5; 83 }; 84 unitConfig = { 85 StartLimitIntervalSec = 0; 86 }; 87 }; 88 89 services.kubernetes.pki.certs = { 90 schedulerClient = top.lib.mkCert { 91 name = "kube-scheduler-client"; 92 CN = "system:kube-scheduler"; 93 action = "systemctl restart kube-scheduler.service"; 94 }; 95 }; 96 97 services.kubernetes.scheduler.kubeconfig.server = mkDefault top.apiserverAddress; 98 }; 99 100 meta.buildDocsInSandbox = false; 101}