1. Цели
Skaffold — это инструмент, который управляет рабочим процессом сборки, отправки и развертывания вашего приложения. Вы можете использовать Skaffold для простой настройки локального рабочего пространства для разработки, оптимизации внутреннего цикла разработки и интеграции с другими инструментами, такими как Kustomize и Helm, для управления манифестами Kubernetes.
В этом руководстве вы познакомитесь с основными концептами Skaffold, используете его для автоматизации внутреннего цикла разработки, а затем развернете приложение.
Вы будете:
- Настройте и включите Skaffold для локальной разработки.
- Создайте и запустите простое приложение на Golang.
- Управление локальным развертыванием приложений с помощью Skaffold.
- Сгенерируйте манифесты и разверните приложение.
2. Прежде чем начать
Подготовка рабочего места
- Откройте редактор Cloud Shell, перейдя по следующему адресу:
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, и следующие разделы в этом файле:
-
build -
deploy -
profiles
В этих разделах описывается, как следует создавать и развертывать приложение, а также профили для каждой целевой платформы развертывания.
Более подробную информацию о полном списке этапов Skaffold можно найти в документации по этапам конвейера Skaffold.
4. Построить
Раздел build содержит конфигурацию, определяющую способ сборки приложения. В данном случае вы можете увидеть конфигурацию обработки git -тегов, а также раздел artifacts , определяющий образы контейнеров, из которых состоит приложение.
Кроме того, в этом разделе вы можете увидеть ссылку на Dockerfile , используемый для сборки образов. Skaffold также поддерживает другие инструменты сборки, такие как Jib , Maven , Gradle , Cloud-native Buildpacks , Bazel и пользовательские скрипты. Подробнее об этой конфигурации можно прочитать в документации Skaffold Build .
5. Развертывание
Раздел deploy содержит конфигурацию, определяющую способ развертывания приложения. В данном случае вы можете увидеть пример развертывания по умолчанию, который настраивает Skaffold на использование инструмента Kustomize .
Инструмент Kustomize предоставляет функциональность для генерации манифестов Kubernetes путем объединения набора общих YAML-файлов компонентов (в base каталоге) с одним или несколькими «наложениями», которые обычно соответствуют одной или нескольким целевым средам развертывания — как правило, dev , test , staging и production или аналогичным.
В этом примере вы видите два наложения для трех целевых сред: dev , staging и prod . Наложение dev будет использоваться во время локальной разработки, а наложения staging и prod — при развертывании с помощью Skaffold.
6. Профили
Раздел profiles содержит конфигурацию, определяющую параметры сборки, тестирования и развертывания для различных контекстов. Различные контексты, как правило, представляют собой разные среды в конвейере развертывания вашего приложения, например, в этом примере — staging или prod . Это означает, что вы можете легко управлять манифестами, содержимое которых должно отличаться для разных целевых сред, без повторения шаблонной конфигурации.
В разделе profiles можно заменить или изменить любые элементы основной конфигурации (например, разделы build , test или deploy ).
В качестве примера откройте файл overlays > prod > deployment.yaml . Обратите внимание, что количество реплик для приложения здесь установлено на три, что переопределяет базовую конфигурацию.
Навигация по исходному коду приложения.
- Откройте в панели IDE следующий файл:
app > main.goЭто простое приложение на 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 в окне терминала, чтобы остановить вывод Skafold.
- Выполните следующую команду, чтобы увидеть, как ваше приложение работает в кластере:
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 в окне терминала, чтобы остановить вывод Skafold.
Вы должны увидеть три разных имени пода, поскольку в профиле 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