Поделиться через


Развертывание приложения 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:

  1. Клонируйте пример кода из этого руководства. Пример размещен на сайте GitHub.
  2. Измените каталог на javaee-app-simple-cluster своего локального клона.
  3. Выполните команду mvn clean package, чтобы упаковать приложение.
  4. Выполните команду mvn liberty:dev, чтобы протестировать приложение. Вы увидите , что сервер defaultServer готов к выполнению более интеллектуальной планеты в выходных данных команды, если команда была успешной. Чтобы остановить приложение, используйте CTRL-C .
  5. Выполните одну из следующих команд, чтобы создать образ приложения и отправить его в экземпляр реестра контейнеров:
    • Создайте с помощью базового образа 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. Вы должны получить сведения о входе из предыдущего сеанса:

  1. Если вы использовали Azure Cloud Shell ранее и теперь используете отдельную консоль для подключения к AKS, необходимо еще раз указать учетные данные:

    LOGIN_SERVER=YourLoginServerFromEarlier
    USER_NAME=YourUsernameFromEarlier
    PASSWORD=YourPwdFromEarlier
    
  2. Создайте секрет извлечения, чтобы кластер AKS прошел проверку подлинности, чтобы извлечь образ из экземпляра реестра контейнеров:

    kubectl create secret docker-registry acr-secret \
       --docker-server=${LOGIN_SERVER} \
       --docker-username=${USER_NAME} \
       --docker-password=${PASSWORD}
    
  3. Опять же, если вы использовали Azure Cloud Shell ранее, и вы используете отдельное средство или сеанс для подключения к AKS, необходимо клонировать пример кода для этого руководства. Пример размещен на сайте GitHub.

  4. Убедитесь, что текущий рабочий каталог — javaee-app-simple-cluster в локальном клоне.

  5. Выполните следующие команды, чтобы развернуть приложение 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
    
  6. Дождитесь появления 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.

Снимок экрана: приложение java liberty успешно развернуто в 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

Следующие шаги

Дополнительные сведения см. в ссылках, используемых в этом руководстве: