python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / cluster / kubernetes / scheduler.nix
blob2eada43eb4ec10a3a4d49bf78c6f47cfd0570acb
1 { config, lib, options, pkgs, ... }:
3 with lib;
5 let
6   top = config.services.kubernetes;
7   otop = options.services.kubernetes;
8   cfg = top.scheduler;
9 in
11   ###### interface
12   options.services.kubernetes.scheduler = with lib.types; {
14     address = mkOption {
15       description = lib.mdDoc "Kubernetes scheduler listening address.";
16       default = "127.0.0.1";
17       type = str;
18     };
20     enable = mkEnableOption (lib.mdDoc "Kubernetes scheduler");
22     extraOpts = mkOption {
23       description = lib.mdDoc "Kubernetes scheduler extra command line options.";
24       default = "";
25       type = separatedString " ";
26     };
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     };
35     kubeconfig = top.lib.mkKubeConfigOptions "Kubernetes scheduler";
37     leaderElect = mkOption {
38       description = lib.mdDoc "Whether to start leader election before executing main loop.";
39       type = bool;
40       default = true;
41     };
43     port = mkOption {
44       description = lib.mdDoc "Kubernetes scheduler listening port.";
45       default = 10251;
46       type = int;
47     };
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     };
58   };
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     };
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     };
97     services.kubernetes.scheduler.kubeconfig.server = mkDefault top.apiserverAddress;
98   };
100   meta.buildDocsInSandbox = false;