Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como colocar em contêiner seus aplicativos Java para implantação no Kubernetes. Para obter diretrizes sobre memória de contêiner, memória de heap JVM, GCs (coletores de lixo) e núcleos de vCPU, consulte Conteinerizar seus aplicativos Java.
Determinar a SKU de VM apropriada para o pool de nós de Kubernetes
Determine se o pool de nós do Kubernetes ou os pools disponíveis para o cluster podem se ajustar à memória do contêiner e aos núcleos de vCPU que você pretende usar. Se o pool de nós puder hospedar o aplicativo, continue. Caso contrário, provisione um pool de nós apropriado para a quantidade de memória do contêiner e o número de núcleos de vCPU que você pretende utilizar.
O custo de um SKU de VM é proporcional ao número de núcleos e à quantidade de memória. Depois de determinar seu ponto de partida em termos de vCPUs e memória para uma instância de contêiner, determine se você pode atender às necessidades do aplicativo apenas dimensionando horizontalmente. Para sistemas confiáveis e sempre ativos, no mínimo duas réplicas devem estar disponíveis. Expandir vertical e horizontal conforme necessário.
Definir solicitações e limites da CPU
Se você precisar limitar a CPU, aplique o mesmo valor para limits e requests no arquivo de implantação. A JVM não ajusta dinamicamente seu runtime, como o GC e outros pools de threads. A JVM lê o número de processadores disponíveis somente durante o tempo de inicialização.
Dica
Defina o mesmo valor para solicitações de CPU e limites de CPU.
containers:
- image: myimage
name: myapp
resources:
limits:
cpu: "2"
requests:
cpu: "2"
Entender os processadores disponíveis para JVM
Quando a JVM do HotSpot no OpenJDK identifica que está em execução dentro de um contêiner, ela usa valores como cpu_quota e cpu_period para determinar quantos processadores estão disponíveis para ele. Em geral, qualquer valor até 1000m milicores é identificado como uma máquina de processador único. Qualquer valor entre 1001m e 2000m é identificado como um computador processador duplo e assim por diante. Essas informações estão disponíveis por meio da API Runtime.getRuntime().availableProcessors(). Alguns dos GCs simultâneos também podem usar esse valor para configurar seus threads. Outras APIs, bibliotecas e estruturas também podem usar essas informações para configurar pools de threads.
As cotas de CPU do Kubernetes estão relacionadas à quantidade de tempo que um processo gasta na CPU e não ao número de CPUs disponíveis para o processo. Runtimes multi-threaded, como a JVM, ainda podem usar vários processadores simultaneamente, com vários threads. Mesmo que um contêiner tenha um limite de uma vCPU, a JVM poderá ser instruída a ver dois ou mais processadores disponíveis.
Para informar a JVM do número exato de processadores que ele deve ver em um ambiente do Kubernetes, use o seguinte sinalizador JVM:
-XX:ActiveProcessorCount=N
Definir a solicitação de memória e os limites
Defina os limites de memória para a quantidade que você determinou anteriormente. Verifique se o número de limites de memória é a memória do contêiner e não o valor de memória de heap JVM.
Dica
Defina as solicitações de memória iguais aos limites de memória.
containers:
- name: myimage
image: myapp
resources:
limits:
memory: "4Gi"
requests:
memory: "4Gi"
Definir os argumentos JVM no arquivo de implantação
Lembre-se de definir a memória do heap da JVM para o valor que você determinou anteriormente. Recomendamos que você passe esse valor como uma variável de ambiente para que você possa alterá-lo facilmente sem a necessidade de recompilar a imagem do contêiner.
containers:
- name: myimage
image: myapp
env:
- name: JAVA_OPTS
value: "-XX:+UseParallelGC -XX:MaxRAMPercentage=75"
Simplificar o ajuste de JVM com o inicializador de comandos Azure para Java
As seções anteriores definem a contagem de processadores, o tamanho do heap e o GC manualmente por meio de sinalizadores JVM. Se você não quiser manter essas configurações, o inicializador de comandos Azure para Java (jaz) poderá aplicar padrões nativos de nuvem para você. Ele lê, ao iniciar, os limites de memória e CPU do cgroup do contêiner e então seleciona automaticamente o tamanho ideal da heap e os sinalizadores de GC mais apropriados.
Para usar a ferramenta, substitua o java comando jaz no comando de inicialização do contêiner. A ferramenta está incluída nas imagens de contêiner do Microsoft Build do OpenJDK, portanto, nenhuma configuração extra é necessária:
# Use any Microsoft Build of OpenJDK base image
FROM mcr.microsoft.com/openjdk/jdk:25-ubuntu
# Add your application.jar
COPY application.jar /application.jar
# Use jaz to launch your Java application
CMD ["jaz", "-jar", "application.jar"]
Para obter opções de instalação, ambientes com suporte e detalhes de configuração, consulte Azure Inicializador de Comandos para Java.
Próximas etapas
- Estratégias de conteinerização Java
- Inicializador de comando Azure para Java
- Jakarta EE em runtimes de contêiner do Azure
- Oracle WebLogic Server
- IBM WebSphere Liberty, Open Liberty e WebSphere tradicional