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