changeset 58:f39ada0b8827

push a coredns config with the right forwarding server
author drewp@bigasterisk.com
date Sun, 01 May 2022 23:27:33 -0700
parents 16098abf8f0f
children fa7a71b8a97f
files kube.py templates/kube/Corefile.j2 templates/kube/coredns-map.yaml templates/kube/coredns.yaml
diffstat 4 files changed, 278 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/kube.py	Sun Apr 17 22:16:28 2022 -0700
+++ b/kube.py	Sun May 01 23:27:33 2022 -0700
@@ -28,7 +28,7 @@
         group='root',
         mode='755',
         cache_time=43000,
-       # force=True,  # to get a new version
+        # force=True,  # to get a new version
     )
 
     if is_pi:
@@ -69,19 +69,30 @@
     )
     systemd.service(service=service_name, daemon_reload=True, enabled=True, restarted=True)
 
-# if bang:
-# files.template(
-#     src='templates/kube/Corefile.j2',
-#     dest='/etc/k3s_coredns_config',
-# )
-# server.shell(commands=[
-#     'kubectl replace configmap '
-#     '-n kube-system '
-#     'coredns '
-#     '--from-file=Corefile=/etc/k3s_coredns_config '
-#     '-o yaml '
-#     '--dry-run=client | kubectl apply -',
-# ])
+if host.name == 'bang':
+    files.put(
+        src="templates/kube/coredns.yaml",
+        dest="/var/lib/rancher/k3s/server/manifests/coredns.yaml",
+        mode="600",
+    )
+    # files.put(
+    #     src="templates/kube/coredns-map.yaml",
+    #     dest="/var/lib/rancher/k3s/server/manifests/coredns-map.yaml",
+    #     mode="600",
+    # )
+    # tmp = tempfile.NamedTemporaryFile(suffix='.yaml')
+    # files.template(
+    #     src='templates/kube/Corefile.yaml.j2',
+    #     dest=tmp.name,
+    # )
+    # server.shell(commands=[
+    #     'kubectl replace configmap '
+    #     # '-n kube-system '
+    #     # 'coredns '
+    #     f'--filename={tmp.name} '
+    #     '-o yaml '
+    #     # '--dry-run=client | kubectl apply -',
+    # ])
 # one-time thing at cluster create time? not sure
 # - name: Replace https://localhost:6443 by https://master-ip:6443
 #   command: >-
--- a/templates/kube/Corefile.j2	Sun Apr 17 22:16:28 2022 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-.:53 {
-    errors
-    health
-    ready
-    kubernetes cluster.local in-addr.arpa ip6.arpa {
-      pods insecure
-      fallthrough in-addr.arpa ip6.arpa
-    }
-    hosts /etc/coredns/NodeHosts {
-      ttl 60
-      reload 15s
-      fallthrough
-    }
-    prometheus :9153
-    forward . dns://10.2.0.1
-    cache 30
-    loop
-    reload
-    loadbalance
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/kube/coredns-map.yaml	Sun May 01 23:27:33 2022 -0700
@@ -0,0 +1,34 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: coredns
+  namespace: kube-system
+data:
+  Corefile.yaml: |
+    .:53 {
+        errors
+        health
+        ready
+        kubernetes cluster.local in-addr.arpa ip6.arpa {
+          pods insecure
+          fallthrough in-addr.arpa ip6.arpa
+        }
+        hosts /etc/coredns/NodeHosts {
+          ttl 60
+          reload 15s
+          fallthrough
+        }
+        prometheus :9153
+        forward . dns://10.2.0.1
+        cache 30
+        loop
+        reload
+        loadbalance
+    }
+  # this is automaintained in k3s- shouldn't need it here
+  NodeHosts: |
+    10.5.0.14 garage
+    10.5.0.6 slash
+    10.5.0.1 bang
+    10.5.0.17 frontbed
+    10.5.0.5 dash
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/kube/coredns.yaml	Sun May 01 23:27:33 2022 -0700
@@ -0,0 +1,219 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: coredns
+  namespace: kube-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  labels:
+    kubernetes.io/bootstrapping: rbac-defaults
+  name: system:coredns
+rules:
+- apiGroups:
+  - ""
+  resources:
+  - endpoints
+  - services
+  - pods
+  - namespaces
+  verbs:
+  - list
+  - watch
+- apiGroups:
+  - discovery.k8s.io
+  resources:
+  - endpointslices
+  verbs:
+  - list
+  - watch
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  annotations:
+    rbac.authorization.kubernetes.io/autoupdate: "true"
+  labels:
+    kubernetes.io/bootstrapping: rbac-defaults
+  name: system:coredns
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: system:coredns
+subjects:
+- kind: ServiceAccount
+  name: coredns
+  namespace: kube-system
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: coredns
+  namespace: kube-system
+data:
+  Corefile: |
+    # update 2022-04-19T20:20
+    .:53 {
+        errors
+        health
+        ready
+        kubernetes cluster.local in-addr.arpa ip6.arpa {
+          pods insecure
+          fallthrough in-addr.arpa ip6.arpa
+        }
+        hosts /etc/coredns/NodeHosts {
+          ttl 60
+          reload 15s
+          fallthrough
+        }
+        prometheus :9153
+        forward . 10.5.0.1
+        #/etc/resolv.conf
+        cache 30
+        loop
+        reload
+        loadbalance
+        log
+    }
+    import /etc/coredns/custom/*.server
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: coredns
+  namespace: kube-system
+  labels:
+    k8s-app: kube-dns
+    kubernetes.io/name: "CoreDNS"
+spec:
+  #replicas: 1
+  strategy:
+    type: RollingUpdate
+    rollingUpdate:
+      maxUnavailable: 1
+  selector:
+    matchLabels:
+      k8s-app: kube-dns
+  template:
+    metadata:
+      labels:
+        k8s-app: kube-dns
+    spec:
+      priorityClassName: "system-cluster-critical"
+      serviceAccountName: coredns
+      tolerations:
+        - key: "CriticalAddonsOnly"
+          operator: "Exists"
+        - key: "node-role.kubernetes.io/control-plane"
+          operator: "Exists"
+          effect: "NoSchedule"
+        - key: "node-role.kubernetes.io/master"
+          operator: "Exists"
+          effect: "NoSchedule"
+      nodeSelector:
+        kubernetes.io/os: linux
+      topologySpreadConstraints:
+        - maxSkew: 1
+          topologyKey: kubernetes.io/hostname
+          whenUnsatisfiable: DoNotSchedule
+          labelSelector:
+            matchLabels:
+              k8s-app: kube-dns
+      containers:
+      - name: coredns
+        image: rancher/mirrored-coredns-coredns:1.8.4
+        imagePullPolicy: IfNotPresent
+        resources:
+          limits:
+            memory: 170Mi
+          requests:
+            cpu: 100m
+            memory: 70Mi
+        args: [ "-conf", "/etc/coredns/Corefile" ]
+        volumeMounts:
+        - name: config-volume
+          mountPath: /etc/coredns
+          readOnly: true
+        - name: custom-config-volume
+          mountPath: /etc/coredns/custom
+          readOnly: true
+        ports:
+        - containerPort: 53
+          name: dns
+          protocol: UDP
+        - containerPort: 53
+          name: dns-tcp
+          protocol: TCP
+        - containerPort: 9153
+          name: metrics
+          protocol: TCP
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            add:
+            - NET_BIND_SERVICE
+            drop:
+            - all
+          readOnlyRootFilesystem: true
+        livenessProbe:
+          httpGet:
+            path: /health
+            port: 8080
+            scheme: HTTP
+          initialDelaySeconds: 60
+          periodSeconds: 10
+          timeoutSeconds: 1
+          successThreshold: 1
+          failureThreshold: 3
+        readinessProbe:
+          httpGet:
+            path: /ready
+            port: 8181
+            scheme: HTTP
+          initialDelaySeconds: 0
+          periodSeconds: 2
+          timeoutSeconds: 1
+          successThreshold: 1
+          failureThreshold: 3
+      dnsPolicy: Default
+      volumes:
+        - name: config-volume
+          configMap:
+            name: coredns
+            items:
+            - key: Corefile
+              path: Corefile
+            - key: NodeHosts
+              path: NodeHosts
+        - name: custom-config-volume
+          configMap:
+            name: coredns-custom
+            optional: true
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: kube-dns
+  namespace: kube-system
+  annotations:
+    prometheus.io/port: "9153"
+    prometheus.io/scrape: "true"
+  labels:
+    k8s-app: kube-dns
+    kubernetes.io/cluster-service: "true"
+    kubernetes.io/name: "CoreDNS"
+spec:
+  selector:
+    k8s-app: kube-dns
+  clusterIP: 10.43.0.10
+  ports:
+  - name: dns
+    port: 53
+    protocol: UDP
+  - name: dns-tcp
+    port: 53
+    protocol: TCP
+  - name: metrics
+    port: 9153
+    protocol: TCP