1. Конфигурация микропрофиля в службе Azure Kubernetes
Приложение должно отображать конфигурацию внешней системы, такую как информация о подключении (БД и внешняя конечная точка HTTP). Потому что существует разница в настройках среды между средой разработки, средой тестирования и производственной средой. Если вы отделите конфигурацию от исходного кода программы, вы можете легко изменить настройки и записать настройки в файл настроек. При записи во внешний файл настроек вам не нужно редактировать исходный код приложения для переключения места назначения подключения, и вы можете использовать тот же исходный код без теста.
Исключение информации о конфигурации очень важно для создания облачных приложений. ” См.: Двенадцать факторов iii. Конфигурация : Сохраните конфигурацию в среде”
Twelve-Factor strict separation of config from code.
С помощью конфигурации микропрофиля информация о конфигурации может быть получена из различных мест. Эти местоположения конфигурации называются источниками конфигурации, и если одно и то же свойство определено более чем в одном источнике конфигурации, примените политику, чтобы указать, какие значения допустимы.
- Из системных свойств виртуальной машины Java
- Переменные среды операционной системы
- Из внешних файлов конфигурации (.properties, .xml)
- Внешние источники данных, такие как LDAP, БД и хранилища значений ключей
В некоторых ситуациях может потребоваться динамически переключать некоторые источники данных. Затем измененное значение должно использовать обновленное содержимое программы без перезапуска приложения. Чтобы соответствовать этим требованиям, конфигурация микропрофиля делает настроенные значения доступными сразу после изменения.
О времени выполнения конфигурации микропрофиля
Конфигурация микропрофиля определяет только API и это не включает в себя реализацию. Реализация конфигурации микропрофиля предоставляется отдельно каждым поставщиком реализации микропрофиля, как показано ниже.
- Конфигурации Apache Geronimo
- WebSphere Свобода
- Сервер Payara и микро-сервер Payara
- Дикая муха и Колючий хвост
- Конфигурация микропрофиля microban ™
Обзор конфигурации микропрофиля
Конфигурация микропрофиля состоит из нескольких 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 OptionalportOfMicroserviceA; }
Пример применения конфигурации микропрофиля
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 .
Ниже приведена процедура подтверждения.
- Создайте группу ресурсов для реестра контейнеров Azure
- Создать реестр контейнеров Azure
- Подтвердите пароль реестра контейнеров Azure
- Войдите в реестр контейнеров Azure и нажмите на изображение
- Подтвердите изображение, которое будет отправлено в реестр контейнеров Azure
- Создать группу ресурсов для службы Azure Kubernetes
- Создать участника службы для службы Azure Kubernetes
- Предоставьте ACR разрешение на чтение, чтобы AKS могли ссылаться на ресурсы ACR
- Создать AKS
- Установите команду kubectl и получите информацию о подключении AKS
- Создать YAML развертывания
- Применить YAML развертывания
- Подтвердите поведение модуля
- Установка и обновление переменных среды
- Получение информации о конфигурации с карты конфигурации Kubernetes
- Обновите значения карты конфигурации и перезапустите модуль
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-vmss000002payara-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”