SGBackup.yaml 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. apiVersion: apiextensions.k8s.io/v1
  2. kind: CustomResourceDefinition
  3. metadata:
  4. name: sgbackups.stackgres.io
  5. spec:
  6. group: stackgres.io
  7. scope: Namespaced
  8. names:
  9. kind: SGBackup
  10. listKind: SGBackupList
  11. plural: sgbackups
  12. singular: sgbackup
  13. shortNames:
  14. - sgbkp
  15. versions:
  16. - name: v1
  17. served: true
  18. storage: true
  19. additionalPrinterColumns:
  20. - name: cluster
  21. type: string
  22. jsonPath: .spec.sgCluster
  23. - name: managed
  24. type: string
  25. jsonPath: .spec.managedLifecycle
  26. - name: status
  27. type: string
  28. jsonPath: .status.process.status
  29. - name: pg-version
  30. type: string
  31. jsonPath: .status.backupInformation.postgresVersion
  32. priority: 1
  33. - name: compressed-size
  34. type: integer
  35. format: byte
  36. jsonPath: .status.backupInformation.size.compressed
  37. priority: 1
  38. - name: timeline
  39. type: string
  40. jsonPath: .status.backupInformation.timeline
  41. priority: 1
  42. schema:
  43. openAPIV3Schema:
  44. type: object
  45. required: [metadata, spec]
  46. description: |
  47. A manual or automatically generated backup of an SGCluster configured with backups.
  48. When a SGBackup is created a Job will perform a full backup of the database and update the status of the SGBackup
  49. with the all the information required to restore it and some stats (or a failure message in case something unexpected
  50. happened).
  51. Backup generated by SGBackup are stored in the object storage configured with an SGObjectStorage together with the WAL
  52. files or in a [VolumeSnapshot](https://kubernetes.io/docs/concepts/storage/volume-snapshots/) (separated from the WAL files that will be still stored in an object storage)
  53. depending on the backup configuration of the targeted SGCluster.
  54. After an SGBackup is created the same Job performs a reconciliation of the backups by applying the retention window
  55. that has been configured in the SGCluster and removing the backups with managed lifecycle and the WAL files older
  56. than the ones that fit in the retention window. The reconciliation also removes backups (excluding WAL files) that do
  57. not belongs to any SGBackup (including copies). If the target storage is changed deletion of an SGBackup backups with
  58. managed lifecycle and the WAL files older than the ones that fit in the retention window and of backups that do not
  59. belongs to any SGBackup will not be performed anymore on the previous storage, only on the new target storage.
  60. If the reconciliation of backups fails the backup itself do not fail and will be re-tried the next time a SGBackup
  61. or shecduled backup Job take place.
  62. properties:
  63. metadata:
  64. type: object
  65. properties:
  66. name:
  67. type: string
  68. maxLength: 56
  69. pattern: "^[a-z]([-a-z0-9]*[a-z0-9])?$"
  70. description: |
  71. Name of the backup. Following [Kubernetes naming conventions](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/identifiers.md), it must be an rfc1035/rfc1123 subdomain, that is, up to 253 characters consisting of one or more lowercase labels separated by `.`. Where each label is an alphanumeric (a-z, and 0-9) string, with the `-` character allowed anywhere except the first or last character.
  72. The name must be unique across all StackGres backups in the same namespace.
  73. spec:
  74. type: object
  75. properties:
  76. sgCluster:
  77. type: string
  78. description: |
  79. The name of the `SGCluster` from which this backup is/will be taken.
  80. If this is a copy of an existing completed backup in a different namespace
  81. the value must be prefixed with the namespace of the source backup and a
  82. dot `.` (e.g. `<cluster namespace>.<cluster name>`) or have the same value
  83. if the source backup is also a copy.
  84. managedLifecycle:
  85. type: boolean
  86. description: |
  87. Indicate if this backup is not permanent and should be removed by the automated
  88. retention policy. Default is `false`.
  89. timeout:
  90. type: integer
  91. description: |
  92. Allow to set a timeout for the backup creation.
  93. If not set it will be disabled and the backup operation will continue until the backup completes or fail. If set to 0 is the same as not being set.
  94. Make sure to set a reasonable high value in order to allow for any unexpected delays during backup creation (network low bandwidth, disk low throughput and so forth).
  95. reconciliationTimeout:
  96. type: integer
  97. default: 300
  98. description: |
  99. Allow to set a timeout for the reconciliation process that take place after the backup.
  100. If not set defaults to 300 (5 minutes). If set to 0 it will disable timeout.
  101. Failure of reconciliation will not make the backup fail and will be re-tried the next time a SGBackup
  102. or shecduled backup Job take place.
  103. maxRetries:
  104. type: integer
  105. description: |
  106. The maximum number of retries the backup operation is allowed to do after a failure.
  107. A value of `0` (zero) means no retries are made. Defaults to: `3`.
  108. status:
  109. type: object
  110. properties:
  111. internalName:
  112. type: string
  113. description: |
  114. The name of the backup.
  115. backupPath:
  116. type: string
  117. description: |
  118. The path were the backup is stored.
  119. process:
  120. type: object
  121. properties:
  122. status:
  123. type: string
  124. description: |
  125. Status of the backup.
  126. failure:
  127. type: string
  128. description: |
  129. If the status is `failed` this field will contain a message indicating the failure reason.
  130. jobPod:
  131. type: string
  132. description: |
  133. Name of the pod assigned to the backup. StackGres utilizes internally a locking mechanism based on the pod name of the job that creates the backup.
  134. managedLifecycle:
  135. type: boolean
  136. description: |
  137. Status (may be transient) until converging to `spec.managedLifecycle`.
  138. timing:
  139. type: object
  140. properties:
  141. start:
  142. type: string
  143. # format: date-time
  144. description: |
  145. Start time of backup.
  146. end:
  147. type: string
  148. # format: date-time
  149. description: |
  150. End time of backup.
  151. stored:
  152. type: string
  153. # format: date-time
  154. description: |
  155. Time at which the backup is safely stored in the object storage.
  156. backupInformation:
  157. type: object
  158. properties:
  159. hostname:
  160. type: string
  161. description: |
  162. Hostname of the instance where the backup is taken from.
  163. sourcePod:
  164. type: string
  165. description: |
  166. Pod where the backup is taken from.
  167. systemIdentifier:
  168. type: string
  169. description: |
  170. Postgres *system identifier* of the cluster this backup is taken from.
  171. postgresVersion:
  172. type: string
  173. description: |
  174. Postgres version of the server where the backup is taken from.
  175. pgData:
  176. type: string
  177. description: |
  178. Data directory where the backup is taken from.
  179. size:
  180. type: object
  181. properties:
  182. uncompressed:
  183. type: integer
  184. format: int64
  185. description: |
  186. Size (in bytes) of the uncompressed backup.
  187. compressed:
  188. type: integer
  189. format: int64
  190. description: |
  191. Size (in bytes) of the compressed backup.
  192. lsn:
  193. type: object
  194. properties:
  195. start:
  196. type: string
  197. description: |
  198. LSN of when the backup started.
  199. end:
  200. type: string
  201. description: |
  202. LSN of when the backup finished.
  203. startWalFile:
  204. type: string
  205. description: |
  206. WAL segment file name when the backup was started.
  207. timeline:
  208. type: string
  209. description: |
  210. Backup timeline.
  211. controlData:
  212. type: object
  213. description: |
  214. An object containing data from the output of pg_controldata on the backup.
  215. properties:
  216. pg_control version number:
  217. type: string
  218. Catalog version number:
  219. type: string
  220. Database system identifier:
  221. type: string
  222. Database cluster state:
  223. type: string
  224. pg_control last modified:
  225. type: string
  226. Latest checkpoint location:
  227. type: string
  228. Latest checkpoint's REDO location:
  229. type: string
  230. Latest checkpoint's REDO WAL file:
  231. type: string
  232. Latest checkpoint's TimeLineID:
  233. type: string
  234. Latest checkpoint's PrevTimeLineID:
  235. type: string
  236. Latest checkpoint's full_page_writes:
  237. type: string
  238. Latest checkpoint's NextXID:
  239. type: string
  240. Latest checkpoint's NextOID:
  241. type: string
  242. Latest checkpoint's NextMultiXactId:
  243. type: string
  244. Latest checkpoint's NextMultiOffset:
  245. type: string
  246. Latest checkpoint's oldestXID:
  247. type: string
  248. Latest checkpoint's oldestXID's DB:
  249. type: string
  250. Latest checkpoint's oldestActiveXID:
  251. type: string
  252. Latest checkpoint's oldestMultiXid:
  253. type: string
  254. Latest checkpoint's oldestMulti's DB:
  255. type: string
  256. "Latest checkpoint's oldestCommitTsXid":
  257. type: string
  258. "Latest checkpoint's newestCommitTsXid":
  259. type: string
  260. Time of latest checkpoint:
  261. type: string
  262. Fake LSN counter for unlogged rels:
  263. type: string
  264. Minimum recovery ending location:
  265. type: string
  266. Min recovery ending loc's timeline:
  267. type: string
  268. Backup start location:
  269. type: string
  270. Backup end location:
  271. type: string
  272. End-of-backup record required:
  273. type: string
  274. wal_level setting:
  275. type: string
  276. wal_log_hints setting:
  277. type: string
  278. max_connections setting:
  279. type: string
  280. max_worker_processes setting:
  281. type: string
  282. max_wal_senders setting:
  283. type: string
  284. max_prepared_xacts setting:
  285. type: string
  286. max_locks_per_xact setting:
  287. type: string
  288. track_commit_timestamp setting:
  289. type: string
  290. Maximum data alignment:
  291. type: string
  292. Database block size:
  293. type: string
  294. Blocks per segment of large relation:
  295. type: string
  296. WAL block size:
  297. type: string
  298. Bytes per WAL segment:
  299. type: string
  300. Maximum length of identifiers:
  301. type: string
  302. Maximum columns in an index:
  303. type: string
  304. Maximum size of a TOAST chunk:
  305. type: string
  306. Size of a large-object chunk:
  307. type: string
  308. Date/time type storage:
  309. type: string
  310. Float4 argument passing:
  311. type: string
  312. Float8 argument passing:
  313. type: string
  314. Data page checksum version:
  315. type: string
  316. Mock authentication nonce:
  317. type: string
  318. sgBackupConfig:
  319. type: object
  320. description: The backup configuration used to perform this backup.
  321. properties:
  322. baseBackups:
  323. type: object
  324. description: |
  325. Back backups configuration.
  326. properties:
  327. cronSchedule:
  328. type: string
  329. description: |
  330. Continuous Archiving backups are composed of periodic *base backups* and all the WAL segments produced in between those base backups. This parameter specifies at what time and with what frequency to start performing a new base backup.
  331. Use cron syntax (`m h dom mon dow`) for this parameter, i.e., 5 values separated by spaces:
  332. * `m`: minute, 0 to 59
  333. * `h`: hour, 0 to 23
  334. * `dom`: day of month, 1 to 31 (recommended not to set it higher than 28)
  335. * `mon`: month, 1 to 12
  336. * `dow`: day of week, 0 to 7 (0 and 7 both represent Sunday)
  337. Also ranges of values (`start-end`), the symbol `*` (meaning `first-last`) or even `*/N`, where `N` is a number, meaning every `N`, may be used. All times are UTC. It is recommended to avoid 00:00 as base backup time, to avoid overlapping with any other external operations happening at this time.
  338. retention:
  339. type: integer
  340. minimum: 1
  341. description: |
  342. Based on this parameter, an automatic retention policy is defined to delete old base backups.
  343. This parameter specifies the number of base backups to keep, in a sliding window.
  344. Consequently, the time range covered by backups is `periodicity*retention`, where `periodicity` is the separation between backups as specified by the `cronSchedule` property.
  345. Default is 5.
  346. compression:
  347. type: string
  348. description: |
  349. Select the backup compression algorithm. Possible options are: lz4, lzma, brotli. The default method is `lz4`. LZ4 is the fastest method, but compression ratio is the worst. LZMA is way slower, but it compresses backups about 6 times better than LZ4. Brotli is a good trade-off between speed and compression ratio, being about 3 times better than LZ4.
  350. enum: [ lz4, lzma, brotli ]
  351. performance:
  352. type: object
  353. properties:
  354. maxNetworkBandwitdh:
  355. type: integer
  356. description: |
  357. **Deprecated**: use instead maxNetworkBandwidth.
  358. Maximum storage upload bandwidth to be used when storing the backup. In bytes (per second).
  359. maxDiskBandwitdh:
  360. type: integer
  361. description: |
  362. **Deprecated**: use instead maxDiskBandwidth.
  363. Maximum disk read I/O when performing a backup. In bytes (per second).
  364. maxNetworkBandwidth:
  365. type: integer
  366. description: |
  367. Maximum storage upload bandwidth to be used when storing the backup. In bytes (per second).
  368. maxDiskBandwidth:
  369. type: integer
  370. description: |
  371. Maximum disk read I/O when performing a backup. In bytes (per second).
  372. uploadDiskConcurrency:
  373. type: integer
  374. minimum: 1
  375. description: |
  376. Backup storage may use several concurrent streams to store the data. This parameter configures the number of parallel streams to use to reading from disk. By default, it's set to 1 (use one stream).
  377. uploadConcurrency:
  378. type: integer
  379. minimum: 1
  380. description: |
  381. Backup storage may use several concurrent streams to store the data. This parameter configures the number of parallel streams to use. By default, it's set to 1 (use one stream).
  382. compression:
  383. type: string
  384. description: |
  385. Select the backup compression algorithm. Possible options are: lz4, lzma, brotli. The default method is `lz4`. LZ4 is the fastest method, but compression ratio is the worst. LZMA is way slower, but it compresses backups about 6 times better than LZ4. Brotli is a good trade-off between speed and compression ratio, being about 3 times better than LZ4.
  386. enum: [lz4, lzma, brotli]
  387. storage:
  388. type: object
  389. description: |
  390. Backup storage configuration.
  391. properties:
  392. type:
  393. type: string
  394. enum: [s3, s3Compatible, gcs, azureBlob]
  395. description: |
  396. Specifies the type of object storage used for storing the base backups and WAL segments.
  397. Possible values:
  398. * `s3`: Amazon Web Services S3 (Simple Storage Service).
  399. * `s3Compatible`: non-AWS services that implement a compatibility API with AWS S3.
  400. * `gcs`: Google Cloud Storage.
  401. * `azureBlob`: Microsoft Azure Blob Storage.
  402. s3:
  403. type: object
  404. description: |
  405. Amazon Web Services S3 configuration.
  406. properties:
  407. bucket:
  408. type: string
  409. pattern: ^[^/]+(/[^/]*)*$
  410. description: |
  411. AWS S3 bucket name.
  412. path:
  413. type: string
  414. pattern: ^(/[^/]*)*$
  415. description: |
  416. Optional path within the S3 bucket. Note that StackGres generates in any case a folder per
  417. StackGres cluster, using the `SGCluster.metadata.name`.
  418. region:
  419. type: string
  420. description: |
  421. AWS S3 region. The Region may be detected using s3:GetBucketLocation, but to avoid giving permissions to this API call or forbid it from the applicable IAM policy, this property must be explicitely specified.
  422. storageClass:
  423. type: string
  424. description: |
  425. [Amazon S3 Storage Class](https://aws.amazon.com/s3/storage-classes/) used for the backup object storage. By default, the `STANDARD` storage class is used. Other supported values include `STANDARD_IA` for Infrequent Access and `REDUCED_REDUNDANCY`.
  426. awsCredentials:
  427. type: object
  428. description: |
  429. Credentials to access AWS S3 for writing and reading.
  430. properties:
  431. secretKeySelectors:
  432. type: object
  433. description: |
  434. Kubernetes [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core)s to reference the Secrets that contain the information about the `awsCredentials`.
  435. properties:
  436. accessKeyId:
  437. type: object
  438. description: |
  439. [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core) containing the AWS Access Key ID secret.
  440. properties:
  441. key:
  442. type: string
  443. description: |
  444. The key of the secret to select from. Must be a valid secret key.
  445. name:
  446. type: string
  447. description: |
  448. Name of the referent. [More information](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
  449. required: [key, name]
  450. secretAccessKey:
  451. type: object
  452. description: |
  453. [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core) containing the AWS Secret Access Key secret.
  454. properties:
  455. key:
  456. type: string
  457. description: |
  458. The key of the secret to select from. Must be a valid secret key.
  459. name:
  460. type: string
  461. description: |
  462. Name of the referent. [More information](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
  463. required: [key, name]
  464. required: [accessKeyId, secretAccessKey]
  465. required: [secretKeySelectors]
  466. required: [bucket, awsCredentials]
  467. s3Compatible:
  468. type: object
  469. description: AWS S3-Compatible API configuration
  470. properties:
  471. bucket:
  472. type: string
  473. pattern: ^[^/]+(/[^/]*)*$
  474. description: |
  475. Bucket name.
  476. path:
  477. type: string
  478. pattern: ^(/[^/]*)*$
  479. description: |
  480. Optional path within the S3 bucket. Note that StackGres generates in any case a folder per StackGres cluster, using the `SGCluster.metadata.name`.
  481. enablePathStyleAddressing:
  482. type: boolean
  483. description: |
  484. Enable path-style addressing (i.e. `http://s3.amazonaws.com/BUCKET/KEY`) when connecting to an S3-compatible service that lacks support for sub-domain style bucket URLs (i.e. `http://BUCKET.s3.amazonaws.com/KEY`). Defaults to false.
  485. endpoint:
  486. type: string
  487. description: |
  488. Overrides the default url to connect to an S3-compatible service.
  489. For example: `http://s3-like-service:9000`.
  490. region:
  491. type: string
  492. description: |
  493. AWS S3 region. The Region may be detected using s3:GetBucketLocation, but to avoid giving permissions to this API call or forbid it from the applicable IAM policy, this property must be explicitely specified.
  494. storageClass:
  495. type: string
  496. description: |
  497. [Amazon S3 Storage Class](https://aws.amazon.com/s3/storage-classes/) used for the backup object storage. By default, the `STANDARD` storage class is used. Other supported values include `STANDARD_IA` for Infrequent Access and `REDUCED_REDUNDANCY`.
  498. awsCredentials:
  499. type: object
  500. description: |
  501. Credentials to access AWS S3 for writing and reading.
  502. properties:
  503. secretKeySelectors:
  504. type: object
  505. description: |
  506. A Kubernetes [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core) to reference the Secrets that contain the information about the `awsCredentials`.
  507. properties:
  508. accessKeyId:
  509. type: object
  510. description: |
  511. [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core) containing the AWS Access Key ID secret.
  512. properties:
  513. key:
  514. type: string
  515. description: |
  516. The key of the secret to select from. Must be a valid secret key.
  517. name:
  518. type: string
  519. description: |
  520. Name of the referent. [More information](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
  521. required: [key, name]
  522. secretAccessKey:
  523. type: object
  524. description: |
  525. [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core) containing the AWS Secret Access Key secret.
  526. properties:
  527. key:
  528. type: string
  529. description: |
  530. The key of the secret to select from. Must be a valid secret key.
  531. name:
  532. type: string
  533. description: |
  534. Name of the referent. [More information](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
  535. required: [key, name]
  536. required: [accessKeyId, secretAccessKey]
  537. required: [secretKeySelectors]
  538. required: [bucket, awsCredentials]
  539. gcs:
  540. type: object
  541. description: |
  542. Google Cloud Storage configuration.
  543. properties:
  544. bucket:
  545. type: string
  546. pattern: ^[^/]+(/[^/]*)*$
  547. description: |
  548. GCS bucket name.
  549. path:
  550. type: string
  551. pattern: ^(/[^/]*)*$
  552. description: |
  553. Optional path within the GCS bucket. Note that StackGres generates in any case a folder per StackGres cluster, using the `SGCluster.metadata.name`.
  554. gcpCredentials:
  555. type: object
  556. description: |
  557. Credentials to access GCS for writing and reading.
  558. properties:
  559. fetchCredentialsFromMetadataService:
  560. type: boolean
  561. description: |
  562. If true, the credentials will be fetched from the GCE/GKE metadata service and the credentials from `secretKeySelectors` field will not be used.
  563. This is useful when running StackGres inside a GKE cluster using [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity).
  564. secretKeySelectors:
  565. type: object
  566. description: |
  567. A Kubernetes [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core) to reference the Secrets that contain the information about the Service Account to access GCS.
  568. properties:
  569. serviceAccountJSON:
  570. type: object
  571. description: |
  572. A service account key from GCP. In JSON format, as downloaded from the GCP Console.
  573. properties:
  574. key:
  575. type: string
  576. description: |
  577. The key of the secret to select from. Must be a valid secret key.
  578. name:
  579. type: string
  580. description: |
  581. Name of the referent. [More information](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
  582. required: [key, name]
  583. required: [serviceAccountJSON]
  584. required: [bucket, gcpCredentials]
  585. azureBlob:
  586. type: object
  587. description: |
  588. Azure Blob Storage configuration.
  589. properties:
  590. bucket:
  591. type: string
  592. pattern: ^[^/]+(/[^/]*)*$
  593. description: |
  594. Azure Blob Storage bucket name.
  595. path:
  596. type: string
  597. pattern: ^(/[^/]*)*$
  598. description: |
  599. Optional path within the Azure Blobk bucket. Note that StackGres generates in any case a folder per StackGres cluster, using the `SGCluster.metadata.name`.
  600. azureCredentials:
  601. type: object
  602. description: |
  603. Credentials to access Azure Blob Storage for writing and reading.
  604. properties:
  605. secretKeySelectors:
  606. type: object
  607. description: |
  608. Kubernetes [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core)s to reference the Secrets that contain the information about the `azureCredentials`.
  609. properties:
  610. storageAccount:
  611. type: object
  612. description: |
  613. [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core) containing the name of the storage account.
  614. properties:
  615. key:
  616. type: string
  617. description: |
  618. The key of the secret to select from. Must be a valid secret key.
  619. name:
  620. type: string
  621. description: |
  622. Name of the referent. [More information](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
  623. required: [key, name]
  624. accessKey:
  625. type: object
  626. description: |
  627. [SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretkeyselector-v1-core) containing the primary or secondary access key for the storage account.
  628. properties:
  629. key:
  630. type: string
  631. description: |
  632. The key of the secret to select from. Must be a valid secret key.
  633. name:
  634. type: string
  635. description: |
  636. Name of the referent. [More information](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
  637. required: [key, name]
  638. required: [storageAccount, accessKey]
  639. required: [bucket, azureCredentials]
  640. required: [type]
  641. required: [storage]
  642. volumeSnapshot:
  643. type: object
  644. description: The volume snapshot configuration used to restore this backup.
  645. properties:
  646. name:
  647. type: string
  648. description: |
  649. The volume snapshot used to store this backup.
  650. backupLabel:
  651. type: string
  652. description: |
  653. The content of `backup_label` column returned by `pg_backup_stop` encoded in Base64
  654. tablespaceMap:
  655. type: string
  656. description: |
  657. The content of `tablespace_map` column returned by `pg_backup_stop` encoded in Base64