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

Служба Azure Kubernetes 環境で Конфигурация микропрофиля 動作検証

1. В среде службы Azure Kubernetes приложение для проверки поведения конфигурации микропрофиля предоставляет информацию о подключении (DB… Помеченный как java, микропрофиль, azure.

1. Служба Azure Kubernetes 環境で Конфигурация микропрофиля 動作検証

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

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

Twelve-Factorは 設定をコードから厳密に分離すること を要求する。

Конфигурация МИКРОПРОФИЛЯ позволяет извлекать информацию о конфигурации из различных местоположений, таких как 。 Эти местоположения конфигурации называются configsources, и если одно и то же свойство определено более чем в одном configSource, вы применяете политику и указываете, какие значения являются допустимыми.

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

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

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

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

Конфигурация микропрофиля:概要

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

Интерфейс конфигурации микропрофиля API 1.4

Конфигурационный источник:優先順位

Конфигурация:、登録されたorg.eclipse.microprofile.config.spi. Он состоит из информации, собранной из configSource. Эти конфигурационные источники сортируются в соответствии с порядком. Это позволяет вам переопределять настройки, которые менее важны извне.

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

  • System.GetProperties()(優先順位)
  • System.getenv()(優先順位= 300)
  • ClassPath上の мета-инф/microprofile-config файл.свойства、各ファイル中に config_ordinal プロパティを設定して個別に優先順位を設定可能)

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

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

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

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

1. Получение информации о программной конфигурации

В следующем примере показано, как программно получить экземпляр конфигурации и получить информацию о конфигурации.

public class  MyAppWithGetConfigFromProgram {

    public Response invokeMicroserviceWithConfig() {
        // Config インスタンスの取得
        Config config = ConfigProvider.getConfig();
        // マイクロサービス A の URL を取得
        String microserviceA = config.getValue("URL_OF_MICROSERVICE_A", String.class);
        // マイクロサービス A の呼び出し
        return invokeMicroservice(microserviceA);
    }
}

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

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

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

@ApplicationScoped
public class MyAppWithGetConfigFromAnnotation {

    @Inject
    private Config config;

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

    //The following code injects an Optional value of myprj.some.port property.
    //Contrary to natively injecting the configured value, this will not lead to a
    //DeploymentException if the value is missing.
    @Inject
    @ConfigProperty(name="myprj.some.port")
    private Optional somePort;
}

Пример приложения Конфигурации МИКРОПРОФИЛЯ

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

Откройте microprofile Starter и создайте проект микропрофиля.

Когда вы нажимаете ссылку (СКАЧАТЬ), mpconfigsample.Вы можете скачать 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 GET следующим образом, будет возвращена строка, описанная в инструкции return.

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

Фактическая конфигурация находится в microprofile-config.Каталог META_INF.Он указан в файле свойств.

# プロパティ・ファイルの場所
└── src
    └── main
        ├── resources
        │   └── META-INF
        │       └── microprofile-config.properties

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

# プロパティ・ファイルに設定された値
injected.value=Injected value
value=lookup value

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

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

# プロジェクトのビルド
$ mvn clean package

# アプリケーションの実行
$ 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] [] [情報] [] [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] [] [情報] [] [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, чтобы проверить работу. Если он работает правильно, строка настроек (введенное значение, значение), взятая из файла свойств, будет отображаться, как показано ниже.

# アノテーションで実装されたエンドポイントへの呼び出し
$ curl localhost:8080/data/config/injected
Config value as Injected by CDI Injected value

# プログラムで実装されたエンドポイントへの呼び出し
$ curl localhost:8080/data/config/lookup
Config value from ConfigProvider lookup value

Микропрофиль позволяет переопределять настройки в файле свойств с помощью системных свойств.Затем он устанавливает переменную среды, присваивает значение переменной среды свойству Java system и выполняет ее.Вы можете использовать microprofile-config.Вы можете переопределить значение, заданное в файле “свойства”, и проверить, отображается ли значение, заданное в переменной окружения.

# 環境変数の設定 [.(ドット)を _(アンダーバー)に置き換えて設定]
$ export injected_value="Environment Value"

# 環境変数を Java のシステム・プロパティに設定してアプリを実行
$ java -D"$injected_value" -jar target/MPConfigSample-microbundle.jar

# アプリケーションの動作確認
$ curl http://localhost:8080/data/config/injected
Config value as Injected by CDI Environment Value

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

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

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

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, чтобы создать образ контейнера.

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

# コマンド実行時のコンソール出力例
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=hogehoge -it tyoshio2002/payara-config-sample:1.0

# コマンド実行時のコンソール出力例
..... (中略)
[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 hogehoge

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

4. Выполняется в среде службы Azure Kubernetes

Поскольку я смог проверить работу в локальной среде Docker, Проверьте работу в среде Azure Kubernetes Service .Проверьте работу в соответствии со следующей процедурой.

  1. Создайте группу ресурсов для реестра контейнеров Azure
  2. Реестр контейнеров Azure を作成
  3. Реестр контейнеров Azure ( Azure Container Registry ) – реестр контейнеров Azure ( Azure Container Registry )
  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 container.So , создайте группу ресурсов для создания реестра контейнеров 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 Container Registry Реестр контейнеров を作成ししす。。

  • — имя Укажите имя реестра контейнера в
  • -Укажите -resource-group в качестве имени группы ресурсов, созданной выше
  • –артикул указывает один из “Базовых”, “Стандартных” или “Премиум”.
  • -Установите для параметра -admin・enabled значение 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 Container Registry ) – реестр контейнеров Azure ( Azure Container Registry )

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

  • — имя Укажите имя реестра контейнера в
  • -Укажите -resource-group в качестве имени группы ресурсов, созданной выше
$ 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 и нажмите на изображение

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

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

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

# Azure Container Registry にログイン
$ docker login containerreg4yoshio.azurecr.io -u containerreg4yoshio
Password: 
Login Succeeded

# Docker コンテナのタグ付け
$ docker tag tyoshio2002/payara-config-sample:1.0 containerreg4yoshio.azurecr.io/tyoshio2002/payara-config-sample:1.0

# Azure Container Registry にタグ付けしたイメージを Push
$ 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).Сначала создайте группу ресурсов, для которой вы хотите создать 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

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

$ 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. Вы можете использовать принципал службы Azure Active Directory (Azure AD) для получения образа контейнера, который находится в реестре контейнеров Azure.

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

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

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

  • –правопреемник указывает AppID (“AppID”: “884ac0da-* ** *-c9e2d3fce495″,)
  • –область применения, ИДЕНТИФИКАТОР ACR, ИДЕНТИФИКАТОР Указывать
  • –роль 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.

  • –resource-group задает имя группы ресурсов, созданной в 4.6
  • — имя Задает имя кластера AKS
  • –kubernetes-version указывает версию Kubernetes кластера AKS
  • –размер узла-виртуальной машины Определяет размер виртуальной машины
  • –node-count определяет количество рабочих узлов Kubernetes
  • — местоположение Укажите Восточную Японию
  • –service-principal указывает идентификатор приложения при создании участника службы 4.7
  • –client-secret задает пароль при создании участника службы 4.7
  • –generate-ssh-keys используется при создании 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

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

Ссылка: детали команды az aks

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

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

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

# kubectl コマンドのインストール
$ 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

# AKS の接続情報(クレデンシャル)の取得
$ az aks get-credentials --resource-group MC_yoshio-aks --name yoshioAKSCluster1164
Merged "yoshioAKSCluster1164" as current context in /Users/yoterada/.kube/config

# kubernetes のクライアントとサーバのバージョン確認
$ 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 яп

Затем создайте YAML для вашего развертывания, чтобы контейнер, созданный вами в AKS, работал. Создайте файл 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 разверните его в среде AKS.Выполните следующую команду, чтобы применить файл YAML.

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

4.13. Проверьте работу модуля

Правильно, я могу проверить, что команда kubectl get po имеет статус Запущенной при применении файла YAML развертывания.

$ 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  

もしくは
$ kubectl logs payara-config-service-85f5cdd768-42sh8  

Если статус Запущен, приложение запущено.Чтобы проверить работу приложения из локальной среды, пожалуйста, выполните следующую команду port-forard.

$ 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, скользящее обновление запускает новый модуль.Получите имя недавно запущенного модуля и запустите команду port-foward, чтобы к нему можно было получить доступ локально.

# Pod の一覧を取得
$ 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 で k8s 上で動作する Pod の Port をローカルにフォワード
$ 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 управление контейнерами (развертывание.Вы можете отделить конфигурацию от yaml (yaml) и централизованно управлять ею. Предусмотрен механизм Config Map//.Следовательно, конфигурация переменных среды, заданных в YAML развертывания, находится за пределами карты конфигурации, а информация о конфигурации управляется в Карте конфигурации.

Создайте файл YAML для приведенной ниже карты конфигурации.Пожалуйста, сохраните его как yaml.

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

Затем примените настройки карты конфигурации.

# Config Map を適用
$ kubectl apply -f configmap.yaml 
configmap/microprofile-service-config createds

# Config Map の設定が追加されている事の確認
$ kubectl get cm
NAME                          DATA   AGE
microprofile-service-config   1      37m

Затем измените содержимое файла Deployment 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 развертывания и примените его. Убедитесь, что СТАТУС запущен после его применения. Перенаправьте порт, чтобы вы могли получить доступ к перезапущенному модулю локально.

# 修正した Deployment YAML の適用
$ kubectl apply -f  deployment.yaml 
deployment.apps/payara-config-service configured

# 再起動した Pod の一覧を取得
$ 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

# ローカルからアクセスするためにポート・フォワードを実行
$ kubectl port-forward payara-config-service-68bb7c8dfb-8tcbx 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

После выполнения переадресации портов получите доступ к конечной точке приложения.Затем вы можете подтвердить, что отображается значение, указанное в Config Map (ЗНАЧЕНИЕ CONFIG MAP).

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

Выше вы можете получить значения конфигурации из карты конфигурации и ссылаться на них из приложения.

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

Наконец, узнайте, как изменить настройки.

4.15 “Карта конфигурации” (ЗНАЧЕНИЕ КАРТЫ КОНФИГУРАЦИИ “НОВОЕ”), “Карта конфигурации”, “Карта конфигурации”, “Карта конфигурации”, “Карта конфигурации”, “Карта КОНФИГУРАЦИИ”, “КАРТА КОНФИГУРАЦИИ”.

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

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

# 修正した Config Map を適用
$ kubectl apply -f configmap.yaml 
configmap/microprofile-service-config configured

# 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 будут считывать только значения, установленные в Config Map при запуске.Поскольку изменения карты конфигурации проверяются и не перезагружаются автоматически, при доступе к уже запущенному модулю отображается старая информация о конфигурации.

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

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

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

# 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

# 特定の Pod を削除
$ kubectl delete po payara-config-service-68bb7c8dfb-8tcbx
pod "payara-config-service-68bb7c8dfb-8tcbx" deleted

# Pod の一覧を取得(payara-config-service-68bb7c8dfb-dx7sg が新しい 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

Когда вы получаете доступ к конечной точке приложения после следующего порта, вы можете увидеть, что отображается значение, которое вы обновили в Config Map (ЗНАЧЕНИЕ CONFIG MAP НОВОЕ).

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

Благодаря этому я смог проверить работу конфигурации микропрофиля в среде AKS.

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

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