О практической работе
1. Обзор
В этой лабораторной работе демонстрируются функции и возможности, предназначенные для оптимизации рабочего процесса разработки для инженеров-программистов, которым поручено разрабатывать приложения Python в контейнерной среде. Типичная разработка контейнеров требует от пользователя понимания деталей контейнеров и процесса сборки контейнеров. Кроме того, разработчикам обычно приходится прерывать рабочий процесс, выходя из своей IDE для тестирования и отладки своих приложений в удаленных средах. С помощью инструментов и технологий, упомянутых в этом руководстве, разработчики могут эффективно работать с контейнерными приложениями, не выходя из своей IDE.
Что такое облачные рабочие станции?
Cloud Workstations предоставляет управляемые среды разработки в Google Cloud со встроенной безопасностью и предварительно настроенными, но настраиваемыми средами разработки. Доступ к облачным рабочим станциям осуществляется через интегрированную среду разработки на основе браузера, из нескольких локальных редакторов кода (например, VSCode или IDE JetBrains, таких как IntelliJ IDEA Ultimate и PyCharm Professional) или через SSH.
Cloud Workstations использует следующие ресурсы:
- Администраторы создают кластеры рабочих станций.
- В каждом кластере рабочих станций администраторы создают одну или несколько конфигураций рабочих станций , которые действуют как шаблоны для рабочих станций.
- Разработчики могут создавать рабочие станции , определяющие среды разработки, предоставляющие Cloud IDE, языковые инструменты, библиотеки и многое другое.
Облачные рабочие станции позволяют ИТ-администраторам и администраторам безопасности легко предоставлять, масштабировать, управлять и защищать свои среды разработки, а также позволяют разработчикам получать доступ к средам разработки с согласованными конфигурациями и настраиваемыми инструментами.
Облачные рабочие станции помогают сместить уровень безопасности за счет повышения уровня безопасности сред разработки приложений. Он имеет функции безопасности, такие как управление услугами VPC, частный вход или выход, принудительное обновление образа и политики доступа для управления идентификацией и доступом.
Что такое облачный код?
Cloud Code обеспечивает поддержку IDE для полного цикла разработки приложений Kubernetes и Cloud Run: от создания и настройки нового приложения на основе образцов шаблонов до запуска готового приложения. Cloud Code поддерживает вас на этом пути, предоставляя готовые к запуску примеры, готовые фрагменты конфигурации и адаптированные возможности отладки, что значительно упрощает разработку с помощью Kubernetes и Cloud Run!
Вот некоторые функции Cloud Code:
- Постоянно создавайте и запускайте приложения
- Поддержка отладки вашего разрабатываемого приложения Kubernetes.
- Потоковая передача и просмотр журналов
Узнайте больше о других функциях Cloud Code.
Что вы узнаете
В этой лабораторной работе вы изучите методы разработки с использованием контейнеров в GCP, в том числе:
- Обзор облачных рабочих станций
- Запустить рабочую станцию
- Просмотрите облачный код
- Отладка в Kubernetes
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы можете обновить его в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Кроме того, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага, и он останется в силе на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и не взимать плату за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Настройка среды
В Cloud Shell укажите идентификатор и номер вашего проекта. Сохраните их как переменные PROJECT_ID
и PROJECT_ID
.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
В ходе этой лабораторной работы вы развернете код в GKE. Вы также будете использовать облачные рабочие станции в качестве IDE.
Приведенный ниже сценарий установки подготовит для вас эту инфраструктуру.
- Загрузите сценарий установки и сделайте его исполняемым.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
- Откройте файл
setup_with_cw.sh
и отредактируйте значения паролей, для которых в данный момент установлено значение CHANGEME. - Запустите сценарий установки, чтобы запустить кластер GKE, который вы будете использовать в этой лабораторной работе. Эта настройка займет около 20 минут.
./setup_with_cw.sh &
- Откройте облачные рабочие станции в облачной консоли. Подождите, пока кластер перейдет в состояние
READY
, прежде чем переходить к следующим шагам. - Если ваш сеанс Cloud Shell был отключен, нажмите «Повторно подключиться», а затем запустите команду gcloud cli, чтобы установить идентификатор проекта. Перед запуском команды замените приведенный ниже идентификатор примера проекта на идентификатор вашего проекта qwiklabs.
gcloud config set project qwiklabs-gcp-project-id
- Загрузите и запустите приведенный ниже скрипт в терминале, чтобы создать конфигурацию облачных рабочих станций.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
Кластер и конфигурация облачных рабочих станций
Откройте облачные рабочие станции в облачной консоли. Убедитесь, что кластер находится в состоянии READY
.
Проверьте состояние существующих конфигураций.
Создайте новую рабочую станцию.
Измените имя на my-workstation
и выберите существующую конфигурацию: codeoss-python
.
Запустить рабочую станцию
- Запустите и запустите рабочую станцию. Запуск рабочей станции займет некоторое время.
- Разрешите сторонние файлы cookie, нажав на значок в адресной строке.
- Нажмите «Сайт не работает?».
- Нажмите «Разрешить файлы cookie».
- После запуска рабочей станции вы увидите Code OSS IDE.
Нажмите «Отметить готово» на странице «Начало работы» в среде IDE рабочей станции.
3. Обзор облачного кода
Просмотрите различные разделы, доступные в Cloud Code.
- Разработка Кубернетеса. Получите полностью интегрированную среду разработки и отладки Kubernetes в вашей IDE. Создавайте кластеры и управляйте ими непосредственно из IDE.
- Отладка запущенных приложений. Отлаживайте код в своих IDE с помощью Cloud Code для VS Code и Cloud Code для IntelliJ, используя встроенные функции отладки IDE.
- Изучите развертывания. Просматривайте базовые ресурсы и метаданные для ваших кластеров Kubernetes и сервисов Cloud Run. Вы можете получить описание, просмотреть журналы, управлять секретами или подключить терминал непосредственно к модулю.
- Упростите локальную разработку Kubernetes. Под обложкой Cloud Code для IDE используются популярные инструменты, такие как Skaffold, Jib и kubectl, для обеспечения непрерывной обратной связи по вашему коду в режиме реального времени.
Войдите в Google Cloud
- Нажмите на значок Cloud Code и выберите «Войти в Google Cloud»:
- Нажмите «Продолжить вход».
- Проверьте вывод в Терминале и откройте ссылку:
- Войдите, используя свои учетные данные студента Qwiklabs.
- Выберите «Разрешить»:
- Скопируйте код подтверждения и вернитесь на вкладку «Рабочая станция».
- Вставьте код подтверждения и нажмите Enter.
Если вы видите это сообщение, нажмите кнопку «Разрешить», чтобы можно было скопировать и вставить его на рабочую станцию.
4. Создайте новое начальное приложение Python.
В этом разделе вы создадите новое приложение Python.
- Откройте новый терминал.
- Создайте новый каталог и откройте его как рабочую область.
mkdir music-service && cd music-service
code-oss-cloud-workstations -r --folder-uri="$PWD"
- Создайте файл с именем
requirements.txt
и скопируйте в него следующее содержимое.
Flask
gunicorn
ptvsd==4.3.2
- Создайте файл с именем
app.py
и вставьте в него следующий код.
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/")
def hello_world():
message="Hello, World!"
return message
if __name__ == '__main__':
server_port = os.environ.get('PORT', '8080')
app.run(debug=False, port=server_port, host='0.0.0.0')
- Создайте файл с именем
Dockerfile
и вставьте в него следующее:
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]
Примечание . FLASK_DEBUG=1 позволяет автоматически перезагружать изменения кода в приложение Python flask. Этот Dockerfile позволяет вам передать это значение в качестве аргумента сборки.
Генерировать манифесты
В вашем терминале выполните следующую команду, чтобы создать файлы skaffold.yaml
и deployment.yaml
по умолчанию.
- Инициализируйте Skaffold с помощью следующей команды
skaffold init --generate-manifests
При появлении запроса используйте стрелки для перемещения курсора и пробел для выбора параметров.
Выбирать:
-
8080
для порта -
y
, чтобы сохранить конфигурацию
Обновление конфигураций Skaffold
- Изменить имя приложения по умолчанию
- Открыть
skaffold.yaml
- Выберите имя изображения, установленное в настоящее время как
dockerfile-image
- Щелкните правой кнопкой мыши и выберите «Изменить все вхождения».
- Введите новое имя как
python-app
- Далее отредактируйте раздел сборки, чтобы
- добавьте
docker.buildArgs
для передачиFLASK_DEBUG=1
- Синхронизируйте настройки для загрузки любых изменений в файлы
*.py
из IDE в работающий контейнер.
После изменений раздел сборки в файле skaffold.yaml
будет выглядеть следующим образом:
build:
artifacts:
- image: python-app
docker:
buildArgs:
FLASK_DEBUG: "1"
dockerfile: Dockerfile
sync:
infer:
- '**/*.py'
Изменить файл конфигурации Kubernetes
- Изменить имя по умолчанию
- Откройте файл
deployment.yaml
. - Выберите имя изображения, установленное в настоящее время как
dockerfile-image
- Щелкните правой кнопкой мыши и выберите «Изменить все вхождения».
- Введите новое имя как
python-app
5. Прогулка по процессу разработки
После добавления бизнес-логики вы можете развернуть и протестировать свое приложение. В следующем разделе будет продемонстрировано использование плагина Cloud Code. Помимо прочего, этот плагин интегрируется со skaffold, чтобы упростить процесс разработки. Когда вы выполните развертывание в GKE, выполнив следующие шаги, Cloud Code и Skaffold автоматически создадут образ вашего контейнера, отправят его в реестр контейнеров, а затем развернут your
приложение в GKE. Это происходит «за кулисами», отвлекая детали от процесса разработки.
Добавить кластер Kubernetes
- Добавить кластер
- Выберите Google Kubernetes Engine:
- Выберите проект.
- Выберите «python-cluster», созданный при первоначальной настройке.
- Кластер теперь отображается в списке кластеров Kubernetes в разделе Cloud Code. Перемещайтесь и исследуйте кластер отсюда.
Развертывание в Kubernetes
- На панели внизу редактора Cloud Shell выберите Cloud Code 
- На появившейся вверху панели выберите «Выполнить в Kubernetes» .
При появлении запроса выберите Да, чтобы использовать текущий контекст Kubernetes.
Эта команда запускает сборку исходного кода, а затем запускает тесты. Сборка и тесты займут несколько минут. Эти тесты включают модульные тесты и этап проверки, на котором проверяются правила, установленные для среды развертывания. Этот этап проверки уже настроен, и он гарантирует, что вы получите предупреждение о проблемах с развертыванием, даже если вы все еще работаете в своей среде разработки.
- При первом запуске команды в верхней части экрана появится приглашение с вопросом, хотите ли вы использовать текущий контекст Kubernetes, выберите «Да», чтобы принять и использовать текущий контекст.
- Затем появится приглашение с вопросом, какой реестр контейнеров использовать. Нажмите Enter, чтобы принять предоставленное значение по умолчанию.
- Выберите вкладку «Вывод» на нижней панели, чтобы просмотреть ход выполнения и уведомления. В раскрывающемся списке выберите «Kubernetes: Run/Debug».
- Выберите «Kubernetes: Run/Debug — Detailed» в раскрывающемся списке каналов справа, чтобы просмотреть дополнительные сведения и журналы, транслируемые в реальном времени из контейнеров.
После завершения сборки и тестирования в журналах вкладки «Вывод» URL-адрес http://localhost:8080 будет указан в представлении «Kubernetes: Run/Debug».
- В терминале Cloud Code наведите указатель мыши на первый URL-адрес в выводе (http://localhost:8080), а затем в появившейся подсказке выберите «Открыть веб-просмотр».
- Откроется новая вкладка браузера и отобразится сообщение:
Hello, World!
Горячая перезагрузка
- Откройте файл
app.py
- Измените приветственное сообщение на
Hello from Python
Сразу обратите внимание, что в окне Output
в представлении Kubernetes: Run/Debug
наблюдатель синхронизирует обновленные файлы с контейнером в Kubernetes.
Update initiated Build started for artifact python-app Build completed for artifact python-app Deploy started Deploy completed Status check started Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress Resource deployment/python-app status updated to In Progress Resource deployment/python-app status completed successfully Status check succeeded ...
- Если вы переключитесь на
Kubernetes: Run/Debug - Detailed
вид», вы заметите, что он распознает изменения файлов, затем собирает и повторно развертывает приложение.
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
- Обновите вкладку браузера, на которой вы видели предыдущие результаты, чтобы увидеть обновленные результаты.
Отладка
- Перейдите в представление «Отладка» и остановите текущий поток.
. Если он спросит, вы можете выбрать очистку после каждого запуска.
- Нажмите
Cloud Code
в нижнем меню и выберитеDebug on Kubernetes
чтобы запустить приложение в режимеdebug
.
- Обратите внимание, что в окне
Kubernetes Run/Debug - Detailed
представлениеOutput
» skaffold развернет это приложение в режиме отладки.
- При первом запуске появится запрос, где находится источник внутри контейнера. Это значение связано с каталогами в Dockerfile.
Нажмите Enter, чтобы принять значение по умолчанию
Сборка и развертывание приложения займет пару минут. Если сеанс отладки отключен, повторно выполните шаги «Отладка в Kubernetes» из раздела «Сеансы разработки».
- Когда процесс завершится. Вы заметите прикрепленный отладчик, а на вкладке «Вывод» появится сообщение:
Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully.
и отображается URL-адрес http://localhost:8080.
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
- Нижняя строка состояния меняет цвет с синего на оранжевый, указывая на то, что система находится в режиме отладки.
- Обратите внимание, что в представлении
Kubernetes Run/Debug
запускается контейнер отладки.
**************URLs***************** Forwarded URL from service python-app: http://localhost:8080 Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default) Update succeeded ***********************************
Используйте точки останова
- Откройте файл
app.py
- Найдите оператор, который читает
return message
- Добавьте точку останова в эту строку, щелкнув пустое место слева от номера строки. Красный индикатор покажет, что точка останова установлена.
- Перезагрузите браузер и обратите внимание, что отладчик останавливает процесс в точке останова и позволяет вам исследовать переменные и состояние приложения, которое работает удаленно в GKE.
- Нажмите вниз в раздел ПЕРЕМЕННЫЕ.
- Нажмите «Локальные», там вы найдете переменную
"message"
. - Дважды щелкните имя переменной «сообщение» и во всплывающем окне измените значение на другое, например
"Greetings from Python"
- Нажмите кнопку «Продолжить» на панели управления отладкой.
- Просмотрите ответ в своем браузере, который теперь показывает обновленное значение, которое вы только что ввели.
- Остановите режим «Отладка», нажав кнопку «Стоп».
и удалите точку останова, снова нажав на точку останова.
6. Очистка
Поздравляем! В ходе этой лабораторной работы вы создали новое приложение Python с нуля и настроили его для эффективной работы с контейнерами. Затем вы развернули и отладили свое приложение в удаленном кластере GKE, следуя той же схеме разработки, что и в традиционных стеках приложений.
Чтобы навести порядок после завершения лабораторной работы:
- Удалите файлы, используемые в лаборатории.
cd ~ && rm -rf ~/music-service
- Удалите проект, чтобы удалить всю связанную инфраструктуру и ресурсы.
—
Последнее обновление: 22.03.23.