1. Обзор
В этой лабораторной работе демонстрируются функции и возможности, разработанные для оптимизации рабочего процесса разработки программного обеспечения для инженеров-программистов, занимающихся разработкой приложений на Python в контейнеризированной среде. Типичная разработка в контейнерах требует от пользователя понимания деталей контейнеров и процесса сборки контейнеров. Кроме того, разработчикам обычно приходится прерывать свой рабочий процесс, выходя из IDE для тестирования и отладки своих приложений в удаленных средах. С помощью инструментов и технологий, упомянутых в этом руководстве, разработчики могут эффективно работать с контейнеризированными приложениями, не покидая свою IDE.

Что такое облачные рабочие станции?
Cloud Workstations предоставляет управляемые среды разработки в Google Cloud со встроенной безопасностью и предварительно настроенными, но настраиваемыми средами разработки. Доступ к Cloud Workstations осуществляется через браузерную IDE, из нескольких локальных редакторов кода (таких как VSCode или IDE от JetBrains, например, IntelliJ IDEA Ultimate и PyCharm Professional) или через SSH.
Облачные рабочие станции используют следующие ресурсы:
- Администраторы создают кластеры рабочих станций.
- В каждом кластере рабочих станций администраторы создают одну или несколько конфигураций рабочих станций , которые служат шаблонами для рабочих станций.
- Разработчики могут создавать рабочие станции , определяющие среду разработки, предоставляющую облачную IDE, инструменты для работы с языками программирования, библиотеки и многое другое.
Облачные рабочие станции позволяют ИТ-администраторам и администраторам безопасности легко создавать, масштабировать, управлять и защищать свои среды разработки, а также предоставляют разработчикам доступ к средам разработки с согласованными конфигурациями и настраиваемыми инструментами.
Cloud Workstations помогает сместить акцент в обеспечении безопасности на более ранние этапы разработки, повышая уровень защиты сред разработки приложений. Он включает в себя такие функции безопасности, как управление службами VPC, частный входящий и исходящий трафик, принудительное обновление образов и политики доступа в рамках управления идентификацией и доступом.
Что такое Cloud Code?
Cloud Code предоставляет поддержку IDE для всего цикла разработки приложений Kubernetes и Cloud Run, от создания и настройки нового приложения на основе примеров до запуска готового приложения. Cloud Code поддерживает вас на каждом этапе, предоставляя готовые к запуску примеры, готовые фрагменты конфигурации и специализированный интерфейс отладки, что значительно упрощает разработку с использованием Kubernetes и Cloud Run!
Вот некоторые из функций Cloud Code:
- Непрерывная разработка и запуск приложений.
- Поддержка отладки вашего разрабатываемого приложения Kubernetes.
- Просмотр и передача логов
Узнайте больше о других функциях Cloud Code.
Что вы узнаете
В этой лабораторной работе вы изучите методы разработки с использованием контейнеров в GCP, в том числе:
- Обзор облачных рабочих станций
- Запуск рабочей станции
- Обзор облачного кода
- Отладка в Kubernetes
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить весь проект. Новые пользователи 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 &
- Откройте Cloud Workstations в Cloud Console. Дождитесь, пока кластер перейдет в состояние
READY, прежде чем переходить к следующим шагам. - Если ваша сессия Cloud Shell была разорвана, нажмите «Переподключиться», а затем выполните команду cli gcloud, чтобы установить идентификатор проекта. Перед выполнением команды замените указанный ниже пример идентификатора проекта на идентификатор вашего проекта 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
Кластер и конфигурация облачных рабочих станций
Откройте Cloud Workstations в Cloud Console. Убедитесь, что кластер находится в состоянии READY .

Проверьте статус существующих конфигураций.

Создайте новую рабочую станцию.

Измените имя на my-workstation и выберите существующую конфигурацию: codeoss-python .

Запуск рабочей станции
- Запустите рабочую станцию. Для запуска рабочей станции потребуется несколько секунд.

- Разрешите использование сторонних файлов cookie, нажав на значок в адресной строке.


- Нажмите «Сайт не работает?».

- Нажмите «Разрешить файлы cookie».

- После запуска рабочей станции вы увидите, как запустится среда разработки Code OSS IDE.
На странице «Начало работы» в среде разработки рабочей станции нажмите кнопку «Отметить как выполненное».

3. Обзор облачного кода
Ознакомьтесь с различными разделами, доступными в Cloud Code.
- Разработка на Kubernetes. Получите полностью интегрированную среду разработки и отладки Kubernetes прямо в вашей IDE. Создавайте и управляйте кластерами непосредственно из IDE.
- Отладка запущенных приложений. Отлаживайте код в своих IDE, используя Cloud Code для VS Code и Cloud Code для IntelliJ, задействуя встроенные функции отладки IDE.
- Изучите развертывания. Просмотрите базовые ресурсы и метаданные для ваших кластеров Kubernetes и сервисов Cloud Run. Вы можете получить описание, просмотреть журналы, управлять секретами или получить прямой доступ к терминалу пода.
- Упростите локальную разработку Kubernetes. Cloud Code for IDEs использует популярные инструменты, такие как 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 позволяет автоматически перезагружать изменения кода в приложении Flask на Python. В этом 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 в запущенный контейнер.
После внесения изменений раздел build в файле 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: Запуск/Отладка».

- Выберите «Kubernetes: Запуск/Отладка — Подробная информация» в раскрывающемся списке каналов справа, чтобы просмотреть дополнительные сведения и журналы, транслируемые в режиме реального времени из контейнеров.

После завершения сборки и тестирования в логах вкладки «Вывод» в представлении «Kubernetes: Запуск/Отладка» будет указан URL-адрес http://localhost:8080.
- В терминале 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.

- В окне «Подробный просмотр
OutputKubernetes Run/Debug - Detailedобратите внимание, что 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". - Дважды щелкните по имени переменной "message" и во всплывающем окне измените её значение на что-нибудь другое, например,
"Greetings from Python" - Нажмите кнопку «Продолжить» на панели управления отладкой.

- Проверьте ответ в браузере, где теперь отображается обновленное значение, которое вы только что ввели.
- Остановите режим отладки, нажав кнопку «Стоп».
и снимите точку останова, снова щелкнув по ней.
6. Уборка
Поздравляем! В этой лабораторной работе вы создали с нуля новое приложение на Python и настроили его для эффективной работы с контейнерами. Затем вы развернули и отладили свое приложение в удаленном кластере GKE, следуя тому же процессу разработки, что и в традиционных стеках приложений.
После завершения лабораторной работы необходимо провести уборку:
- Удалите файлы, использованные в лабораторной работе.
cd ~ && rm -rf ~/music-service
- Удалите проект, чтобы удалить всю связанную с ним инфраструктуру и ресурсы.
—
Последнее обновление: 22.03.2023