Развертывание приложения с помощью пользовательского образа контейнера
Внимание
Эта статья ссылается на CentOS, дистрибутив Linux, который является состоянием "Конец жизни" (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.
Примечание.
Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.
Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.
Эта статья относится к: ✔️ Standard ✔️ Enterprise
В этой статье объясняется, как развернуть приложения Spring Boot в Azure Spring Apps с помощью пользовательского образа контейнера. Развертывание приложения с пользовательским контейнером поддерживает большинство функций, доступных при развертывании JAR-приложения. Другие приложения на Java и других языках также можно развернуть с помощью образа контейнера.
Необходимые компоненты
- Образ контейнера, содержащий приложение.
- Образ отправляется в реестр образов. Дополнительные сведения см в статье о Реестре контейнеров Azure.
Примечание.
Веб-приложение должно прослушивать порт 1025
для стандартного плана и порта 8080
для плана Enterprise. Способ изменения порта зависит от платформы приложения. Например, укажите SERVER_PORT=1025
для приложений Spring Boot или ASPNETCORE_URLS=http://+:1025/
для приложений ASP.NET Core. Вы можете отключить пробу для приложений, которые не прослушивают порт. Дополнительные сведения см. в статье "Настройка проб работоспособности и льготных периодов завершения для приложений, размещенных в Azure Spring Apps".
Развертывание приложения
Чтобы развернуть приложение в пользовательском образе контейнера, выполните следующие действия:
Чтобы развернуть образ контейнера, используйте одну из следующих команд:
Чтобы развернуть образ контейнера в общедоступном Docker Hub в приложении, используйте следующую команду:
az spring app deploy \ --resource-group <your-resource-group> \ --name <your-app-name> \ --container-image <your-container-image> \ --service <your-service-name>
Чтобы развернуть образ контейнера из ACR в приложении или из другого частного реестра в приложении, используйте следующую команду:
az spring app deploy \ --resource-group <your-resource-group> \ --name <your-app-name> \ --container-image <your-container-image> \ --service <your-service-name> --container-registry <your-container-registry> \ --registry-password <your-password> | --registry-username <your-username>
Чтобы перезаписать точку входа изображения, добавьте следующие два аргумента в любую из приведенных выше команд:
--container-command "java" \
--container-args "-jar /app.jar -Dkey=value"
Чтобы отключить прослушивание портов для образов, которые не являются веб-приложениями, добавьте следующий аргумент в приведенные выше команды:
--disable-probe true
Таблица поддержки функций
В следующей матрице показано, какие функции поддерживаются в каждом типе приложения.
Функция | Приложения Spring Boot — развертывание контейнера | Приложения Polyglot — развертывание контейнера | Примечания. |
---|---|---|---|
Управление жизненным циклом приложений | ✔️ | ✔️ | |
Поддержка реестров контейнеров | ✔️ | ✔️ | |
Назначение конечной точки | ✔️ | ✔️ | |
Azure Monitor | ✔️ | ✔️ | |
Интеграция APM | ✔️ | ✔️ | Поддерживается ручной установкой. |
Развертывание "синий/зеленый" | ✔️ | ✔️ | |
Личный домен | ✔️ | ✔️ | |
Масштабирование — автоматическое масштабирование | ✔️ | ✔️ | |
Масштабирование — масштабирование вручную (вертикальное увеличение/уменьшение, горизонтальное увеличение/уменьшение) | ✔️ | ✔️ | |
Управляемое удостоверение | ✔️ | ✔️ | |
Spring Cloud Eureka & Config Server | ✔️ | ❌ | |
Портал API для VMware Tanzu | ✔️ | ✔️ | Только корпоративный план. |
Spring Cloud Gateway для VMware Tanzu | ✔️ | ✔️ | Только корпоративный план. |
Служба конфигурации приложений для VMware Tanzu | ✔️ | ❌ | Только корпоративный план. |
Динамическое представление приложения для VMware Tanzu | ✔️ | ❌ | Только корпоративный план. |
Реестр служб VMware Tanzu | ✔️ | ❌ | Только корпоративный план. |
Виртуальная сеть | ✔️ | ✔️ | Добавьте реестр в список разрешений в NSG или Брандмауэр Azure. |
Исходящий IP-адрес | ✔️ | ✔️ | |
Сквозной протокол TLS | ✔️ | ✔️ | Доверяйте самозаверяющей ЦС. |
Параметры активности и готовности | ✔️ | ✔️ | |
Расширенное устранение неполадок — дамп потока, кучи или JFR | ✔️ | ❌ | Изображение должно содержать Bash и JDK с PATH указанным. |
Использование собственного хранилища | ✔️ | ✔️ | |
Интеграция привязки службы с соединителем ресурсов | ✔️ | ❌ | |
Зона доступности 1 | ✔️ | ✔️ | |
События жизненного цикла приложения | ✔️ | ✔️ | |
Уменьшенный размер приложения — 0,5 виртуальных ЦП и 512 МБ | ✔️ | ✔️ | |
Автоматизация развертываний приложений с помощью Terraform | ✔️ | ✔️ | |
Обратимое удаление | ✔️ | ✔️ | |
Интерактивный процесс диагностики (на основе AppLens) | ✔️ | ✔️ | |
SLA | ✔️ | ✔️ |
Примечание.
К приложениям Polyglot относятся приложения Java, NodeJS, AngularJS, Python и .NET, отличные от Spring Boot.
Важные аспекты, которые следует учитывать при развертывании с помощью пользовательского контейнера
Следующие рекомендации помогут вам в распространенных ситуациях при развертывании с помощью пользовательского образа.
Доверие к центру сертификации
Существует два варианта доверия к центру сертификации:
Вариант 1. Отправка с помощью Azure Spring Apps
Сведения о загрузке сертификатов ЦС в приложения см. в статье "Использование TLS/SSL-сертификатов в приложении в Azure Spring Apps". Затем сертификаты будут подключены в расположение /etc/azure-spring-cloud/certs/public/.
Вариант 2. Установка вручную в образе
Чтобы доверять ЦС в образе, задайте следующие переменные в зависимости от среды:
Вам необходимо импортировать приложения Java в хранилище доверия, добавив следующие строки в Dockerfile:
ADD EnterpriseRootCA.crt /opt/ RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
Для приложений Node.js задайте переменную среды
NODE_EXTRA_CA_CERTS
:ADD EnterpriseRootCA.crt /opt/ ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
Для Python или других языков, зависящих от хранилища системного ЦС, в образах Debian или Ubuntu добавьте следующие переменные среды:
ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/ RUN /usr/sbin/update-ca-certificates
Для Python или других языков, зависящих от хранилища системного ЦС, в образах CentOS or Fedora добавьте следующие переменные среды:
ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/ RUN /usr/bin/update-ca-trust
Как избежать непредвиденного поведения при изменении образов
При перезапуске или горизонтальном увеличении масштаба приложения всегда будет извлечен последний образ. Если образ был изменен, вновь запущенные экземпляры приложения будут использовать новый образ, а старые экземпляры будут продолжать использовать старый образ.
Примечание.
Не используйте тег latest
или не перезаписывайте образ без изменения тега, чтобы избежать непредвиденного поведения приложения.
Как избежать невозможности подключения к реестру контейнеров в виртуальной сети
Если вы развернули экземпляр в виртуальной сети, убедитесь, что вы разрешили сетевой трафик в реестр контейнеров в группе безопасности сети или Брандмауэре Azure (если используется). Дополнительные сведения см. в статье Обязательства клиента в отношении запуска в виртуальной сети, где описано добавление необходимых правил безопасности.
Установка APM в образ вручную
Этапы установки зависят от различных мониторов производительности приложений (APM) и языков. Ниже приведены шаги для New Relic с приложениями Java. Измените файл Dockerfile, выполнив следующие действия:
Скачайте и установите файл агента в образ, добавив следующий код в Dockerfile:
ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
Добавьте переменные среды, необходимые для APM:
ENV NEW_RELIC_APP_NAME=appName ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
Измените точку входа образа, добавив:
java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar
Чтобы установить агенты для других языков, см. официальную документацию для других агентов:
New Relic:
- Python: установка агента Python
- Node.js: установка агента Node.js
Dynatrace:
- Python: инструментирование приложений Python с помощью OpenTelemetry
- Node.js: инструментирование приложений Node.js с помощью OpenTelemetry
AppDynamics:
- Python: установка агента Python
- Node.js: установка агента Node.js
Просмотр журналов контейнера
Чтобы просмотреть журналы консоли приложения-контейнера, можно использовать следующую команду CLI:
az spring app logs \
--resource-group <your-resource-group> \
--name <your-app-name> \
--service <your-service-name> \
--instance <your-instance-name>
Чтобы просмотреть журналы событий контейнера из Azure Monitor, введите запрос:
AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"
Проверка образов на наличие уязвимостей
Мы рекомендуем использовать Microsoft Defender для облака с ACR, чтобы предотвратить уязвимость изображений. Дополнительные сведения см. в Microsoft Defender для облака
Переключение между развертыванием JAR и развертыванием контейнера
Вы можете переключить тип развертывания из JAR-развертывания в развертывание контейнера напрямую, повторно разверните его с помощью следующей команды:
az spring app deploy \
--resource-group <your-resource-group> \
--name <your-app-name> \
--container-image <your-container-image> \
--service <your-service-name>
Или наоборот:
az spring app deploy \
--resource-group <your-resource-group> \
--name <your-app-name> \
--artifact-path <your-jar-file> \
--service <your-service-name>
Создание другого развертывания с существующим развертыванием JAR
Вы можете создать другое развертывание с помощью существующего развертывания JAR с помощью следующей команды:
az spring app deployment create \
--resource-group <your-resource-group> \
--name <your-deployment-name> \
--app <your-app-name> \
--container-image <your-container-image> \
--service <your-service-name>
CI/CD
Теперь поддерживаются автоматизация развертываний с помощью задач Azure Pipelines или GitHub Actions. Дополнительные сведения см. в статье "Автоматизация развертываний приложений в Azure Spring Apps" и использование CI/CD Azure Spring Apps с помощью GitHub Actions