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