Kubernetes: запуск aws s3 sync/rsync для постоянного тома по требованию

Kubernetes: запуск aws s3 sync/rsync для постоянного тома по требованию

Есть ли в Kubernetes способ запустить задание в моих контейнерах по требованию?

Вариант использования — возможность синхронизации контейнеров из S3 в постоянный том по требованию. В текущей архитектуре приложения новый контент добавляется в S3 и синхронизируется с группой серверов, которые управляются с помощью Chef. Мне нужно, чтобы команда могла запускать эту функцию в контейнерах, работающих на Kubernetes.

решение1

На самом деле Kubernetes представляет собой гибкий механизм для автоматизированных рабочих нагрузок, таких как одноразовые процессы.Работаи периодические процессы, такие какCronJobs, которые включены в batch/v1объект API Kubernetesмодель, поэтому решение от @Tim для меня вполне приемлемо.

Я предполагаю, что вы могли бы развернуть какой-нибудь модуль с помощью aws-cliплаты, чтобы запустить синхронное действие между сопоставленнымиПВХв этот контейнер и целевой S3-хранилище. Для этой цели вы можете создать собственный образ, портированный с необходимым бинарным кодом, или использовать готовое решение, например docker-kubectl-awscliобраз, поддерживаемый@Эксперт360.

Следующее задание выполнит aws s3 syncкоманду внутри определенного контейнера и запустит действие синхронизации между целевыми сторонами:

apiVersion: batch/v1
kind: Job
metadata:
  name: backup-s3
spec:
  template:
    spec:
      containers:
      - name: kubectl-aws
        image: expert360/kubectl-awscli:v1.11.2
        env:
        - name: AWS_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              name: aws-s3-key
              key: aws-access-key-id
        - name: AWS_SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              name: aws-s3-access-key
              key: aws-secret-access-key
        command: [ "/bin/bash", "-c", "aws s3 sync s3://my-bucket/ /data/backup" ]
        volumeMounts:
            - name: backup-aws
              mountPath: /data/backup
      volumes:
        - name: backup-aws
          persistentVolumeClaim:
            claimName: backup-aws-claim
      restartPolicy: Never

Вам необходимо предоставить aws-cliсоответствующие переменные AWS_ACCESS_KEY_IDи AWS_SECRET_ACCESS_KEYпеременные окружения, хранящиеся в определенном Kubernetes.Секретобъекты.

решение2

Взгляните на проект:https://github.com/nuvo/skbn. Он также может использовать функциональные возможности kube2iam.

Связанный контент