backup.remote.cronjob.yaml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: rclone-remote-backup-api-key
  5. type: Opaque
  6. data:
  7. backups.pem: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tDQpNSUlFdmdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0JLZ3dnZ1NrQWdFQUFvSUJBUURjbXR3N0t1cnphMmJ1DQplQ3BQRU9PdlFRRmdKU2I1SjFCbUpNelc1a2pUKy9aekdscjNZT3d6ay9QMVM5UWNBNlZ2YzdPdzNnditSZlZ2DQpWQnd4dkozVVRsNGo0eGRnK2JBWnRrNVpGR0dLSnhIMWo4V1E3Q0RGdU14U3NiRFgzRWVhaWlCMmQrcHJLSlZKDQp2YUFva1JBeHJuTG9oS0tpbEo1OTdwTjd0SnVWY0FjbXFWQTdmNFArZEVTNzUzL3pDNDMzWnJCb2lDeVM5cnVMDQpjWTcvVVMySnlxRXNjcXNVK1l4MmxEV1ZxMHZEMVJEeFdUYUJCSGlWb09RbkMvVmZxcjgxTXVaM2loWmQ2cldpDQpxa1dBN3l6eEhhSzZpdmJHNUVVYzZBOTg5VDhEUi9mOU42MDBFb2ZucGNsMVFyQ0g3SlpYUDNzNkZ6WEZSNXl0DQplTzJ4a1dVL0FnTUJBQUVDZ2dFQVJ6eEFjbUMwOXI2UFFlRU90SEpkTzJuUDBtYWMwNmEweVE4SUVEclRlSlJyDQpyQlp1R21TelVTSnREQ0FjMGFFQnlsLy92ZFN0NWNGY2RFTWlTWk5CR2QzbWUwc284UGtmdXVYS0hleTlaSG1pDQpUSHZORGJPYUQ0N1JkOENHUE9ZV1B4cHNTaVVGenUyUGEzenVtenJna2xKbEs1MHMwVGdSaDlQQ3p4YnVpSTNIDQpURmtXOVUxMGhJdC9wZTBDaWFSeTYwOU9zN2x6NCszeTRKMlM2eTJFbTQraVZ3Z2hzVnEyUnloTjhSNUVWRVZ0DQp2UEJmWjZOb1psYk9YOWpwUnZ3bGVCd3E4STQxYmpSeG02elZ5NmZ5MDBSczZLaENwUjM5eERwdkpKMFg0SGU5DQpvRWlsUjNYWnVVRWFZNndvRGs3VzVxcHVCVzRYVUkwMDFGbHpCZFIzYlFLQmdRRDFHN2VzMXZMYnp0eFM1dW5yDQoxQm55U3RPMm16dmd5Z3hxQlZWdGhKY2EyalNJOGNxQ3VucndCYUw3WlZycitDUmt5ekFUM0dCR2tvUGVjQlBWDQo5VVd6MENKeUN4M3NJbDVrVWdrYVVDWkt0QmIvMGxWQUQ4QmlwZGlCZ1JpNHFGd0J5SVQ3eG81dlhDQXVON095DQpqNEM1VzNLQ29Lbk5peDl5ZzBQVldZaDlyUUtCZ1FEbWFHWk5oTFhEcWZpb0k0Y056U3RLa1VseDRBV3BPUFBSDQpHOWgwVlhnaEp4elFDSEw3cmcrWEtaZ04xSmZOQVhnOWpoYnYvay9MaDlIUVFiMjJJMGN6dkJmeXZJQ0RGMW1KDQppS0g1TisvaVgvaUMyVy8vdEEzSGJRazhUaUVleC9GK3MxbFZMb3pibXhNVDJ1SkRuK1hRdGhVWXJwSkRhaWd5DQpSbkFvMjlrMEd3S0JnUURWVlUrVGh1NlA5RWI5Zk8vaWk1UWR0NVQzbmJzTEZyQ2hZbzBOS2xjZVR3ZGtuaFpsDQpuQXMrZDVsNGQ2b2dNYlR6YVlvcDd5aDRwRE5VV25aWlJnWnB6K0Q3SThQaWI3TjZXNUNDcjNuMGtUUm5hdGs2DQpUYnRqNFBkRkdHaTg2QVJVcFFOaDVGcTZnQk9lUm1zSUlqQ21vL3BSeWFhaE9OS2hKN0RWcy96QmJRS0JnUUNnDQp0S3ErWU5VaXYxZ1hkb2hKZ1JRejgzaEZ2QnBXdU1tZXpZeEJRQ2dFLzdIaURES2ZCdjRLMGxFalBHZ1E3bmgrDQpmcS9TL3crTEI1VzVhMUUyVEE3cXI4UUlZNkJEVHpMOWNkWi83SnNkeXhDYnU2dVpyMjE0N3IxbFdaMVNTZVZRDQpHU295OXIvNm9JUkM4Z1dsWTA2NUwzY3hldm03bWJ5bHJHbW9wZ2N1aHdLQmdIWEg2anJvSm1GOXozV1J4dENTDQorREhOVGVtK3cxem91bWRnL201RGtsU1RrNzBvWHlDTWZXRHdPeGw1U2tRUC9CNUMzYVhZMzJyTEt2eWw5bVZNDQpWQkxWNkJ2WXRRVWxZTXJlVHJCaUNpdGErTHpGUmM1Z3NhWEJldi9NZEhtTHdlaUp0bS9zNWpOT2U0RUx5TWoyDQpjcnZqTTFpMTZ6K2JtdDkyV0ZhWkRRZXoNCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KT0NJX0FQSV9LRVk=
  8. ---
  9. apiVersion: v1
  10. kind: ConfigMap
  11. metadata:
  12. name: rclone-config-oos
  13. data:
  14. rclone.conf: |
  15. [oos]
  16. type = oracleobjectstorage
  17. namespace = iddpv1jwk1nu
  18. region = us-ashburn-1
  19. compartment = ocid1.tenancy.oc1..aaaaaaaatqrfyvsvvwrz4p4y3fbaucueixpm6rg5r5ihpr2szat6cg2ek2aq
  20. provider = user_principal_auth
  21. config_file = /config/oci/config
  22. config_profile = DEFAULT
  23. oci.conf: |
  24. [DEFAULT]
  25. user=ocid1.user.oc1..aaaaaaaapeoqy5glmtljxh6bztwkbcrjk53ux7msfa6ifvxs2ygec364chha
  26. fingerprint=d6:06:e3:9c:59:ef:d6:ae:2a:21:6c:06:07:82:c4:70
  27. tenancy=ocid1.tenancy.oc1..aaaaaaaatqrfyvsvvwrz4p4y3fbaucueixpm6rg5r5ihpr2szat6cg2ek2aq
  28. region=us-ashburn-1
  29. key_file=/config/oci-keys/backups.pem
  30. ---
  31. apiVersion: batch/v1
  32. kind: CronJob
  33. metadata:
  34. name: backup-remote
  35. spec:
  36. schedule: "5 8 * * 0"
  37. jobTemplate:
  38. spec:
  39. template:
  40. spec:
  41. initContainers:
  42. - name: prepare-wrapper
  43. image: busybox
  44. command: ["/bin/sh", "-c"]
  45. args:
  46. - |
  47. cat > /shared/wrapper.sh << 'EOF'
  48. #!/bin/sh
  49. # Execute the original entrypoint with all arguments
  50. /usr/local/bin/rclone "$@"
  51. # Capture the exit code
  52. EXIT_CODE=$?
  53. echo $EXIT_CODE > /shared/exit-code
  54. echo "Exit code is $EXIT_CODE"
  55. exit $EXIT_CODE
  56. EOF
  57. chmod +x /shared/wrapper.sh
  58. volumeMounts:
  59. - name: shared-data
  60. mountPath: /shared
  61. containers:
  62. - name: rclone
  63. image: rclone/rclone:1.71
  64. command: ["/shared/wrapper.sh"]
  65. args: ["sync", "--verbose", "--verbose", "--cache-workers", "4", "--transfers", "4", "--retries", "32", "--oos-attempt-resume-upload", "--oos-leave-parts-on-error", "/data/repo", "oos:backup"]
  66. imagePullPolicy: IfNotPresent
  67. volumeMounts:
  68. - name: restic-repo-vol
  69. mountPath: /data/repo
  70. - name: rclone-conf-vol
  71. mountPath: /config/rclone
  72. - name: oci-conf-vol
  73. mountPath: /config/oci
  74. - name: oci-api-key-vol
  75. mountPath: /config/oci-keys
  76. - name: shared-data
  77. mountPath: /shared
  78. - name: notify
  79. image: curlimages/curl
  80. command: ["/bin/sh"]
  81. args:
  82. - -c
  83. - |
  84. while [ ! -f /shared/exit-code ]; do sleep 1; done
  85. AUTH_HEADER="Authorization: Bearer tk_up3glyzhhojl1w5lt32jq5vqjzdgb"
  86. URL="http://ntfy/backup"
  87. MESSAGE="Remote rclone restic repo backup"
  88. EXIT_CODE=$(cat /shared/exit-code)
  89. echo "Captured exit code is $EXIT_CODE"
  90. if [ "$EXIT_CODE" -eq 0 ]; then
  91. STATUS="was successful"
  92. else
  93. STATUS="FAILED"
  94. fi
  95. curl -X POST -H "$AUTH_HEADER" -d "${MESSAGE} ${STATUS}." "$URL"
  96. exit $EXIT_CODE
  97. volumeMounts:
  98. - name: shared-data
  99. mountPath: /shared
  100. volumes:
  101. - name: restic-repo-vol
  102. hostPath:
  103. path: /data/backup
  104. type: Directory
  105. - name: rclone-conf-vol
  106. configMap:
  107. name: rclone-config-oos
  108. items:
  109. - key: rclone.conf
  110. path: rclone.conf
  111. - name: oci-conf-vol
  112. configMap:
  113. name: rclone-config-oos
  114. items:
  115. - key: oci.conf
  116. path: config
  117. - name: oci-api-key-vol
  118. secret:
  119. secretName: rclone-remote-backup-api-key
  120. - name: shared-data
  121. emptyDir: {}
  122. restartPolicy: Never
  123. nodeSelector:
  124. kubernetes.io/hostname: raspberrypi4