1. Цели
Skaffold — это инструмент, который управляет рабочим процессом создания, отправки и развертывания вашего приложения. Вы можете использовать Skaffold, чтобы легко настроить локальное рабочее пространство разработки, оптимизировать внутренний цикл разработки и интегрировать его с другими инструментами, такими как Kustomize и Helm, для управления манифестами Kubernetes.
В этом руководстве вы познакомитесь с некоторыми основными концепциями Skaffold, используете его для автоматизации внутреннего цикла разработки, а затем развернете приложение.
Вы будете:
- Настройте и включите Skaffold для локальной разработки.
- Создайте и запустите простое приложение на golang.
- Управляйте локальным развертыванием приложений с помощью Skaffold.
- Отображение манифестов и развертывание вашего приложения
2. Прежде чем начать
Подготовка вашего рабочего места
- Откройте редактор Cloud Shell, перейдя по следующему URL-адресу:
https://shell.cloud.google.com
Разрешить сторонние файлы cookie. Нажмите «Сайт не работает», а затем «Разрешить использование файлов cookie».
- Если вы еще этого не сделали, в окне терминала клонируйте исходный код приложения с помощью следующей команды:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Перейдите в каталог клонированного репозитория:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- Установите для рабочей области Cloud Shell текущий каталог, выполнив следующую команду:
cloudshell workspace .
Подготовка вашего проекта
- Убедитесь, что ваш проект Google Cloud настроен правильно, выполнив следующую команду:
gcloud config set project {{project-id}}
3. Начало работы со Skaffold
- Выполните следующую команду, чтобы создать файл конфигурации Skaffold верхнего уровня,
skaffold.yaml
:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- Откройте файл
skaffold.yaml
на панели IDE. Это файл конфигурации верхнего уровня, определяющий конвейер Skaffold.
Обратите внимание на формат YAML, похожий на Kubernetes, и на следующие разделы YAML:
-
build
-
deploy
-
profiles
В этих разделах определяется, как приложение должно быть создано и развернуто, а также профили для каждой цели развертывания.
Подробнее о полном списке этапов Skaffold можно прочитать в документации Skaffold Pipeline Stages.
4. Построить
Раздел build
содержит конфигурацию, определяющую способ сборки приложения. В этом случае вы можете увидеть конфигурацию обработки тегов git
, а также раздел artifacts
, который определяет образы контейнеров, составляющие приложение.
Кроме того, в этом разделе вы можете увидеть ссылку на Dockerfile
, который будет использоваться для создания образов. Skaffold дополнительно поддерживает другие инструменты сборки, такие как Jib
, Maven
, Gradle
, Cloud-native Buildpacks
, Bazel
и пользовательские скрипты. Подробнее об этой конфигурации можно прочитать в документации Skaffold Build .
5. Развертывание
Раздел deploy
содержит конфигурацию, определяющую способ развертывания приложения. В этом случае вы можете увидеть пример развертывания по умолчанию, которое настраивает Skaffold для использования инструмента Kustomize
.
Инструмент Kustomize
обеспечивает функциональность для создания манифестов Kubernetes путем объединения набора YAML-файлов общих компонентов (в base
каталоге) с одним или несколькими «наложениями», которые обычно соответствуют одной или нескольким целям развертывания — обычно для разработки , тестирования , промежуточной подготовки и производства. или подобное.
В этом примере вы можете увидеть два наложения для трех целей: dev , staging и prod . Оверлей dev будет использоваться во время локальной разработки, а оверлеи Staging и Prod — при развертывании с использованием Skaffold.
6. Профили
Раздел profiles
содержит конфигурацию, которая определяет конфигурации сборки, тестирования и развертывания для различных контекстов. Разные контексты обычно представляют собой разные среды в конвейере развертывания приложения, например staging
или prod
в этом примере. Это означает, что вы можете легко управлять манифестами, содержимое которых должно различаться для разных целевых сред, без повторения шаблонной конфигурации.
Конфигурация в разделе profiles
может заменять или исправлять любые элементы из основной конфигурации (например, разделы build
, test
или deploy
).
В качестве примера откройте файл overlays > prod > deployment.yaml
. Обратите внимание, что здесь указано три реплики приложения, что переопределяет базовую конфигурацию.
Навигация по исходному коду приложения.
- Откройте следующий файл
app > main.go
на панели IDE. Это простое приложение на golang, которое каждую секунду записывает строку вstdout
. - Обратите внимание, что приложение также выводит имя модуля Kubernetes, в котором оно работает.
Просмотр файла Dockerfile
- Откройте файловое
app > Dockerfile
на панели IDE. Этот файл содержит последовательность директив для создания образа контейнера приложения для файлаmain.go
и упоминается в файлеskaffold.yaml
верхнего уровня.
7. Разработка с помощью Skaffold
Настройка среды Kubernetes
- Выполните следующую команду, чтобы убедиться, что ваш локальный кластер Kubernetes запущен и настроен:
minikube start
Это может занять несколько минут. Если кластер запустился успешно, вы должны увидеть следующий вывод:
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- Выполните следующую команду, чтобы создать пространства имен Kubernetes для
dev
,staging
иprod
:
kubectl apply -f namespaces.yaml
Вы должны увидеть следующий вывод:
namespace/dev created namespace/staging created namespace/prod created
Использование Skaffold для локальной разработки
- Выполните следующую команду, чтобы создать приложение и развернуть его в локальном кластере Kubernetes, работающем в Cloud Shell:
skaffold dev
Вы должны увидеть запуск процесса сборки контейнера приложения, который может занять минуту, а затем выходные данные приложения повторяются каждую секунду:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
Обратите внимание, что точное имя модуля будет отличаться от общего вывода, приведенного выше.
Внесение изменений в приложение
Теперь, когда приложение работает в вашем локальном кластере Kubernetes, вы можете внести изменения в код, и Skaffold автоматически пересоберет и повторно развернет приложение в кластере.
- Откройте файл
app > main.go
на панели IDE и измените выходную строку:
"Hello world from pod %s!\n"
к:
"Hello Skaffold world from pod %s!\n"
После внесения изменений вы должны увидеть, как Skaffold перестраивает образ и повторно развертывает его в кластере, при этом изменение выходных данных будет видно в окне терминала.
- Теперь также в файле «app > main.go» на панели IDE измените строку:
time.Sleep(time.Second * 1)
к
time.Sleep(time.Second * 10)
Вы снова должны увидеть, что приложение перестроено и повторно развернуто, а строка вывода появляется каждые 10 секунд.
Внесение изменений в конфиг Kubernetes
Далее вы внесете изменения в конфигурацию Kubernetes, и Skaffold снова будет автоматически повторно развернут.
- Откройте файл
base > deployment.yaml
в IDE и измените строку:
replicas: 1
к
replicas: 2
После повторного развертывания приложения вы должны увидеть два работающих модуля — каждый будет иметь свое имя.
- Теперь измените ту же строку в файле
base > deployment.yaml
обратно на:
replicas: 1
Вы должны увидеть, что один из модулей удален из эксплуатации, и остался только один.
- Наконец, нажмите
Ctrl-C
в окне терминала, чтобы остановить локальную разработку Skaffold.
Вырезание релиза
Далее вы создадите выпуск, создав образ выпуска и развернув его в кластере.
- Запустите следующую команду, чтобы собрать выпуск:
skaffold build --file-output artifacts.json
Эта команда создаст окончательный образ (при необходимости) и выведет сведения о выпуске в файл artifacts.json
.
Если вы хотите использовать такой инструмент, как Cloud Deploy, для развертывания в ваших кластерах, этот файл содержит информацию о выпуске. Это означает, что артефакт(ы) неизменяемы на пути к жизни.
- Выполните следующую команду, чтобы просмотреть содержимое файла
artifacts.json
:
cat artifacts.json | jq
Обратите внимание, что файл содержит ссылку на образ, который будет использоваться при окончательном развертывании.
Развертывание в промежуточном режиме
- Выполните следующую команду, чтобы развернуть выпуск с использованием
staging
профиля:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
После завершения развертывания вы должны увидеть выходные данные двух модулей, подобные следующему:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- Нажмите Ctrl-C в окне терминала, чтобы остановить вывод Skaffold.
- Выполните следующую команду, чтобы увидеть, как ваше приложение работает в кластере:
kubectl get all --namespace staging
Вы должны увидеть два разных имени модуля, поскольку в staging
профиле приложения указано, что в развертывании должно быть две реплики.
Развертывание в производство
- Теперь выполните следующую команду, чтобы развернуть выпуск с использованием профиля
prod
:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
После завершения развертывания вы должны увидеть выходные данные трех модулей, аналогичные следующим:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- Нажмите Ctrl-C в окне терминала, чтобы остановить вывод Skaffold.
Вы должны увидеть три разных имени модуля, поскольку профиль prod
для приложения указывает, что в развертывании должно быть три реплики.
- Выполните следующую команду, чтобы увидеть, как ваше приложение работает в кластере:
kubectl get all --namespace prod
Вы должны увидеть выходные данные, содержащие строки, подобные приведенным ниже, которые показывают развертывание продукта:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
Вы также должны увидеть три работающих модуля приложений.
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. Поздравляем!
Поздравляем! Вы завершили лабораторную работу Understanding Skaffold
и научились настраивать и использовать Skaffold для локальной разработки и развертывания приложений.
Что дальше:
Продолжайте узнавать больше о Skaffold:
Очистка
- Выполните следующую команду, чтобы завершить работу локального кластера:
minikube delete