summary refs log tree commit diff
path: root/nixos/modules/services/cluster/kubernetes
diff options
context:
space:
mode:
authorJaka Hudoklin <jakahudoklin@gmail.com>2017-09-01 12:22:12 +0200
committerRobin Gloster <mail@glob.in>2017-09-24 11:44:25 +0200
commit2beadcf1818dfeb6aba7b37112c2f409734fee17 (patch)
tree9e4a4c835f907e87eb5a6978bf67e4922e952790 /nixos/modules/services/cluster/kubernetes
parent9d97c92d68445aab986916c7214c28f824264cd9 (diff)
downloadnixlib-2beadcf1818dfeb6aba7b37112c2f409734fee17.tar
nixlib-2beadcf1818dfeb6aba7b37112c2f409734fee17.tar.gz
nixlib-2beadcf1818dfeb6aba7b37112c2f409734fee17.tar.bz2
nixlib-2beadcf1818dfeb6aba7b37112c2f409734fee17.tar.lz
nixlib-2beadcf1818dfeb6aba7b37112c2f409734fee17.tar.xz
nixlib-2beadcf1818dfeb6aba7b37112c2f409734fee17.tar.zst
nixlib-2beadcf1818dfeb6aba7b37112c2f409734fee17.zip
kubernetes module: seedDockerImages option for seeding docker images built with nix
Diffstat (limited to 'nixos/modules/services/cluster/kubernetes')
-rw-r--r--nixos/modules/services/cluster/kubernetes/default.nix38
1 files changed, 32 insertions, 6 deletions
diff --git a/nixos/modules/services/cluster/kubernetes/default.nix b/nixos/modules/services/cluster/kubernetes/default.nix
index 3ebd2a086fd0..d799ce292e01 100644
--- a/nixos/modules/services/cluster/kubernetes/default.nix
+++ b/nixos/modules/services/cluster/kubernetes/default.nix
@@ -505,6 +505,12 @@ in {
         type = types.listOf types.str;
       };
 
+      seedDockerImages = mkOption {
+        description = "List of docker images to preload on system";
+        default = [];
+        type = types.listOf types.package;
+      };
+
       registerNode = mkOption {
         description = "Whether to auto register kubelet with API server.";
         default = true;
@@ -774,16 +780,36 @@ in {
 
   config = mkMerge [
     (mkIf cfg.kubelet.enable {
+      services.kubernetes.kubelet.seedDockerImages = [infraContainer];
+
+      systemd.services.kubelet-bootstrap = {
+        description = "Boostrap Kubelet";
+        wantedBy = ["kubernetes.target"];
+        after = ["docker.service" "network.target"];
+        path = with pkgs; [ docker ];
+        script = ''
+          ${concatMapStrings (img: ''
+            echo "Seeding docker image: ${img}"
+            docker load <${img}
+          '') cfg.kubelet.seedDockerImages}
+
+          rm /opt/cni/bin/* || true
+          ${concatMapStrings (package: ''
+            echo "Linking cni package: ${package}"
+            ln -fs ${package.plugins}/* /opt/cni/bin
+          '') cfg.kubelet.cni.packages}
+        '';
+        serviceConfig = {
+          Slice = "kubernetes.slice";
+          Type = "oneshot";
+        };
+      };
+
       systemd.services.kubelet = {
         description = "Kubernetes Kubelet Service";
         wantedBy = [ "kubernetes.target" ];
-        after = [ "network.target" "docker.service" "kube-apiserver.service" ];
+        after = [ "network.target" "docker.service" "kube-apiserver.service" "kubelet-bootstrap.service" ];
         path = with pkgs; [ gitMinimal openssh docker utillinux iproute ethtool thin-provisioning-tools iptables socat ] ++ cfg.path;
-        preStart = ''
-          docker load < ${infraContainer}
-          rm /opt/cni/bin/* || true
-          ${concatMapStringsSep "\n" (p: "ln -fs ${p.plugins}/* /opt/cni/bin") cfg.kubelet.cni.packages}
-        '';
         serviceConfig = {
           Slice = "kubernetes.slice";
           ExecStart = ''${cfg.package}/bin/kubelet \