Загрузка данных
# etcd-backup-configuration
Набор опций, которые можно задать в `values.yaml` для генерации `EtcdBackupConfiguration`.
## Базовые параметры
```yaml
crd:
apiVersion: "enhancement.cluster.alauda.io/v1"
kind: "EtcdBackupConfiguration"
metadata:
name: "etcd-backup-default"
labels: {}
annotations: {}
```
### `crd.apiVersion`
Версия API CRD.
### `crd.kind`
Тип ресурса. Для этого чартa обычно `EtcdBackupConfiguration`.
### `metadata.name`
Имя объекта `EtcdBackupConfiguration`.
### `metadata.labels`
Дополнительные метки для объекта.
### `metadata.annotations`
Дополнительные аннотации.
## Kyverno
Чарт может создать Kyverno `ClusterPolicy`, которая преобразует Secret,
созданный OBC, из полей `AWS_ACCESS_KEY_ID` и `AWS_SECRET_ACCESS_KEY` в
поля `ACCESS_KEY` и `SECRET_KEY`, требуемые `EtcdBackupConfiguration`.
```yaml
kyverno:
enabled: true
sourceSecretName: obcb-idp-global-storage-etcdbackup
targetSecretName: obcb-idp-global-storage-etcdbackup-retyped
namespace: cpaas-system
```
### `kyverno.enabled`
Включает или отключает создание Kyverno-ресурсов.
### `kyverno.sourceSecretName`
Имя исходного Secret, который создаёт OBC.
### `kyverno.targetSecretName`
Имя нового Secret с полями `ACCESS_KEY` и `SECRET_KEY`.
### `kyverno.namespace`
Namespace, в котором находится исходный Secret OBC и создаётся новый Secret.
## ObjectBucketClaim
Сабчарт `charts/objectbucketclaim` создаёт `ObjectBucketClaim` и получает
настройки из родительского `values.yaml`:
```yaml
objectbucketclaim:
enabled: true
name: etcd-backup-obc
namespace: cpaas-system
bucketName: etcd-backup-bucket
storageClassName: ceph-rgw
```
### `objectbucketclaim.enabled`
Включает или отключает создание `ObjectBucketClaim`.
### `objectbucketclaim.name`
Имя ресурса `ObjectBucketClaim`.
### `objectbucketclaim.namespace`
Namespace, в котором создаётся `ObjectBucketClaim`.
### `objectbucketclaim.bucketName`
Фиксированное имя бакета. Если задано одновременно с
`objectbucketclaim.generateBucketName`, используется `bucketName`.
Это же имя нужно указать в `spec.remoteStorage.s3.bucket`.
### `objectbucketclaim.generateBucketName`
Альтернативный вариант: префикс для автоматически сгенерированного имени.
Используется только если `bucketName` не задан.
### `objectbucketclaim.storageClassName`
Имя StorageClass/BucketClass, настроенного для Rook Ceph object storage.
## Порядок синхронизации Argo CD
Ресурсы используют sync waves:
1. Wave `0` — Kyverno `ClusterPolicy` и `ClusterRole`.
2. Wave `10` — `ObjectBucketClaim` из сабчарта.
3. Wave `20` — `EtcdBackupConfiguration`.
Argo CD применяет следующую волну после успешного применения предыдущей.
При этом создание Secret самим OBC происходит асинхронно. Kyverno
должен создать совместимый Secret после появления исходного OBC Secret.
## Поля `spec`
```yaml
spec:
schedule: "0 0 * * *"
paused: false
```
### `spec.schedule`
Cron-расписание бэкапа.
Примеры:
- `"0 0 * * *"` — каждый день в 00:00
- `"*/5 * * * *"` — каждые 5 минут
### `spec.paused`
Остановить или включить выполнение бэкапов:
- `false` — включено
- `true` — приостановлено
## Локальное хранилище
```yaml
localStorage:
path: "/mnt/etcd-backup"
ttl: "7776000"
```
### `spec.localStorage.path`
Путь к локальному каталогу для хранения бэкапа на диске.
### `spec.localStorage.ttl`
TTL для локального хранения, обычно в секундах.
## S3/remoteStorage
```yaml
remoteStorage:
s3:
endpoint: "https://s3.example.com"
region: "us-east-1"
bucket: "etcd-backup-bucket"
dir: "backups"
skipTLSVerify: false
secretRef: etcd-backup-s3-secret
```
### `spec.remoteStorage.s3.endpoint`
Адрес S3 endpoint.
### `spec.remoteStorage.s3.region`
Регион S3-хранилища.
### `spec.remoteStorage.s3.bucket`
Имя бакета.
### `spec.remoteStorage.s3.dir`
Папка внутри бакета, куда сохраняются бэкапы.
### `spec.remoteStorage.s3.skipTLSVerify`
Включать ли проверку TLS сертификата:
- `false` — обычная проверка
- `true` — для self-signed сертификатов
### `spec.remoteStorage.s3.secretRef`
Имя Kubernetes Secret, в котором лежат ключи доступа к S3.
Обычно ожидаются поля вида `ACCESS_KEY` и `SECRET_KEY`.
## Дополнительно
### `domain`
Это не поле самого CRD, а пользовательская переменная.
Пример:
```yaml
domain: "example.com"
```
## Полный пример
```yaml
crd:
apiVersion: "enhancement.cluster.alauda.io/v1"
kind: "EtcdBackupConfiguration"
metadata:
name: "etcd-backup-default"
labels: {}
annotations: {}
domain: "example.com"
spec:
schedule: "0 0 * * *"
paused: false
remoteStorage:
s3:
endpoint: "https://s3.example.com"
region: "us-east-1"
bucket: "etcd-backup-bucket"
dir: "backups"
skipTLSVerify: false
secretRef: etcd-backup-s3-secret
```