Created
January 27, 2025 11:11
-
-
Save mnorrsken/6ef80a0895528ccf3c6c94bf3418b2d9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Applied to namespace "unifi" with kustomize | |
| apiVersion: v1 | |
| kind: ServiceAccount | |
| metadata: | |
| name: secret-creator | |
| --- | |
| apiVersion: rbac.authorization.k8s.io/v1 | |
| kind: RoleBinding | |
| metadata: | |
| name: secret-creator-role-binding | |
| subjects: | |
| - kind: ServiceAccount | |
| name: secret-creator | |
| roleRef: | |
| kind: ClusterRole | |
| name: admin | |
| apiGroup: rbac.authorization.k8s.io | |
| --- | |
| apiVersion: batch/v1 | |
| kind: Job | |
| metadata: | |
| name: secret-creation-job | |
| spec: | |
| template: | |
| metadata: | |
| name: secret-creation-pod | |
| spec: | |
| serviceAccountName: secret-creator | |
| containers: | |
| - name: secret-creation-container | |
| image: bitnami/kubectl:latest | |
| command: ["/bin/sh"] | |
| args: | |
| - -c | |
| - | | |
| cd /tmp | |
| MONGO_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 13; echo) | |
| MONGO_USER=root | |
| MONGO_DBNAME=unifi | |
| cat > init-mongo.js <<EOF | |
| db.getSiblingDB("${MONGO_DBNAME}").createUser({user: "${MONGO_USER}", pwd: "${MONGO_PASS}", roles: [{role: "dbOwner", db: "${MONGO_DBNAME}"}]}); | |
| db.getSiblingDB("${MONGO_DBNAME}_stat").createUser({user: "${MONGO_USER}", pwd: "${MONGO_PASS}", roles: [{role: "dbOwner", db: "${MONGO_DBNAME}_stat"}]}); | |
| EOF | |
| kubectl create secret generic unifi --from-literal=MONGO_PASS=$MONGO_PASS --from-literal=MONGO_USER=$MONGO_USER --from-literal=MONGO_DBNAME=$MONGO_DBNAME --from-file=init-mongo.js | |
| env: | |
| - name: KUBE_NAMESPACE | |
| valueFrom: | |
| fieldRef: | |
| fieldPath: metadata.namespace | |
| restartPolicy: Never | |
| backoffLimit: 1 | |
| --- | |
| apiVersion: apps/v1 | |
| kind: Deployment | |
| metadata: | |
| name: mongodb | |
| namespace: unifi | |
| spec: | |
| replicas: 1 | |
| strategy: | |
| type: Recreate | |
| rollingUpdate: null | |
| selector: | |
| matchLabels: | |
| app: mongodb | |
| template: | |
| metadata: | |
| labels: | |
| app: mongodb | |
| annotations: | |
| diun.enable: "true" | |
| spec: | |
| containers: | |
| - name: mongodb | |
| image: mongo:4.4 | |
| imagePullPolicy: Always | |
| ports: | |
| - containerPort: 27017 | |
| volumeMounts: | |
| - name: init-script | |
| mountPath: /docker-entrypoint-initdb.d | |
| - name: mongodb-data | |
| mountPath: /data/db | |
| resources: | |
| requests: | |
| memory: 333Mi | |
| cpu: 10m | |
| limits: | |
| memory: 333Mi | |
| volumes: | |
| - name: init-script | |
| secret: | |
| secretName: unifi | |
| items: | |
| - key: init-mongo.js | |
| path: init-mongo.js | |
| - name: mongodb-data | |
| persistentVolumeClaim: | |
| claimName: mongodb-pvc | |
| --- | |
| apiVersion: v1 | |
| kind: PersistentVolumeClaim | |
| metadata: | |
| name: mongodb-pvc | |
| spec: | |
| accessModes: | |
| - ReadWriteOnce | |
| resources: | |
| requests: | |
| storage: 4Gi | |
| --- | |
| apiVersion: v1 | |
| kind: Service | |
| metadata: | |
| name: mongodb | |
| spec: | |
| type: ClusterIP | |
| selector: | |
| app: mongodb | |
| ports: | |
| - protocol: TCP | |
| port: 27017 | |
| targetPort: 27017 | |
| --- | |
| apiVersion: apps/v1 | |
| kind: Deployment | |
| metadata: | |
| name: unifi | |
| namespace: unifi | |
| spec: | |
| strategy: | |
| type: Recreate | |
| rollingUpdate: null | |
| replicas: 1 | |
| selector: | |
| matchLabels: | |
| app: unifi | |
| template: | |
| metadata: | |
| labels: | |
| app: unifi | |
| annotations: | |
| diun.enable: "true" | |
| backup.velero.io/backup-volumes: unifi-backups | |
| spec: | |
| containers: | |
| - name: unifi-network-application | |
| image: lscr.io/linuxserver/unifi-network-application:latest | |
| imagePullPolicy: Always | |
| resources: | |
| requests: | |
| memory: 1200Mi | |
| cpu: 10m | |
| limits: | |
| memory: 1200Mi | |
| env: | |
| - name: PUID | |
| value: '1000' | |
| - name: PGID | |
| value: '1000' | |
| - name: TZ | |
| value: Europe/Stockholm | |
| - name: MONGO_USER | |
| valueFrom: | |
| secretKeyRef: | |
| name: unifi | |
| key: MONGO_USER | |
| - name: MONGO_PASS | |
| valueFrom: | |
| secretKeyRef: | |
| name: unifi | |
| key: MONGO_PASS | |
| - name: MONGO_DBNAME | |
| valueFrom: | |
| secretKeyRef: | |
| name: unifi | |
| key: MONGO_DBNAME | |
| - name: MONGO_HOST | |
| value: mongodb | |
| - name: MONGO_PORT | |
| value: '27017' | |
| ports: | |
| - containerPort: 3478 | |
| protocol: UDP | |
| - containerPort: 10001 | |
| protocol: UDP | |
| - containerPort: 8443 | |
| - containerPort: 8080 | |
| volumeMounts: | |
| - name: unifi-data | |
| mountPath: /config | |
| - name: unifi-backups | |
| mountPath: /config/data/backup/autobackup | |
| volumes: | |
| - name: unifi-data | |
| persistentVolumeClaim: | |
| claimName: unifi-pvc | |
| - name: unifi-backups | |
| persistentVolumeClaim: | |
| claimName: unifi-backups-pvc | |
| --- | |
| apiVersion: v1 | |
| kind: PersistentVolumeClaim | |
| metadata: | |
| name: unifi-pvc | |
| spec: | |
| accessModes: | |
| - ReadWriteOnce | |
| resources: | |
| requests: | |
| storage: 1Gi | |
| --- | |
| apiVersion: v1 | |
| kind: PersistentVolumeClaim | |
| metadata: | |
| name: unifi-backups-pvc | |
| spec: | |
| accessModes: | |
| - ReadWriteMany | |
| resources: | |
| requests: | |
| storage: 1Gi | |
| --- | |
| apiVersion: v1 | |
| kind: Service | |
| metadata: | |
| name: unifi-http | |
| namespace: unifi | |
| annotations: | |
| traefik.ingress.kubernetes.io/service.serversscheme: https | |
| spec: | |
| selector: | |
| app: unifi | |
| ports: | |
| - protocol: TCP | |
| port: 8443 | |
| targetPort: 8443 | |
| --- | |
| apiVersion: v1 | |
| kind: Service | |
| metadata: | |
| name: unifi-http-api | |
| namespace: unifi | |
| annotations: | |
| external-dns.alpha.kubernetes.io/hostname: unifi.internal | |
| metallb.io/loadBalancerIPs: 192.168.11.12 | |
| spec: | |
| type: LoadBalancer | |
| selector: | |
| app: unifi | |
| ports: | |
| - protocol: UDP | |
| port: 3478 | |
| targetPort: 3478 | |
| name: stun | |
| - protocol: UDP | |
| port: 10001 | |
| targetPort: 10001 | |
| name: udp10001 | |
| - protocol: TCP | |
| port: 8080 | |
| targetPort: 8080 | |
| name: http | |
| --- | |
| apiVersion: networking.k8s.io/v1 | |
| kind: Ingress | |
| metadata: | |
| name: unifi-console | |
| namespace: unifi | |
| annotations: | |
| traefik.ingress.kubernetes.io/router.entrypoints: websecure | |
| spec: | |
| ingressClassName: traefik | |
| rules: | |
| - host: unifi.example.com | |
| http: | |
| paths: | |
| - path: / | |
| pathType: Prefix | |
| backend: | |
| service: | |
| name: unifi-http | |
| port: | |
| number: 8443 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment