at 18.03-beta 5.0 kB view raw
1{ config, pkgs, lib, ... }: 2 3with lib; 4 5let 6 cfg = config.services.kubernetes.addons.dashboard; 7 8 name = "gcr.io/google_containers/kubernetes-dashboard-amd64"; 9 version = "v1.8.2"; 10 11 image = pkgs.dockerTools.pullImage { 12 imageName = name; 13 imageTag = version; 14 sha256 = "11h0fz3wxp0f10fsyqaxjm7l2qg7xws50dv5iwlck5gb1fjmajad"; 15 }; 16in { 17 options.services.kubernetes.addons.dashboard = { 18 enable = mkEnableOption "kubernetes dashboard addon"; 19 20 enableRBAC = mkOption { 21 description = "Whether to enable role based access control is enabled for kubernetes dashboard"; 22 type = types.bool; 23 default = elem "RBAC" config.services.kubernetes.apiserver.authorizationMode; 24 }; 25 }; 26 27 config = mkIf cfg.enable { 28 services.kubernetes.kubelet.seedDockerImages = [image]; 29 30 services.kubernetes.addonManager.addons = { 31 kubernetes-dashboard-deployment = { 32 kind = "Deployment"; 33 apiVersion = "apps/v1beta1"; 34 metadata = { 35 labels = { 36 k8s-addon = "kubernetes-dashboard.addons.k8s.io"; 37 k8s-app = "kubernetes-dashboard"; 38 version = version; 39 "kubernetes.io/cluster-service" = "true"; 40 "addonmanager.kubernetes.io/mode" = "Reconcile"; 41 }; 42 name = "kubernetes-dashboard"; 43 namespace = "kube-system"; 44 }; 45 spec = { 46 replicas = 1; 47 revisionHistoryLimit = 10; 48 selector.matchLabels."k8s-app" = "kubernetes-dashboard"; 49 template = { 50 metadata = { 51 labels = { 52 k8s-addon = "kubernetes-dashboard.addons.k8s.io"; 53 k8s-app = "kubernetes-dashboard"; 54 version = version; 55 "kubernetes.io/cluster-service" = "true"; 56 }; 57 annotations = { 58 "scheduler.alpha.kubernetes.io/critical-pod" = ""; 59 #"scheduler.alpha.kubernetes.io/tolerations" = ''[{"key":"CriticalAddonsOnly", "operator":"Exists"}]''; 60 }; 61 }; 62 spec = { 63 containers = [{ 64 name = "kubernetes-dashboard"; 65 image = "${name}:${version}"; 66 ports = [{ 67 containerPort = 9090; 68 protocol = "TCP"; 69 }]; 70 resources = { 71 limits = { 72 cpu = "100m"; 73 memory = "50Mi"; 74 }; 75 requests = { 76 cpu = "100m"; 77 memory = "50Mi"; 78 }; 79 }; 80 livenessProbe = { 81 httpGet = { 82 path = "/"; 83 port = 9090; 84 }; 85 initialDelaySeconds = 30; 86 timeoutSeconds = 30; 87 }; 88 }]; 89 serviceAccountName = "kubernetes-dashboard"; 90 tolerations = [{ 91 key = "node-role.kubernetes.io/master"; 92 effect = "NoSchedule"; 93 }]; 94 }; 95 }; 96 }; 97 }; 98 99 kubernetes-dashboard-svc = { 100 apiVersion = "v1"; 101 kind = "Service"; 102 metadata = { 103 labels = { 104 k8s-addon = "kubernetes-dashboard.addons.k8s.io"; 105 k8s-app = "kubernetes-dashboard"; 106 "kubernetes.io/cluster-service" = "true"; 107 "kubernetes.io/name" = "KubeDashboard"; 108 "addonmanager.kubernetes.io/mode" = "Reconcile"; 109 }; 110 name = "kubernetes-dashboard"; 111 namespace = "kube-system"; 112 }; 113 spec = { 114 ports = [{ 115 port = 80; 116 targetPort = 9090; 117 }]; 118 selector.k8s-app = "kubernetes-dashboard"; 119 }; 120 }; 121 122 kubernetes-dashboard-sa = { 123 apiVersion = "v1"; 124 kind = "ServiceAccount"; 125 metadata = { 126 labels = { 127 k8s-app = "kubernetes-dashboard"; 128 k8s-addon = "kubernetes-dashboard.addons.k8s.io"; 129 "addonmanager.kubernetes.io/mode" = "Reconcile"; 130 }; 131 name = "kubernetes-dashboard"; 132 namespace = "kube-system"; 133 }; 134 }; 135 } // (optionalAttrs cfg.enableRBAC { 136 kubernetes-dashboard-crb = { 137 apiVersion = "rbac.authorization.k8s.io/v1beta1"; 138 kind = "ClusterRoleBinding"; 139 metadata = { 140 name = "kubernetes-dashboard"; 141 labels = { 142 k8s-app = "kubernetes-dashboard"; 143 k8s-addon = "kubernetes-dashboard.addons.k8s.io"; 144 "addonmanager.kubernetes.io/mode" = "Reconcile"; 145 }; 146 }; 147 roleRef = { 148 apiGroup = "rbac.authorization.k8s.io"; 149 kind = "ClusterRole"; 150 name = "cluster-admin"; 151 }; 152 subjects = [{ 153 kind = "ServiceAccount"; 154 name = "kubernetes-dashboard"; 155 namespace = "kube-system"; 156 }]; 157 }; 158 }); 159 }; 160}