Eventos
17 de mar., 21 - 21 de mar., 10
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraNão há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
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.
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.
Tenha em mente que 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.
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"
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
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"
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"
Eventos
17 de mar., 21 - 21 de mar., 10
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agora