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

от автора

В этом гайде мы рассмотрим 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 

Как видно идея в том, что мы добавляем sitecar контейнер с 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 — то просто скачиваем файлики, если нет — то аналогично подключаем sitecar контейнер с тем-же buildpack-deps.

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

Второй способ более гибкий, так как можно передавать большое количество файлов с помощью scp или rsync или в целом получить ssh доступ. Тут подключаем sitecar контейнер с 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 также просто с помощью sitecar контейнера.

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

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

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


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

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

Контакты

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


ссылка на оригинал статьи https://habr.com/ru/articles/929886/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *