Kubernetes용 Java 애플리케이션 컨테이너화

이 문서에서는 Kubernetes에 배포하기 위해 Java 애플리케이션을 컨테이너화하는 방법을 설명합니다.

컨테이너 메모리, JVM 힙 메모리, GC(가비지 수집기) 및 vCPU 코어에 대한 지침은 Java 애플리케이션 컨테이너화를 참조 하세요.

Kubernetes 노드 풀에 적합한 VM SKU 확인

클러스터에 사용할 수 있는 Kubernetes 노드 풀 또는 풀이 사용하려는 컨테이너 메모리 및 vCPU 코어에 맞을 수 있는지 여부를 결정합니다. 노드 풀이 애플리케이션을 호스트할 수 있는 경우 계속 진행합니다. 그렇지 않으면 컨테이너 메모리 양과 대상으로 하는 vCPU 코어 수에 적합한 노드 풀을 프로비전합니다.

VM SKU의 비용은 코어 수와 메모리 양에 비례합니다. 하나의 컨테이너 인스턴스에 대한 vCPU 및 메모리 측면에서 시작점을 확인한 후에는 수평 크기 조정만으로 애플리케이션의 요구 사항을 충족할 수 있는지 여부를 결정합니다. 신뢰할 수 있는 Always-On 시스템의 경우 최소 2개의 복제본(replica) 사용할 수 있어야 합니다. 필요에 따라 스케일 업 및 스케일 아웃합니다.

CPU 요청 및 제한 설정

CPU를 제한해야 하는 경우 배포 파일과 requests 둘 다 limits 에 동일한 값을 적용해야 합니다. JVM은 GC 및 기타 스레드 풀과 같은 런타임을 동적으로 조정하지 않습니다. JVM은 시작 시간 동안에만 사용할 수 있는 프로세서 수를 읽습니다.

CPU 요청 및 CPU 제한에 대해 동일한 값을 설정합니다.

containers:
- image: myimage
  name: myapp
  resources:
    limits:
      cpu: "2"
    requests:
      cpu: "2"

JVM 사용 가능한 프로세서 이해

OpenJDK의 HotSpot JVM이 컨테이너 내에서 실행 중임을 식별하면 이러한 값을 cpu_quotacpu_period 사용하고 사용 가능한 프로세서 수를 결정합니다. 일반적으로 최대 1000m 밀리코어 값은 단일 프로세서 컴퓨터로 식별됩니다. 사이의 1001m2000m 모든 값은 이중 프로세서 컴퓨터 등으로 식별됩니다. 이 정보는 API Runtime.getRuntime().availableProcessors()를 통해 사용할 수 있습니다. 이 값은 일부 동시 GC에서 스레드를 구성하는 데 사용할 수도 있습니다. 다른 API, 라이브러리 및 프레임워크는 이 정보를 사용하여 스레드 풀을 구성할 수도 있습니다.

Kubernetes CPU 할당량은 프로세스에서 사용할 수 있는 CPU 수가 아니라 프로세스가 CPU에 소비하는 시간과 관련이 있습니다. JVM과 같은 다중 스레드 런타임은 여러 스레드와 함께 여러 프로세서를 동시에 사용할 수 있습니다. 컨테이너에 하나의 vCPU 제한이 있더라도 JVM은 두 개 이상의 사용 가능한 프로세서를 확인하도록 지시할 수 있습니다.

Kubernetes 환경에서 표시되는 프로세서의 정확한 수를 JVM에 알리려면 다음 JVM 플래그를 사용합니다.

-XX:ActiveProcessorCount=N

메모리 요청 및 제한 설정

메모리 제한을 이전에 결정한 양으로 설정합니다. 메모리 제한 번호가 컨테이너 메모리이고 JVM 힙 메모리 값이 아닌지 확인합니다.

메모리 요청을 메모리 제한과 동일하게 설정합니다.

containers:
  - name: myimage
    image: myapp
    resources:
      limits:
        memory: "4Gi"
      requests:
        memory: "4Gi"

배포 파일에서 JVM 인수 설정

JVM 힙 메모리를 이전에 결정한 양으로 설정해야 합니다. 컨테이너 이미지를 다시 빌드하지 않고도 쉽게 변경할 수 있도록 이 값을 환경 변수로 전달하는 것이 좋습니다.

containers:
  - name: myimage
    image: myapp
    env:
    - name: JAVA_OPTS
      value: "-XX:+UseParallelGC -XX:MaxRAMPercentage=75"

다음 단계