duplicati.yaml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. ---
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: duplicati
  6. namespace: plex
  7. spec:
  8. strategy:
  9. type: Recreate
  10. selector:
  11. matchLabels:
  12. app: duplicati
  13. replicas: 1
  14. template:
  15. metadata:
  16. labels:
  17. app: duplicati
  18. annotations:
  19. backup.velero.io/backup-volumes-excludes: plex,media2,data
  20. spec:
  21. containers:
  22. - name: duplicati
  23. image: lscr.io/linuxserver/duplicati:2.1.0
  24. ports:
  25. - containerPort: 8200
  26. name: http-web-svc
  27. env:
  28. - name: TZ
  29. value: Etc/UTC
  30. - name: PUID
  31. value: "1000"
  32. - name: PGID
  33. value: "1000"
  34. - name: DUPLICATI__WEBSERVICE_PASSWORD
  35. valueFrom:
  36. secretKeyRef:
  37. name: duplicati-secret
  38. key: password
  39. volumeMounts:
  40. - mountPath: "/plex"
  41. name: plex
  42. - mountPath: "/media2"
  43. name: media2
  44. - mountPath: "/data"
  45. name: data
  46. - mountPath: "/config"
  47. name: config
  48. volumes:
  49. - name: plex
  50. persistentVolumeClaim:
  51. claimName: plex-pvc
  52. - name: media2
  53. persistentVolumeClaim:
  54. claimName: media2-pvc
  55. - name: data
  56. persistentVolumeClaim:
  57. claimName: data-ec-pvc
  58. - name: config
  59. persistentVolumeClaim:
  60. claimName: duplicati-pvc
  61. ---
  62. apiVersion: v1
  63. kind: Service
  64. metadata:
  65. name: duplicati-service
  66. namespace: plex
  67. spec:
  68. selector:
  69. app: duplicati
  70. type: ClusterIP
  71. ports:
  72. - name: duplicati-web-port
  73. protocol: TCP
  74. port: 8200
  75. targetPort: http-web-svc
  76. ---
  77. apiVersion: batch/v1
  78. kind: CronJob
  79. metadata:
  80. name: duplicati-run-tree
  81. namespace: plex
  82. spec:
  83. schedule: "0 0 * * 0"
  84. jobTemplate:
  85. spec:
  86. template:
  87. spec:
  88. containers:
  89. - name: tree
  90. image: alpine:3.18.4
  91. imagePullPolicy: IfNotPresent
  92. envFrom:
  93. - secretRef:
  94. name: ntfy-auth-secret
  95. command:
  96. - /bin/sh
  97. - -c
  98. - (tree /plex > /plex/tree.txt && tree /media2 > /media2/tree.txt) || curl -u $NTFY_AUTH -d 'error generating media tree' https://ntfy.jibby.org/media-tree
  99. volumeMounts:
  100. - mountPath: "/plex"
  101. name: plex
  102. - mountPath: "/media2"
  103. name: media2
  104. volumes:
  105. - name: plex
  106. persistentVolumeClaim:
  107. claimName: plex-pvc
  108. - name: media2
  109. persistentVolumeClaim:
  110. claimName: media2-pvc
  111. restartPolicy: OnFailure
  112. ---
  113. apiVersion: networking.k8s.io/v1
  114. kind: Ingress
  115. metadata:
  116. name: duplicati
  117. namespace: plex
  118. annotations:
  119. traefik.ingress.kubernetes.io/router.entrypoints: websecure
  120. traefik.ingress.kubernetes.io/router.middlewares: kube-system-lanonly@kubernetescrd
  121. spec:
  122. rules:
  123. - host: duplicati.lan.jibby.org
  124. http:
  125. paths:
  126. - path: /
  127. pathType: Prefix
  128. backend:
  129. service:
  130. name: duplicati-service
  131. port:
  132. number: 8200