Развертывание приложения Java с помощью Open Liberty или WebSphere Liberty в кластере Служба Azure Kubernetes
Область применения: AKS в Azure Local 22H2, AKS на Windows Server
В этой статье демонстрируются следующие возможности.
- Запуск приложения Java, Java EE, Jakarta EE или MicroProfile в среде выполнения Open Liberty или WebSphere Liberty.
- Создание образа приложения Docker с использованием образов контейнеров Open Liberty.
- Разверните контейнерное приложение в локальном кластере AKS в AKS с поддержкой Arc с помощью оператора Open Liberty.
Open Liberty Operator упрощает развертывание приложений, работающих в кластерах Kubernetes, и управление ими. С помощью Open Liberty Operator также можно выполнять более сложные операции, такие как сбор журналов трассировки и дампов.
Дополнительные сведения об Open Liberty см . на странице проекта Open Liberty. Дополнительные сведения о IBM WebSphere Liberty см . на странице продукта WebSphere Liberty.
Эта статья разделена на две части:
Часть 1 посвящена развертыванию необходимых артефактов в Azure. Это развертывание включает группу ресурсов и Реестр контейнеров Azure. Для выполнения этих задач можно использовать Azure Cloud Shell (самый простой), который включает последнюю версию Azure CLI или локальную систему со следующими средствами:
- Установленная операционная система Unix (например, Ubuntu, macOS, подсистема Windows для Linux).
- Установите Azure CLI после предыдущего руководства.
- Установите реализацию Java SE (например, AdoptOpenJDK OpenJDK 8 LTS/OpenJ9).
- Установите Maven 3.5.0 или более поздней версии.
- Установите Docker для операционной системы.
Часть 2 посвящена развертыванию приложения из Реестр контейнеров Azure в среде AKS Arc. В этом разделе нельзя использовать Azure Cloud Shell. Для среды AKS Arc требуются следующие элементы:
- Кластер AKS с по крайней мере одним рабочим узлом Linux, работающим и работающим.
- Настроенная локальная
kubectl
среда, указывающая на кластер AKS. Для доступа к кластеруkubectl
PowerShell. - Средства командной строки Git, установленные в системе. В системе Windows можно использовать Git Bash в качестве основной консоли и в консоли Git Bash, при необходимости вызывать PowerShell и Azure.
Создание группы ресурсов в Azure
Группа ресурсов Azure — это логическая группа , в которой развертываются и управляются ресурсы Azure.
Вы можете создать группу ресурсов с именем java-liberty-project при использовании команды az group create в расположении eastus . Эта группа ресурсов используется позже для создания экземпляра Реестр контейнеров Azure:
RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Создание экземпляра реестра контейнеров в Azure
Используйте команду az acr create для создания экземпляра Реестр контейнеров Azure. В следующем примере создается экземпляр реестра контейнеров с именем youruniquecontainerregistryname. Убедитесь, что имя youruniquecontainerregistryname уникально в Azure:
REGISTRY_NAME=youruniquecontainerregistryname
az acr create --resource-group $RESOURCE_GROUP_NAME --name $REGISTRY_NAME --sku Basic --admin-enabled
Через некоторое время вы увидите выходные данные JSON, похожие на следующий пример:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Подключение к экземпляру реестра контейнеров в Azure
Перед отправкой образа в экземпляр реестра контейнеров необходимо войти в экземпляр реестра контейнеров. Выполните следующие команды, чтобы проверить подключение. Запишите сведения о входе. Они используются позже при подключении к AKS:
LOGIN_SERVER=$(az acr show -n $REGISTRY_NAME --query 'loginServer' -o tsv)
USER_NAME=$(az acr credential show -n $REGISTRY_NAME --query 'username' -o tsv)
PASSWORD=$(az acr credential show -n $REGISTRY_NAME --query 'passwords[0].value' -o tsv)
echo $LOGIN_SERVER
echo $USER_NAME
echo $PASSWORD
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD
Если вы успешно вошли в экземпляр реестра контейнеров, вы увидите имя входа в систему успешно.
Создание образа приложения в Azure
Чтобы развернуть и запустить приложение Liberty в кластере AKS, необходимо сначала контейнеризировать приложение как образ Docker с помощью образов контейнеров Open Liberty или образов контейнеров WebSphere Liberty:
- Клонируйте пример кода из этого руководства. Пример размещен на сайте GitHub.
- Измените каталог на
javaee-app-simple-cluster
своего локального клона. - Выполните команду
mvn clean package
, чтобы упаковать приложение. - Выполните команду
mvn liberty:dev
, чтобы протестировать приложение. Вы увидите , что сервер defaultServer готов к выполнению более интеллектуальной планеты в выходных данных команды, если команда была успешной. Чтобы остановить приложение, используйте CTRL-C . - Выполните одну из следующих команд, чтобы создать образ приложения и отправить его в экземпляр реестра контейнеров:
Создайте с помощью базового образа Open Liberty, если вы предпочитаете использовать Open Liberty в качестве упрощенной среды выполнения java открытый код:
# Build and tag application image. This causes the Container Registry instance to pull the necessary Open Liberty base images. az acr build -t javaee-cafe-simple:1.0.0 -r $REGISTRY_NAME .
Выполните сборку с базовым изображением WebSphere Liberty, если вы предпочитаете использовать коммерческую версию Open Liberty:
# Build and tag application image. This causes the Container Registry instance to pull the necessary WebSphere Liberty base images. az acr build -t javaee-cafe-simple:1.0.0 -r $REGISTRY_NAME --file=Dockerfile-wlp .
Подключение к кластеру AKS
Для управления кластером Kubernetes используется kubectl, клиент командной строки Kubernetes. После установки в Windows можно запустить kubectl
из командной строки, консоли PowerShell и Git Bash.
Необходимо настроить локальную kubectl
среду для указания кластера AKS. Для доступа к кластеру с помощью команды Get-AksHciCredential PowerShell можно использовать команду Get-AksHciCredential PowerShell:kubectl
Get-AksHciCredential -name AksHciClusterName
Примечание.
Предыдущая команда использует расположение по умолчанию для файла конфигурации Kubernetes, который является %USERPROFILE%.kube. Можно указать другое расположение для файла конфигурации Kubernetes с помощью -outputLocation
параметра.
Вернитесь в консоль, чтобы проверить подключение к кластеру, используйте команду get kubectl, чтобы вернуть список узлов кластера:
kubectl get nodes
В следующем примере показан единый узел, созданный на предыдущих шагах. Убедитесь, что состояние узла готово:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.18.10
Установка Open Liberty Operator
После создания кластера и подключения к нему установите оператор Open Liberty, выполнив следующие команды:
OPERATOR_NAMESPACE=default
WATCH_NAMESPACE='""'
# Install Custom Resource Definitions (CRDs) for OpenLibertyApplication
kubectl apply -f https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-crd.yaml
# Install cluster-level role-based access
curl -L https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-cluster-rbac.yaml \
| sed -e "s/OPEN_LIBERTY_OPERATOR_NAMESPACE/${OPERATOR_NAMESPACE}/" \
| kubectl apply -f -
# Install the operator
curl -L https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-operator.yaml \
| sed -e "s/OPEN_LIBERTY_WATCH_NAMESPACE/${WATCH_NAMESPACE}/" \
| kubectl apply -n ${OPERATOR_NAMESPACE} -f -
Развертывание приложения в кластере AKS
Выполните следующие действия, чтобы развернуть приложение Liberty в кластере AKS. Вы должны получить сведения о входе из предыдущего сеанса:
Если вы использовали Azure Cloud Shell ранее и теперь используете отдельную консоль для подключения к AKS, необходимо еще раз указать учетные данные:
LOGIN_SERVER=YourLoginServerFromEarlier USER_NAME=YourUsernameFromEarlier PASSWORD=YourPwdFromEarlier
Создайте секрет извлечения, чтобы кластер AKS прошел проверку подлинности, чтобы извлечь образ из экземпляра реестра контейнеров:
kubectl create secret docker-registry acr-secret \ --docker-server=${LOGIN_SERVER} \ --docker-username=${USER_NAME} \ --docker-password=${PASSWORD}
Опять же, если вы использовали Azure Cloud Shell ранее, и вы используете отдельное средство или сеанс для подключения к AKS, необходимо клонировать пример кода для этого руководства. Пример размещен на сайте GitHub.
Убедитесь, что текущий рабочий каталог — javaee-app-simple-cluster в локальном клоне.
Выполните следующие команды, чтобы развернуть приложение Liberty с тремя репликами в кластере AKS. Выходные данные команд также отображаются встроенными:
# Create OpenLibertyApplication "javaee-app-simple-cluster" cat openlibertyapplication.yaml | sed -e "s/\${Container_Registry_URL}/${LOGIN_SERVER}/g" | sed -e "s/\${REPLICAS}/3/g" | kubectl apply -f - openlibertyapplication.openliberty.io/javaee-app-simple-cluster created # Check if OpenLibertyApplication instance is created kubectl get openlibertyapplication javaee-app-simple-cluster NAME IMAGE EXPOSED RECONCILED AGE javaee-app-simple-cluster youruniquecontainerregistryname.azurecr.io/javaee-cafe-simple:1.0.0 True 59s # Check if deployment created by Operator is ready kubectl get deployment javaee-app-simple-cluster --watch NAME READY UP-TO-DATE AVAILABLE AGE javaee-app-simple-cluster 0/3 3 0 20s
Дождитесь появления 3/3 в столбце READY и 3 в столбце AVAILABLE . Затем можно использовать CTRL-C для остановки
kubectl
процесса наблюдения.
Тестирование приложения
При запуске приложения служба балансировки нагрузки Kubernetes предоставляет внешний интерфейс приложения в Интернете. Этот процесс может занять некоторое время.
Чтобы отслеживать ход выполнения, используйте команду kubectl get service с аргументом --watch
.
kubectl get service javaee-app-simple-cluster --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javaee-app-simple-cluster LoadBalancer 10.109.118.3 192.168.0.152 80:30580/TCP 68s
После изменения внешнего IP-адреса в ожидании фактического общедоступного IP-адреса используйте CTRL-C, чтобы остановить kubectl
процесс наблюдения.
Откройте веб-браузер для внешнего IP-адреса службы (192.168.0.152 в этом примере), чтобы просмотреть домашнюю страницу приложения. Вы увидите имя модуля pod реплик приложения, отображаемые в левом верхнем углу страницы. Подождите несколько минут, а затем обновите страницу, чтобы увидеть другое имя pod, отображаемое в результате балансировки нагрузки, предоставленной кластером AKS.
Примечание.
В настоящее время приложение не использует ПРОТОКОЛ HTTPS. Необходимо включить TLS с собственными сертификатами.
Очистка ресурсов
Чтобы избежать расходов за использование Azure, необходимо удалить ненужные ресурсы. Если кластер больше не нужен, используйте команду az group delete , чтобы удалить группу ресурсов, реестр контейнеров и связанные ресурсы Azure:
RESOURCE_GROUP_NAME=java-liberty-project
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Чтобы очистить ресурсы, развернутые в AKS, выполните следующие команды из локальной консоли:
kubectl delete -f https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-crd.yaml
kubectl delete -f https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-operator.yaml
kubectl delete -f openlibertyapplication.yaml
Следующие шаги
Дополнительные сведения см. в ссылках, используемых в этом руководстве: