Рубрики
Без рубрики

Конфигурация микропрофиля в службе Azure Kubernetes

1. Конфигурация микропрофиля в службе Azure Kubernetes Приложение должно использовать ex… Помечен как java, микропрофиль, azure.

1. Конфигурация микропрофиля в службе Azure Kubernetes

Приложение должно отображать конфигурацию внешней системы, такую как информация о подключении (БД и внешняя конечная точка HTTP). Потому что существует разница в настройках среды между средой разработки, средой тестирования и производственной средой. Если вы отделите конфигурацию от исходного кода программы, вы можете легко изменить настройки и записать настройки в файл настроек. При записи во внешний файл настроек вам не нужно редактировать исходный код приложения для переключения места назначения подключения, и вы можете использовать тот же исходный код без теста.

Исключение информации о конфигурации очень важно для создания облачных приложений. ” См.: Двенадцать факторов iii. Конфигурация : Сохраните конфигурацию в среде”

Twelve-Factor strict separation of config from code. 

С помощью конфигурации микропрофиля информация о конфигурации может быть получена из различных мест. Эти местоположения конфигурации называются источниками конфигурации, и если одно и то же свойство определено более чем в одном источнике конфигурации, примените политику, чтобы указать, какие значения допустимы.

  • Из системных свойств виртуальной машины Java
  • Переменные среды операционной системы
  • Из внешних файлов конфигурации (.properties, .xml)
  • Внешние источники данных, такие как LDAP, БД и хранилища значений ключей

В некоторых ситуациях может потребоваться динамически переключать некоторые источники данных. Затем измененное значение должно использовать обновленное содержимое программы без перезапуска приложения. Чтобы соответствовать этим требованиям, конфигурация микропрофиля делает настроенные значения доступными сразу после изменения.

О времени выполнения конфигурации микропрофиля

Конфигурация микропрофиля определяет только API и это не включает в себя реализацию. Реализация конфигурации микропрофиля предоставляется отдельно каждым поставщиком реализации микропрофиля, как показано ниже.

Обзор конфигурации микропрофиля

Конфигурация микропрофиля состоит из нескольких API.

Список API конфигурации микропрофиля 1.4

Приоритет источника конфигурации

Конфигурация микропрофиля состоит из org.eclipse.micro profile.config.spi. Источник конфигурации. Источники конфигурации имеют приоритет и сортируются в соответствии с порядком. Это позволяет перезаписать настройки извне.

По умолчанию существует три источника конфигурации по умолчанию.

  • System.GetProperties())
  • System.getenv())
  • Файл META-INF/microprofile-config.properties на пути к классу (по умолчанию приоритет можно установить индивидуально, установив свойство config_ordinal в каждом файле)

Например, сначала вы можете указать значения по умолчанию в файле свойств при упаковке приложения, а значения могут быть переопределены позже для каждого развертывания в значении среды. * ** “Чем выше приоритет, тем выше приоритет”. ** *

Получить значение конфигурации

Спецификация конфигурации микропрофиля предоставляет два метода для получения значения настройки.

  • Получить значение настройки программно
  • Получите значение настройки с помощью аннотаций

1. Получить значение настройки программно

Ниже приведен пример программного создания экземпляра конфигурации и получения информации о конфигурации.

public class  MyAppWithGetConfigFromProgram {

    public Response invokeMicroserviceWithConfig() {
        // Create Config Instnce
        Config config = ConfigProvider.getConfig();
        // Obtain the URL Endpoint from Config for Microservices A
        String microserviceA = config.getValue("URL_OF_MICROSERVICE_A", String.class);
        // Invoke Microservices A
        return invokeMicroservice(microserviceA);
    }
}

Чтобы получить информацию о конфигурации, сначала вы должны получить Конфигурация экземпляр. Чтобы получить экземпляр конфигурации программно, вы можете получить его, вызвав Поставщик конфигурации#getConfig() метод. (Экземпляр класса конфигурации регистрируется в загрузчике классов контекста после его создания.)

2. Получите значение настройки с помощью аннотаций (рекомендуется)

Ниже приведен пример получения экземпляра конфигурации с использованием аннотаций и получения информации о конфигурации с помощью @ConfigProperty.

@ApplicationScoped
public class MyAppWithGetConfigFromAnnotation {

    @Inject
    private Config config;

    //The property url.microserviceA must exist in one of the configsources, otherwise a
    //DeploymentException will be thrown.
    @Inject
    @ConfigProperty(name="url.microserviceA")
    private String urlOfMicroserviceA;

    //The following code injects an Optional value of port.microserviceA property.
    @Inject
    @ConfigProperty(name="port.microserviceA")
    private Optional portOfMicroserviceA;
}

