Как стать автором
Поиск
Написать публикацию
Обновить
36.95
Tuna
Dev-Team-Sec-Ops, сервисы для разработчиков

Как перенести данные Persistent Volume из одного Kubernetes кластера в другой с помощью Tuna

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.1K

В этом гайде мы рассмотрим 2 способа как легко перенести данные в Persistent Volume из одного Kubernetes кластера в другой без сложных манипуляций и промежуточных скачиваний с помощью Tuna туннелей. Гайд подойдет для любых типов данных, это может быть Wordpress приложение или каталог с картинками, бэкапами, в общем что угодно.

Копирование через HTTP по pull модели

Этот способ больше подходит если у вас не очень много больших файлов. Для примера я создал вот такое простое приложение.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: tuna-example-from
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tuna-example-from
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tuna-example-from
  template:
    metadata:
      labels:
        app: tuna-example-from
    spec:
      containers:
        - name: buildpack-from
          image: buildpack-deps:latest
          command: ["sleep"]
          args: ["infinity"]
          volumeMounts:
            - name: data-volume
              mountPath: /data
        - name: tuna-example-from
          image: yuccastream/tuna:latest
          command: ["tuna"]
          args: ["http", "-f", "/data"]
          env:
            - name: TUNA_TOKEN
              value: "tt_***"
          volumeMounts:
            - name: data-volume
              mountPath: /data
      volumes:
        - name: data-volume
          persistentVolumeClaim:
            claimName: tuna-example-from

Как видно идея в том, что мы добавляем sidecar контейнер с tuna и монтируем в него тот же каталог, а затем запускаем файл сервер. После запуска в логах контейнера tuna-example-from вы увидите ссылку на скачивание, а также её можно посмотреть в личном кабинете.

INFO[07:36:54] Welcome to Tuna
INFO[07:36:54] Forwarding https://6llv70-tuna-dev.ru.tuna.am -> fs:///data

В кластере назначения разворачиваем аналогичное приложение и если в образе есть curl илиwget — то просто скачиваем файлики, если нет — то аналогично подключаем sidecar контейнер с тем-же buildpack-deps.

Копирование через SSH по push модели

Второй способ более гибкий, так как можно передавать большое количество файлов с помощью scp или rsync или в целом получить ssh доступ. Тут подключаем sidecar контейнер с tuna и монтируем в него тот же каталог но уже в кластере назначения.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: tuna-example-to
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tuna-example-to
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tuna-example-to
  template:
    metadata:
      labels:
        app: tuna-example-to
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          volumeMounts:
            - name: data-volume
              mountPath: /data
        - name: tuna-example-to
          image: yuccastream/tuna:latest
          command: ["tuna"]
          args: ["ssh"]
          env:
            - name: TUNA_TOKEN
              value: "tt_***"
          volumeMounts:
            - name: data-volume
              mountPath: /data
      volumes:
        - name: data-volume
          persistentVolumeClaim:
            claimName: tuna-example-to

После запуска в логах контейнера tuna-example-to вы увидите хост, порт и пароль (если вы не доверяете паролям, можно подключаться по ключу) для подключения по ssh.

INFO[07:58:51] Welcome to Tuna
INFO[07:58:52] Connection instruction:
INFO[07:58:52] 1. echo "[ru.tuna.am]:22728 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILBqySWPWwNp391U7WxnrJ0usiUsUA3mSRCsmEhWp4xU" >> ~/.ssh/known_hosts
INFO[07:58:52] 2. ssh -p 22728 ru.tuna.am
INFO[07:58:52] 3. ru.tuna.am's password: xxtwku6flilpy13d
INFO[07:58:52] Available for connection via keys for me and my team
INFO[07:58:52] Waiting for client connections...

В исходном кластере или вообще где угодно, где есть ssh-client запускаем копирование.

$ scp -P 22728 *.jpg ru.tuna.am:/data                                                                                                                                   
Warning: Permanently added '[ru.tuna.am]:22728' (ED25519) to the list of known hosts.
ahmed-cTPBm3vP5Xk-unsplash.jpg                                                                                                         100% 2893KB   5.4MB/s   00:00    
daniel-gomez-FCVMPabu16w-unsplash.jpg                                                                                                  100%  440KB   2.2MB/s   00:00    
david-clode-4RwSPLee_h4-unsplash.jpg                                                                                                   100% 1954KB   9.3MB/s   00:00    
francesco-ungaro-My9N8KrYGuI-unsplash.jpg                                                                                              100% 1565KB   7.7MB/s   00:00    
ingmar-Mk3AqH8hqGQ-unsplash.jpg                                                                                                        100% 7895KB  15.1MB/s   00:00    
octavian-rosca-e3OSaoc7EuE-unsplash.jpg                                                                                                100%  382KB   2.1MB/s   00:00    
pascal-debrunner-mhVlYssLoWE-unsplash.jpg                                                                                              100% 4222KB  10.9MB/s   00:00    

В логах tuna-example-to вы увидите это подключение.

INFO[08:00:27] Handling sFTP session                         user=jidckii
INFO[08:00:32] sFTP session closed                           user=jidckii

Очевидно наличие встроенного SSH сервера не ограничивает вас просто передачей файлов, можно подключиться, что-то поправить, переименовать или даже запустить скрипт.

Заключение

Справедливо заметить это лишь 1 кейс где Tuna может помочь вам в разработке или эксплуатации. Вы также можете:

  1. Публиковать приложения без Ingress также просто с помощью sidecar контейнера.

  2. Опубликовать доступ к TCP приложениям, например базы данных без создания LB, особенно актуально если ваш кластер не в облаке, а на Bare Metal.

  3. Опубликовать в Kubernetes по scp какие то классические/легаси приложения, например тот же Wordpress.

И это лишь краткий список кейсов, которые можно придумать.


На этом у меня всё, спасибо что дочитали до конца 🙂

Тут я хочу напомнить, что Tuna — это платформа для разработчиков и их команд, нацеленная на ускорение разработки, упрощение командного взаимодействия и безопасность.

Контакты

Если возникли вопросы, можете задать их нам по почте info@tuna.am, тут в коментариях или нашем чате в telegram.

Теги:
Хабы:
+4
Комментарии6

Публикации

Информация

Сайт
tuna.am
Дата регистрации
Дата основания
Численность
2–10 человек