Загрузка данных


# 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
```