Пример применения конфигурации микропрофиля

1. Создание примера проекта конфигурации микропрофиля

Пожалуйста, перейдите по следующему URL-адресу и создайте проект микропрофиля?

Микропрофильный стартер

После ввода значения в форму вы можете получить MPConfigSample.zip файл, нажав на кнопку “ЗАГРУЗИТЬ”. После разархивирования zip-файла вы можете увидеть следующую структуру каталогов.

.
├── pom.xml
├── readme.md
└── src
    └── main
        ├── java
        │   └── com
        │       └── yoshio3
        │           └── MPConfigSample
        │               ├── HelloController.java
        │               ├── MPConfigSampleRestApplication.java
        │               └── config
        │                   └── ConfigTestController.java
        ├── resources
        │   └── META-INF
        │       └── microprofile-config.properties
        └── webapp
            ├── WEB-INF
            │   └── beans.xml
            └── index.html
11 directories, 8 files

И пример кода конфигурации микропрофиля написан в ConfigTestController.java следующим образом.

package com.yoshio3.MPConfigSample.config;

import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.config.inject.ConfigProperty;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/config")
@RequestScoped
public class ConfigTestController {

    @Inject
    @ConfigProperty(name = "injected.value")
    private String injectedValue;

    @Path("/injected")
    @GET
    public String getInjectedConfigValue() {
        return "Config value as Injected by CDI " + injectedValue;
    }

    @Path("/lookup")
    @GET
    public String getLookupConfigValue() {
        Config config = ConfigProvider.getConfig();
        String value = config.getValue("value", String.class);
        return "Config value from ConfigProvider " + value;
    }
}

Приведенный выше код очень прост и возвращает значение свойства в виде HTTP-ответа. Если вы вызовете конечную точку HTTP, как показано ниже, будет возвращена строка символов, указанная в значении конфигурации.

$ curl -X GET http://localhost:8080/data/config/injected
$ curl -X GET http://localhost:8080/data/config/lookup

Фактические настройки настроены в файле micro profile-config.properties в каталоге META_INF.

# Location of the Property file
└── src
    └── main
        ├── resources
        │   └── META-INF
        │       └── microprofile-config.properties

По умолчанию заданы следующие свойства.

injected.value=Injected value
value=lookup value

2. Создайте и запустите примерный проект

Создайте проект и запустите приложение, чтобы подтвердить поведение конфигурации микропрофиля.

# Build the Project
$ mvn clean package

# Launch the Application
$ java -jar target/MPConfigSample-microbundle.jar 

......
Payara Micro URLs:
http://192.168.100.7:8080/

'ROOT' REST Endpoints:
GET     /data/application.wadl
GET     /data/config/injected
GET     /data/config/lookup
GET     /data/hello
GET     /openapi/
GET     /openapi/application.wadl
]]
[2020-03-10T22:19:06.610+0900] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1583846346610] [levelValue: 800] Payara Micro  5.194 #badassmicrofish (build 327) ready in 32,755 (ms)
[2020-03-10T22:19:33.646+0900] [] [INFO] [] [javax.enterprise.system.container.web.com.sun.web.security] [tid: _ThreadID=29 _ThreadName=http-thread-pool::http-listener(1)] [timeMillis: 1583846373646] [levelValue: 800] Context path from ServletContext:  differs from path from bundle: /

После запуска приложения, как описано выше, выполните команду curl, чтобы подтвердить поведение. Если он работает правильно, строка параметра (Введенное значение, значение), полученная из файла свойств, отображается, как показано ниже.

# Invoke endpoint to the destination which is implemented as annotation
$ curl localhost:8080/data/config/injected
Config value as Injected by CDI Injected value

# Invoke endpoint to the destination which is implemented as programatic
$ curl localhost:8080/data/config/lookup
Config value from ConfigProvider lookup value

В Микропрофиле значение параметра файла свойств может быть перезаписано системным свойством или значением среды. Затем вы можете перезаписать значение, заданное в файле “микропрофиль-конфигурация.свойства”, и подтвердить, что отображается значение, заданное в переменной среды.

# Configure the Environment Value [Replace the character from .(dot) to _(under bar)]
$ export injected_value="Environment Value"

# Run the app with Java system properties which is configured on the environment variables
$ java -D"$injected_value" -jar target/MPConfigSample-microbundle.jar

# Confirm the Application Behavior
$ curl http://localhost:8080/data/config/injected
Config value as Injected by CDI Environment Value

Примечание: Хотя файл свойств записан в. (Точка) обозначение, переменные среды использовать нельзя. (Точка) обозначение в некоторой среде операционной системы. Поэтому в настройках переменной среды замените .(Точка) обозначение с _(под штрихом). Преобразование выполняется автоматически внутри реализации.

3. Запустите приложение в локальной среде Docker

Теперь приложение проверено в локальной среде, затем вы можете запустить микропрофиль в локальной среде Docker. Чтобы создать образ докера Payara Micro, пожалуйста, создайте следующий файл докера.

FROM payara/micro:5.201

USER payara
WORKDIR ${PAYARA_HOME}

# Deploy Artifact
COPY ./target/MPConfigSample.war $DEPLOY_DIR

CMD ["--nocluster","--deploymentDir", "/opt/payara/deployments", "--contextroot", "app"]

Затем, пожалуйста, создайте и создайте образ контейнера, используя приведенный выше файл Dockerfile? Пожалуйста, выполните следующую команду?

$ docker build -t tyoshio2002/payara-config-sample:1.0 .

# Console output will be look like follows
Sending build context to Docker daemon  151.2MB
Step 1/5 : FROM payara/micro:5.201
5.201: Pulling from payara/micro
050382585609: Already exists 
59f5185426ac: Already exists 
4d95208cd9c0: Pull complete 
c1409397cf71: Pull complete 
Digest: sha256:3ff92627d0d9b67454ee241cc7d5f2e485e46db81a886c87cf16035df7c80cc8
Status: Downloaded newer image for payara/micro:5.201
 ---> a11a548b0a25
Step 2/5 : USER payara
 ---> Running in cb755e484e79
Removing intermediate container cb755e484e79
 ---> 564283252ae4
Step 3/5 : WORKDIR ${PAYARA_HOME}
 ---> Running in f26dd5cd172c
Removing intermediate container f26dd5cd172c
 ---> f2bf88b18a77
Step 4/5 : COPY ./target/MPConfigSample.war $DEPLOY_DIR
 ---> 1b54373fe95a
Step 5/5 : CMD ["--nocluster","--deploymentDir", "/opt/payara/deployments", "--contextroot", "app"]
 ---> Running in 3eb731eb77c3
Removing intermediate container 3eb731eb77c3
 ---> 1d11549e99b8
Successfully built 1d11549e99b8
Successfully tagged tyoshio2002/payara-config-sample:1.0

После создания изображения контейнера, пожалуйста, запустите контейнер? Пожалуйста, выполните следующую команду, чтобы запустить контейнер?

$ docker run -p 8080:8080 -e injected_value=FOOBAR -it tyoshio2002/payara-config-sample:1.0

# Console output will be look like follows
..... 
[2020-03-11T07:46:59.119+0000] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1583912819119] [levelValue: 800] [[ 
{
    "Instance Configuration": {
        "Host": "3877abb54d57",
        "Http Port(s)": "8080",
        "Https Port(s)": "",
        "Instance Name": "payara-micro",
        "Instance Group": "no-cluster",
        "Deployed": [
            {
                "Name": "MPConfigSample",
                "Type": "war",
                "Context Root": "/app"
            }
        ]
    }
}]]
[2020-03-11T07:46:59.131+0000] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1583912819131] [levelValue: 800] [[
Payara Micro URLs:
http://3877abb54d57:8080/app
'MPConfigSample' REST Endpoints:
GET /app/data/application.wadl
GET /app/data/config/injected
GET /app/data/config/lookup
GET /app/data/hello
]]
[2020-03-11T07:46:59.131+0000] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1583912819131] [levelValue: 800] Payara Micro  5.201 #badassmicrofish (build 512) ready in 31,286 (ms)

Теперь, когда созданный контейнер запущен, пожалуйста, получите доступ к приложению, запущенному в контейнере? На этот раз порт 8080 внутри контейнера сопоставляется с локальным портом 8080 при запуске, поэтому вы можете подключиться к контейнерному приложению, получив доступ к порту 8080 в локальной среде. Пожалуйста, выполните следующую команду?

$ curl http://localhost:8080/app/data/config/injected
Config value as Injected by CDI FOOBAR

Поскольку у нас есть аргумент запуска переменной среды ( -e ), будет отображаться символьная строка.

4. Запустите приложение в службе Azure Kubernetes

Базовая операция была подтверждена в локальной среде Docker, поэтому мы также подтвердим ее в среде Службы Azure Kubernetes .

