summary refs log tree commit diff
path: root/nixos/modules/virtualisation/lxd.nix
diff options
context:
space:
mode:
authormt_caret <mtakeda.enigsol@gmail.com>2019-12-14 23:29:08 +0900
committerLassulus <github@lassul.us>2019-12-14 15:29:08 +0100
commit7358e4f93c49d2a653115b797ec9ab3ce712a5e4 (patch)
treea0fe91aa7b97090c45985c682aa9b644b235e104 /nixos/modules/virtualisation/lxd.nix
parent9b2b17253a5e92c0543690648b628db5ba1a9882 (diff)
downloadnixpkgs-7358e4f93c49d2a653115b797ec9ab3ce712a5e4.tar
nixpkgs-7358e4f93c49d2a653115b797ec9ab3ce712a5e4.tar.gz
nixpkgs-7358e4f93c49d2a653115b797ec9ab3ce712a5e4.tar.bz2
nixpkgs-7358e4f93c49d2a653115b797ec9ab3ce712a5e4.tar.lz
nixpkgs-7358e4f93c49d2a653115b797ec9ab3ce712a5e4.tar.xz
nixpkgs-7358e4f93c49d2a653115b797ec9ab3ce712a5e4.tar.zst
nixpkgs-7358e4f93c49d2a653115b797ec9ab3ce712a5e4.zip
nixos/lxd: add recommendedSysctlSettings
* nixos/lxd: add productionSetup option
* nixos/lxd: enable some settings by default
* nixos/lxd: rename option
Diffstat (limited to 'nixos/modules/virtualisation/lxd.nix')
-rw-r--r--nixos/modules/virtualisation/lxd.nix28
1 files changed, 27 insertions, 1 deletions
diff --git a/nixos/modules/virtualisation/lxd.nix b/nixos/modules/virtualisation/lxd.nix
index 505c11abd20..b4934a86cf5 100644
--- a/nixos/modules/virtualisation/lxd.nix
+++ b/nixos/modules/virtualisation/lxd.nix
@@ -35,6 +35,18 @@ in
           with nixos.
         '';
       };
+      recommendedSysctlSettings = mkOption {
+        type = types.bool;
+        default = false;
+        description = ''
+          enables various settings to avoid common pitfalls when
+          running containers requiring many file operations.
+          Fixes errors like "Too many open files" or
+          "neighbour: ndisc_cache: neighbor table overflow!".
+          See https://lxd.readthedocs.io/en/latest/production-setup/
+          for details.
+        '';
+      };
     };
   };
 
@@ -69,8 +81,11 @@ in
         ExecStart = "@${pkgs.lxd.bin}/bin/lxd lxd --group lxd";
         Type = "simple";
         KillMode = "process"; # when stopping, leave the containers alone
+        LimitMEMLOCK = "infinity";
+        LimitNOFILE = "1048576";
+        LimitNPROC = "infinity";
+        TasksMax = "infinity";
       };
-
     };
 
     users.groups.lxd.gid = config.ids.gids.lxd;
@@ -79,5 +94,16 @@ in
       subUidRanges = [ { startUid = 1000000; count = 65536; } ];
       subGidRanges = [ { startGid = 1000000; count = 65536; } ];
     };
+
+    boot.kernel.sysctl = mkIf cfg.recommendedSysctlSettings {
+      "fs.inotify.max_queued_events" = 1048576;
+      "fs.inotify.max_user_instances" = 1048576;
+      "fs.inotify.max_user_watches" = 1048576;
+      "vm.max_map_count" = 262144;
+      "kernel.dmesg_restrict" = 1;
+      "net.ipv4.neigh.default.gc_thresh3" = 8192;
+      "net.ipv6.neigh.default.gc_thresh3" = 8192;
+      "kernel.keys.maxkeys" = 2000;
+    };
   };
 }