Непрерывное развертывание Kubernetes с помощью Skaffold

Kate

Administrator
Команда форума
Общая картина DevOps (CI + CD / CD?)

Непрерывная интеграция + непрерывная доставка / непрерывное развертывание

В то время как традиционные магазины с большой архитектурой в основном используют CI / Continuous Delivery, некоторые передовые компании в значительной степени полагаются на CI / Continuous Deployments, а некоторые компании используют и то, и другое. Atlassian отлично объясняет эти концепции, и их изображение стоит тысячи слов, которые я пропущу.


Image for post

Figure 1 Continuous Delivery vs. Continuous Deployment

Read more: https://www.atlassian.com/continuou...tinuous-integration-vs-delivery-vs-deployment

Skaffold

Проще говоря, Skaffold - это утилита командной строки, которая упрощает непрерывную разработку (scaffold dev) для приложений, родных для Kubernetes. Конечно, вы можете просто использовать его для реализации конвейеров CI / Continuous Delivery (запуск скаффолда).
Skaffold довольно прост в использовании после некоторой начальной настройки. Вы можете запустить команду scaffold dev в терминале и заняться своими делами разработчика. С каждым изменением локального исходного кода Skaffold начинает действовать и создает, тестирует, маркирует, отправляет, развертывает и отслеживает артефакты, а также может очистить все с помощью команды scaffold delete. Похоже, много полезных функций. Вот рабочий процесс, описанный командой Skaffold:

Image for post

Figure 2 Skaffold Workflow and Architecture (Skaffold)

Вы можете выбрать, какой из этих этапов хотите реализовать; вам не обязательно иметь их все, вы можете адаптировать скаффолд по своему усмотрению, чтобы наилучшим образом использовать его для вашего конкретного случая использования.

Read More: https://skaffold.dev/docs/

Developer Setup​

Разработка локальных машин не умерла, даже если речь идет о Kubernetes. У среды Kubernetes есть преимущества, в которых вы можете разрабатывать и тестировать свои микросервисы без внешних зависимостей и без затрат на локальную или облачную инфраструктуру.
Локальный запуск Docker-desktop, Minikube или полномасштабного кластера Kubernetes может ускорить разработку и начальное базовое тестирование. Кроме того, Skaffold - отличный инструмент, который может обеспечить столь необходимое непрерывное развертывание.
Бывают ситуации, когда вам необходимо развернуть и интегрировать во внешний кластер Kubernetes: возможно, тяжелые зависимости (например, AWS RDS), ограничения безопасности или сложные или гибридные архитектуры, которые нельзя реплицировать локально. Пока ваш kubectl настроен так, чтобы указывать на внешний кластер k8s, ничего в сценарии использования скаффолда не меняется.

Getting Started with Skaffold​

Предположения: у вас уже есть доступ к кластеру Kuberntes через kubectl. Либо локальный кластер k8, просто Docker-Desktopo, Minikube или другие реализации k 8s (Ubuntu, Rancher и т. Д.), Либо удаленный кластер.
Skaffold работает в Linux, MacOS, Windows или может работать в контейнере Docker. Я буду следить за установкой MacOS, но вот документация для всех:
https://skaffold.dev/docs/install/

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \

sudo install skaffold /usr/local/bin/

Самый быстрый способ начать - использовать один из примеров Skaffold; здесь много: https://github.com/GoogleContainerTools/skaffold/tree/master/examples/nodejs

Для этого поста я создал репо, содержащее только исходный код, Dockerfile и манифесты K8s, чтобы упростить этот пример. Клонируйте это локально:
git clone https://github.com/gboie/node-sample-skaffold.git

Обратите внимание, что, в отличие от таких инструментов, как Draft, которые могут их автоматически создавать, вам нужно будет создать свой файл Dockerfile и манифесты k8s. В данном случае они уже есть, но об этом нужно помнить. Однако следующая команда сгенерирует базовый код конвейера Skaffold после быстрого сканирования вашего каталога.

skaffold init

Был создан новый файл skaffold.yaml, представляющий определение конвейера Skaffold; вот как это выглядит для нашего примера:
Image for post


Это довольно простой пример; Короче говоря, он создает Dockerfile и развертывает файл манифеста k8s. Для расширенной настройки и реализации дополнительных этапов см .:
https://skaffold.dev/docs/design/config/

Как только вы запустите scaffold dev из корневого каталога (nodejs):

Image for post



Из выходных данных выше видно, что создается новый образ докера, маркируется и затем развертывается в моем локальном кластере k8s (в данном случае Docker-Desktop).
Чтобы определить порт нашей недавно развернутой службы k8s, запустите:
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d23h
node NodePort 10.97.40.113 <none> 3000:30695/TCP 22s

Для проверки ваше приложение откройте браузер по адресу
http://localhost:30695

Все идет нормально! Теперь посмотрим, как работает непрерывное развертывание ...
Измените исходный код, т.е. измените backend / src / index.js, и вы увидите CD в движении ... Я изменил «World» на «Gabriel» в этом файле, и, как только вы сохраните изменения, Skaffold сработает. новое задание сборки / тега / развертывания, и вы можете увидеть…

Image for post



И в браузере:

Чтобы удалить модуль / развертывание / службу из кластера kubernetes, просто запустите skaffold delete
Это очень упрощенный подход, который показывает, как Skaffold реализует непрерывное развертывание для разработки приложений на базе k8. Нет предела возможностей, и я рекомендую вам ознакомиться с официальной документацией и руководствами по адресу https://skaffold.dev

Перевод статьи с сайта https://igboie.medium.com/
 
Сверху