Ниже приведена процедура подтверждения.

  1. Создайте группу ресурсов для реестра контейнеров Azure
  2. Создать реестр контейнеров Azure
  3. Подтвердите пароль реестра контейнеров Azure
  4. Войдите в реестр контейнеров Azure и нажмите на изображение
  5. Подтвердите изображение, которое будет отправлено в реестр контейнеров Azure
  6. Создать группу ресурсов для службы Azure Kubernetes
  7. Создать участника службы для службы Azure Kubernetes
  8. Предоставьте ACR разрешение на чтение, чтобы AKS могли ссылаться на ресурсы ACR
  9. Создать AKS
  10. Установите команду kubectl и получите информацию о подключении AKS
  11. Создать YAML развертывания
  12. Применить YAML развертывания
  13. Подтвердите поведение модуля
  14. Установка и обновление переменных среды
  15. Получение информации о конфигурации с карты конфигурации Kubernetes
  16. Обновите значения карты конфигурации и перезапустите модуль

4.1. Создайте группу ресурсов для реестра контейнеров Azure

Во-первых, пожалуйста, создайте Реестр контейнеров Azure и загрузите изображение изображения Docker, созданное на локальном? Поэтому, пожалуйста, создайте группу ресурсов для реестра контейнеров Azure.

$ az group create --name WebApp-Containers --location "Japan East"
{
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp-Containers",
  "location": "japaneast",
  "managedBy": null,
  "name": "WebApp-Containers",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

4.2. Создать реестр контейнеров Azure

Затем, пожалуйста, создайте реестр контейнеров Azure со следующими параметрами?

  • –имя: Укажите имя Реестра контейнеров
  • —-группа ресурсов: Укажите имя группы ресурсов, созданной на вышеуказанном шаге
  • –артикул: Укажите один из следующих “Базовый”, “Стандартный”, “Премиум”.
  • –с поддержкой администратора: если вы укажете “true”, вы можете войти в реестр с помощью команды docker.
$ az acr create --name containerreg4yoshio --resource-group WebApp-Containers --sku Basic --admin-enabled true
{
  "adminUserEnabled": true,
  "creationDate": "2020-03-12T02:27:59.357654+00:00",
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp-Containers/providers/Microsoft.ContainerRegistry/registries/containerreg4yoshio",
  "location": "japaneast",
  "loginServer": "containerreg4yoshio.azurecr.io",
  "name": "containerreg4yoshio",
  "networkRuleSet": null,
  "policies": {
    "quarantinePolicy": {
      "status": "disabled"
    },
    "retentionPolicy": {
      "days": 7,
      "lastUpdatedTime": "2020-03-12T02:28:01.654662+00:00",
      "status": "disabled"
    },
    "trustPolicy": {
      "status": "disabled",
      "type": "Notary"
    }
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "WebApp-Containers",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

4.3. Подтвердите пароль реестра контейнеров Azure

Затем, пожалуйста, подтвердите пароль для подключения к реестру контейнеров Azure?

  • — имя: Укажите имя реестра контейнеров
  • –группа ресурсов: Укажите имя группы ресурсов, созданной выше
$ az acr credential show --name containerreg4yoshio --resource-group WebApp-Containers
{
  "passwords": [
    {
      "name": "password",
      "value": "4zaIiLk*************+H1XO4AlYFvN"
    },
    {
      "name": "password2",
      "value": "fT03XPs*************Oq2cAZiVHV+L"
    }
  ],
  "username": "containerreg4yoshio"
}

4.4. Войдите в реестр контейнеров Azure и нажмите на изображение

Затем, пожалуйста, выполните команду входа в докер для подключения к реестру контейнеров Azure? (Для пароля введите пароль, полученный выше.)

Как только вы войдете в систему, пометьте свои изображения командой docker tag. В новом теге используется локально созданное имя образа контейнера Docker с именем “Сервер входа” в реестре контейнеров (например, “containerreg4yoshio.azurecr.io “).

Наконец, выполните команду docker push, чтобы поместить изображение в реестр контейнеров Azure.

# Login to the Azure Container Registry 
$ docker login containerreg4yoshio.azurecr.io -u containerreg4yoshio
Password: 
Login Succeeded

# Tag of Docker Image
$ docker tag tyoshio2002/payara-config-sample:1.0 containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0

# Push the Docker Image to Azure Container Registry
$ docker push containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0

The push refers to repository [containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample]
bbd197848553: Pushed 
ec40a5d738cc: Pushed 
f95fe3528c56: Pushed 
bded2364df91: Pushed 
1bfeebd65323: Pushed 
1.0: digest: sha256:689dbacc212d37afe09c43417bc79d8e241c3fa7b5cf71c27097ef535cf77f76 size: 1368

4.5. Подтвердите изображение, которое будет отправлено в реестр контейнеров Azure

Пожалуйста, убедитесь, что изображение успешно передано в реестр контейнеров Azure?

$ az acr repository list -n containerreg4yoshio -g WebApp-Containers
Argument 'resource_group_name' has been deprecated and will be removed in a future release.
[
  "tyoshio2002/payara-config-sample"
]

$ az acr repository show-tags --name containerreg4yoshio  --repository tyoshio2002/payara-config-sample
[
  "1.0"
]

4.6. Создать группу ресурсов для службы Azure Kubernetes

Затем, пожалуйста, создайте группу ресурсов для службы Azure Kubernetes (AKS)?

$ az group create --name MC_yoshio-aks --location "Japan East"
{
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/MC_yoshio-aks",
  "location": "japaneast",
  "managedBy": null,
  "name": "MC_yoshio-aks",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}
$ 

4.7. Создать участника службы для службы Azure Kubernetes

Затем, пожалуйста, создайте Участника службы. В это время не было никакого назначения на роль.

$ az ad sp create-for-rbac --skip-assignment
{
  "appId": "884ac0da-****-****-****-c9e2d3fce495",
  "displayName": "azure-cli-2020-03-13-03-12-59",
  "name": "http://azure-cli-2020-03-13-03-12-59",
  "password": "03a0e079-****-****-****-a760333af0b0",
  "tenant": "72f988bf-****-****-****-2d7cd011db47"
}

4.8. Предоставьте ACR разрешение на чтение, чтобы AKS могли ссылаться на ресурсы ACR

Когда вы используете Azure, не регистрируйте информацию о подключении в реестре контейнеров в Kubernetes (обычно регистрируйте и используйте информацию о подключении в тайне), используйте принципал службы Azure Active Directory (Azure AD) Azure, вы можете получить изображения контейнеров, которые существуют в Реестре контейнеров Azure.

Ссылаться: Проверка подлинности в реестре контейнеров Azure с помощью участника службы

Во-первых, вам необходимо получить идентификатор ресурса ACER с помощью команды az car show, чтобы предоставить разрешения ACR.

Затем используйте команду создания назначения роли az, чтобы предоставить acrpull участнику службы (созданному выше), используемому AKS для ACR.

  • –правопреемник: укажите идентификатор приложения (“Идентификатор приложения”: “884ac0da-* ***- c9e2d3fce495″,)
  • –область применения:: укажите идентификатор вышеупомянутого АКТА
  • –роль: роль acrpull позволяет извлекать изображения из ACR (в YAML нет настроек безопасности)
$ az acr show --resource-group WebApp-Containers --name containerreg4yoshio --query "id" --output tsv
/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp-Containers/providers/Microsoft.ContainerRegistry/registries/containerreg4yoshio

$ az role assignment create --assignee 884ac0da-****-****-****-c9e2d3fce495 --scope /subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp-Containers/providers/Microsoft.ContainerRegistry/registries/containerreg4yoshio --role acrpull
{
  "canDelegate": null,
  "id": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp-Containers/providers/Microsoft.ContainerRegistry/registries/containerreg4yoshio/providers/Microsoft.Authorization/roleAssignments/72cbc68a-****-****-****-1a66c8568cba",
  "name": "72cbc68a-****-****- ****-1a66c8568cba",
  "principalId": "33472555-****-****-****-31e2064fb702",
  "principalType": "ServicePrincipal",
  "resourceGroup": "WebApp-Containers",
  "roleDefinitionId": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/providers/Microsoft.Authorization/roleDefinitions/7f951dda-****-****-****-43fe172d538d",
  "scope": "/subscriptions/f77aafe8-****-****-****-d0c37687ef70/resourceGroups/WebApp-Containers/providers/Microsoft.ContainerRegistry/registries/containerreg4yoshio",
  "type": "Microsoft.Authorization/roleAssignments"
}

4.9. Создать AKS

Наконец, вы можете создать AKS со следующими опциями.

  • –группа ресурсов: укажите имя группы ресурсов, созданной в 4.6
  • –имя: укажите имя кластера AKS
  • –версия kubernetes: укажите версию кластера AKS для Kubernetes
  • –узел-размер виртуальной машины: определяет размер виртуальной машины
  • –количество узлов: указывает количество работников Kubernetes узлы
  • –местоположение: указывает Восточную Японию в качестве местоположения
  • –служба-принципал: указывает идентификатор приложения, который создается на шаге 4.7
  • –секрет клиента: указывает пароль, который создается на шаге 4.7
  • –генерировать ssh-ключи: создает SSH-ключи (открытые, закрытые) в каталоге .ssh в домашнем каталоге.
$ az aks create \
    --resource-group MC_yoshio-aks \
    --name yoshioAKSCluster1164 \
    --kubernetes-version 1.16.4 \
    --node-vm-size Standard_DS2_v2 \
    --node-count 3 \
    --location japaneast \
    --service-principal "884ac0da-****-****-****-c9e2d3fce495" \
    --client-secret  "03a0e079-****-****-****-a760333af0b0" \
    --generate-ssh-keys

Примечание: Приведенные выше команды предназначены для среды разработки и среды проверки. Для создания производственной среды вам потребуется больше опций, таких как виртуальная сеть, подсеть в сочетании с внешней службой, зона доступности для обеспечения доступности. Необходимо указать множество параметров. Смотрите ниже подробную информацию о команде az aks create.

См.:подробная информация о команде az aks

4.10. Установите команду kubectl и получите информацию о подключении AKS

Для того чтобы управлять AKS, вам необходимо использовать команду kubectl. Если вы впервые работаете с Kubernetes, в вашей операционной среде может отсутствовать команда kubectl. Если команда kubectl не установлена, выполните команду az aks install-cli, чтобы получить ее.

Получив команду kubectl, вы можете управлять AKS с помощью команды kubectl. Чтобы подключиться к созданному AKS, вам необходимо получить информацию о подключении. Поэтому выполните команду az aks get-учетные данные, чтобы получить информацию о подключении (учетные данные) для AKS.

# Install the kubectl command
$ az aks install-cli
Downloading client to "/usr/local/bin/kubectl" from "https://storage.googleapis.com/kubernetes-release/release/v1.17.4/bin/darwin/amd64/kubectl"
Please ensure that /usr/local/bin is in your search PATH, so the `kubectl` command can be found.
$ which kubectl 
/usr/local/bin/kubectl

# Obtain the connection infor(credential) for AKS
$ az aks get-credentials --resource-group MC_yoshio-aks --name yoshioAKSCluster1164
Merged "yoshioAKSCluster1164" as current context in /Users/yoterada/.kube/config

# Confirm which version of kubernetes is running
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T21:03:42Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.4", GitCommit:"224be7bdce5a9dd0c2fd0d46b83865648e2fe0ba", GitTreeState:"clean", BuildDate:"2019-12-13T20:40:52Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

4.11. Создать YAML развертывания

После оценки запущенных объявлений, чтобы запустить контейнер на AKS, пожалуйста, создайте файл YAML для развертывания?

Создайте следующий файл YAML и сохраните его как deployment.yaml.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: payara-config-service
spec:
  replicas: 2
  selector:
    matchLabels:
      app: payara-config-service
  template:
    metadata:
      labels:
        app: payara-config-service
        version: v1
        stage: develop
    spec:
      securityContext:
        runAsUser: 1000 
      containers:
      - name: payara-config-service
        image: containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0
        resources:
          requests:
            cpu: 100m
            memory: 1Gi
          limits:
            cpu: 200m
            memory: 1Gi

4.12. Применить YAML развертывания

После создания файла YAML развертывания, пожалуйста, примените файл yaml развертывания к среде AKS? Пожалуйста, выполните следующую команду, чтобы применить файл YAML.

$ kubectl apply -f deployment.yaml 
deployment.apps/payara-config-service created

4.13. Подтвердите поведение модуля

Если вы выполните команду “kubectl get po”, вы сможете проверить, что СТАТУС запущен, когда он был развернут правильно.

$ kubectl get po
NAME                                     READY   STATUS    RESTARTS   AGE
payara-config-service-85f5cdd768-42sh8   1/1     Running   0          28s
payara-config-service-85f5cdd768-fhjrh   1/1     Running   0          28s

Если статус выполнения не отображается, пожалуйста, выполните следующую команду, чтобы подтвердить причину?

$ kubectl describe po payara-config-service-85f5cdd768-42sh8  

Or
$ kubectl logs payara-config-service-85f5cdd768-42sh8  

Если статус Запущен, приложение запущено. однако доступ к приложению из-за пределов кластера AKS невозможен. Потому что нет общедоступной конечной точки или общедоступного IP-адреса, как показано ниже (10.244.2.3 – частный IP-адрес).

$ kubectl get po -o wide
NAME                                     READY   STATUS    RESTARTS   AGE   IP           NODE                                NOMINATED NODE   READINESS GATES
payara-config-service-85f5cdd768-42sh8   1/1     Running   0          12d   10.244.2.3   aks-nodepool1-14395993-vmss000002              
payara-config-service-85f5cdd768-fhjrh   1/1     Running   0          12d   10.244.1.5   aks-nodepool1-14395993-vmss000000              

Итак, чтобы получить доступ к приложению, пожалуйста, выполните следующую команду переадресации порта? Затем вы сможете получить доступ к приложению с локального хоста.

$ kubectl port-forward payara-config-service-85f5cdd768-42sh8 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

После выполнения команды переадресации порта, пожалуйста, откройте другой новый терминал и запустите команду curl (или откройте новый браузер), чтобы получить доступ к приложению. Если текст отображается так, как показано ниже, приложение работает правильно.

$ curl localhost:8080/app/data/config/injected
Config value as Injected by CDI Injected value

4.14. Установка и обновление переменных среды

Мы могли бы подтвердить, что приложение запущено с помощью описанных выше шагов, но поскольку переменные среды в это время не были установлены, в это время значение берется из файла свойств. Поэтому мы изменим YAML развертывания Kubernetes, чтобы принимать значения из переменных среды вне приложения без повторного развертывания.

Настройки YAML, которые необходимо добавить, следующие.

        env:
          - name: injected_value
            value: ENVIRONMENT VALUE

Измененный весь файл YAML выглядит следующим образом.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: payara-config-service
spec:
  replicas: 2
  selector:
    matchLabels:
      app: payara-config-service
  template:
    metadata:
      labels:
        app: payara-config-service
        version: v1
        stage: develop
    spec:
      securityContext:
        runAsUser: 1000 
      containers:
      - name: payara-config-service
        image: containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0
        env:
          - name: injected_value
            value: ENVIRONMENT VALUE
        resources:
          requests:
            cpu: 100m
            memory: 1Gi
          limits:
            cpu: 200m
            memory: 1Gi

После изменения вышеупомянутого файла YAML, пожалуйста, примените файл YAML.

$ kubectl apply -f  deployment.yaml 
deployment.apps/payara-config-service configured

После применения файла YAML он запустит новый модуль с текущим обновлением. Получите имя нового модуля и выполните команду переадресации порта для доступа локально.

# List of all Pods
$ kubectl get po
NAME                                    READY   STATUS    RESTARTS   AGE
payara-config-service-58cdfd6c7-gfvcl   1/1     Running   0          37s
payara-config-service-58cdfd6c7-hdm6c   1/1     Running   0          48s

# Port Forawrd for local access
$ kubectl port-forward payara-config-service-58cdfd6c7-gfvcl 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

После переадресации порта для нового модуля вы можете получить доступ к конечной точке с помощью команды curl или браузера. Затем будут отображены переменные среды, определенные в файле YAML.

$ curl http://localhost:8080/app/data/config/injected
Config value as Injected by CDI ENVIRONMENT VALUE

4.15. Получение информации о конфигурации с карты конфигурации Kubernetes

В Kubernetes мы можем централизованно управлять конфигурацией отдельно от управления контейнерами (deployment.yaml). Карта конфигурации

Поэтому мы можем настроить переменные среды в карте конфигурации.

Пожалуйста, создайте следующий файл конфигурации карты YAML и сохраните его как config map.yaml.

apiVersion: v1
kind: ConfigMap
metadata:
  name: microprofile-service-config
data:
  injected_value: "CONFIG MAP VALUE"

Далее, пожалуйста, примените карту конфигурации?

# Apply the Config Map
$ kubectl apply -f configmap.yaml 
configmap/microprofile-service-config createds

# Confirm the applied Config Map
$ kubectl get cm
NAME                          DATA   AGE
microprofile-service-config   1      37m

Затем, пожалуйста, измените файл YAML развертывания, чтобы ссылаться на значение карты конфигурации из модуля Kubernetes.

Суть изменений заключается в следующем.

        env:
          - name: injected_value
            valueFrom:
              configMapKeyRef:
                name: microprofile-service-config
                key: injected_value

Измененный YAML развертывания выглядит следующим образом.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: payara-config-service
spec:
  replicas: 2
  selector:
    matchLabels:
      app: payara-config-service
  template:
    metadata:
      labels:
        app: payara-config-service
        version: v1
        stage: develop
    spec:
      securityContext:
        runAsUser: 1000 
      containers:
      - name: payara-config-service
        image: containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0
        env:
          - name: injected_value
            valueFrom:
              configMapKeyRef:
                name: microprofile-service-config
                key: injected_value
        resources:
          requests:
            cpu: 100m
            memory: 1Gi
          limits:
            cpu: 200m
            memory: 1Gi

Пожалуйста, подайте заявку после изменения YAML развертывания? После подачи заявки, пожалуйста, подтвердите, что СТАТУС запущен? Пожалуйста, выполните переадресацию порта для доступа к модулю.

# Apply the Deployment YAML 
$ kubectl apply -f  deployment.yaml 
deployment.apps/payara-config-service configured

# List of all Pods 
$ kubectl get po
NAME                                     READY   STATUS    RESTARTS   AGE
payara-config-service-68bb7c8dfb-8tcbx   1/1     Running   0          22s
payara-config-service-68bb7c8dfb-f67x6   1/1     Running   0          20s

# Execute the port-forward to access to the Pod from local
$ kubectl port-forward payara-config-service-68bb7c8dfb-8tcbx 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

После выполнения команды переадресации порта, пожалуйста, получите доступ к конечной точке приложения. Затем вы можете подтвердить, что отображается значение, указанное в карте конфигурации (ЗНАЧЕНИЕ КАРТЫ КОНФИГУРАЦИИ).

$ curl http://localhost:8080/app/data/config/injected
Config value as Injected by CDI CONFIG MAP VALUE

Затем мы могли бы подтвердить, что можем получить значение из конфигурационной карты Kubernetes.

4.16. Обновите значения карты конфигурации и перезапустите модуль

Наконец, пожалуйста, подтвердите, как обновить значение конфигурации.

Обновите значение карты конфигурации следующим образом, которое настроено на шаге 4.15.

apiVersion: v1
kind: ConfigMap
metadata:
  name: microprofile-service-config
data:
  injected_value: "CONFIG MAP VALUE NEW"

После сохранения файла, пожалуйста, примените обновленную карту конфигурации? После его применения, пожалуйста, выполните команду описать, чтобы подтвердить, что значение изменилось правильно?

# Apply the new Config Map
$ kubectl apply -f configmap.yaml 
configmap/microprofile-service-config configured

# Confirm the value had modified correctly on the Config Map
$ kubectl describe cm microprofile-service-config
Name:         microprofile-service-config
Namespace:    default
Labels:       
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"v1","data":{"injected_value":"CONFIG MAP VALUE NEW"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"microprofile-...

Data
====
injected_value:
----
CONFIG MAP VALUE NEW
Events:  

После применения новой карты конфигурации, пожалуйста, получите доступ к конечной точке приложения? За это время вы можете подтвердить, что новые настройки не отражены. Потому что модуль Kubernetes считывает значение среды во время запуска, а не автоматически перезагружается. В результате он покажет старую информацию о конфигурации.

curl http://localhost:8080/app/data/config/injected
Config value as Injected by CDI CONFIG MAP VALUE

Поэтому вам необходимо перезапустить модуль, чтобы отразить информацию о настройках. Чтобы перезапустить модуль, пожалуйста, удалите существующий модуль? Кластер Kubernetes автоматически создаст и запустит новый модуль. ( Поскольку модуль гарантированно запускается для количества реплик в развертывании YAML)

После получения списка всех пэдов, пожалуйста, удалите один из модулей и дождитесь перезапуска нового модуля.

# List of all Pod 
$ kubectl get po
NAME                                     READY   STATUS    RESTARTS   AGE
payara-config-service-68bb7c8dfb-8tcbx   1/1     Running   0          4m24s
payara-config-service-68bb7c8dfb-f67x6   1/1     Running   0          4m22s

# Delete one of the Pod
$ kubectl delete po payara-config-service-68bb7c8dfb-8tcbx
pod "payara-config-service-68bb7c8dfb-8tcbx" deleted

# List of all Pod (payara-config-service-68bb7c8dfb-dx7sg is new created pod)
$ kubectl get po
NAME                                     READY   STATUS    RESTARTS   AGE
payara-config-service-68bb7c8dfb-dx7sg   1/1     Running   0          26s
payara-config-service-68bb7c8dfb-f67x6   1/1     Running   0          5m27s

Пожалуйста, выполните команду переадресации порта для доступа локально?

$ kubectl port-forward payara-config-service-68bb7c8dfb-dx7sg 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080

При доступе к конечной точке приложения вы можете подтвердить, что отображается обновленное значение (НОВОЕ ЗНАЧЕНИЕ КАРТЫ КОНФИГУРАЦИИ).

$ curl http://localhost:8080/app/data/config/injected
Config value as Injected by CDI CONFIG MAP VALUE NEW

Теперь мы могли бы подтвердить конфигурацию микропрофиля с помощью AKS.

Извлекая конфигурацию и управляя ею, мы можем динамически изменять назначение внешнего подключения без изменения исходного кода. Это значительно снижает затраты на тестирование и управление приложениями и приближает вас на один шаг к облачным приложениям.

Пожалуйста, наслаждайтесь!!

Оригинал: “https://dev.to/azure/microprofile-config-in-azure-kubernetes-service-37o6”