Cloud Native BuildpacksでビルドしたOCIイメージ(making/hello-cnb)をAzure Container Instancesにデプロイします。
目次
Resource Group作成
export TENANT_ID=****
export CLIENT_ID=****
export CLIENT_SECRET=****
export LOCATION="Japan East"
export RESOURCE_GROUP=hello-cnb
az login --username ${CLIENT_ID} \
--password ${CLIENT_SECRET} \
--service-principal \
--tenant ${TENANT_ID}
az group create --name ${RESOURCE_GROUP} --location "${LOCATION}"
アプリケーションのデプロイ
次のコマンドでアプリケーションをデプロイします。
az container create \
--resource-group ${RESOURCE_GROUP} \
--name hello-cnb \
--image making/hello-cnb:latest \
--dns-name-label hello-cnb \
--memory 0.7 \
--ports 8080 \
--environment-variables INFO_MESSAGE="Hello World\!"
az container logsのコマンドでログを確認します。
$ az container logs --resource-group ${RESOURCE_GROUP} --name hello-cnb
Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=88833K -XX:ReservedCodeCacheSize=240M -Xss1M -Xmx82758K (Head Room: 0%, Loaded Class Count: 13270, Thread Count: 250, Total Memory: 699998208)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.6.RELEASE)
2020-04-28 18:19:29.983 INFO 1 --- [ main] hello.HelloCnbApplication : Starting HelloCnbApplication on wk-caas-dbc4020958ba43c294a3f7278673934d-f2fcf56149c6687cb75cd7 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2020-04-28 18:19:29.993 INFO 1 --- [ main] hello.HelloCnbApplication : No active profile set, falling back to default profiles: default
2020-04-28 18:19:33.550 INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-04-28 18:19:34.458 INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 8080
2020-04-28 18:19:34.469 INFO 1 --- [ main] hello.HelloCnbApplication : Started HelloCnbApplication in 5.405 seconds (JVM running for 6.505)
指定したコンテナのメモリに合わせて、JVMのメモリが自動で設定されていることに注目してください。
コンテナのDNS名を変数に設定します。
DNS_NAME=$(az container show --resource-group ${RESOURCE_GROUP} --name hello-cnb --query ipAddress.fqdn --output tsv)
$ curl http://${DNS_NAME}:8080/actuator/health -w '\n'
{"status":"UP"}
$ curl http://${DNS_NAME}:8080/actuator/info -w '\n'
{"message":"Hello World!"}
メモリの調整
Buildpackに含まれるJava Buildpack Memory Calculatorの機能を使って、
自動設定されるJVMのメモリを調整し、少ないメモリ量(200MB)で起動できるようにします。
次のコマンドでアプリケーションをアップデートします。
az container delete --resource-group ${RESOURCE_GROUP} --name hello-cnb --yes
az container create \
--resource-group ${RESOURCE_GROUP} \
--name hello-cnb \
--image making/hello-cnb:latest \
--dns-name-label hello-cnb \
--memory 0.2 \
--ports 8080 \
--environment-variables \
JAVA_OPTS="-XX:ReservedCodeCacheSize=32M -Xss512k" \
BPL_JVM_THREAD_COUNT=20 \
BPL_JVM_HEAD_ROOM=5 \
INFO_MESSAGE="Hello World\!"
Azure Container InstancesでMemoryやCPUの値を変えるにはDelete => Createが必要です(!)
az container logs --resource-group ${RESOURCE_GROUP} --name hello-cnb でメモリの設定が次のように出力されていることを確認してください。
Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=88833K -Xmx43464K (Head Room: 5%, Loaded Class Count: 13270, Thread Count: 20, Total Memory: 199999488)
アプリケーションの削除
次のコマンドでアプリを削除します。
az container delete --resource-group ${RESOURCE_GROUP} --name hello-cnb --yes
az group delete --name ${RESOURCE_GROUP} --yes