Aracılığıyla paylaş


Kubernetes için Java uygulamalarınızı kapsayıcıya alma

Bu makalede, Kubernetes'te dağıtım için Java uygulamalarınızı kapsayıcıya alma işlemleri açıklanmaktadır. Kapsayıcı belleği, JVM yığın belleği, çöp toplayıcıları (GC) ve vCPU çekirdekleri hakkında yönergeler için bkz. Java uygulamalarınızıkapsayıcıya alma.

Kubernetes düğüm havuzu için uygun VM SKU'su belirleme

Kubernetes düğüm havuzunun veya kümeniz için kullanılabilir havuzların kullanmayı planladığınız kapsayıcı belleğine ve vCPU çekirdeklerine sığıp sığmayacağını belirleyin. Düğüm havuzu uygulamayı barındırabiliyorsa devam edin. Aksi takdirde, kapsayıcı belleği miktarına ve hedeflediğiniz vCPU çekirdeği sayısına uygun bir düğüm havuzu sağlayın.

VM SKU'sunun maliyetinin çekirdek sayısı ve bellek miktarıyla orantılı olduğunu unutmayın. Bir kapsayıcı örneği için başlangıç noktanızı vCPU'lar ve bellek açısından belirledikten sonra, yalnızca yatay ölçeklendirme ile uygulamanızın gereksinimlerini karşılayıp karşılayamayacağınızı belirleyin. Güvenilir, her zaman açık sistemler için en az iki çoğaltma kullanılabilir olmalıdır. Gerektiğinde ölçeği artırma ve genişletme.

CPU isteklerini ve sınırlarını ayarlama

CPU'yu sınırlamanız gerekiyorsa, dağıtım dosyasındaki hem limits hem de requests için aynı değeri uyguladığınıza emin olun. JVM, GC ve diğer iş parçacığı havuzları gibi çalışma zamanını dinamik olarak ayarlamaz. JVM, yalnızca başlangıç zamanında kullanılabilen işlemci sayısını okur.

İpucu

CPU istekleri ve CPU sınırları için aynı değeri ayarlayın.

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

JVM kullanılabilir işlemcilerini anlama

OpenJDK'daki HotSpot JVM kapsayıcı içinde çalıştığını belirlediğinde, kullanabileceği işlemci sayısını belirlemek için cpu_quota ve cpu_period gibi değerleri kullanır. Genel olarak, 1000m milicore'a kadar olan tüm değerler tek bir işlemci makinesi olarak tanımlanır. 1001m ile 2000m arasındaki tüm değerler çift işlemcili makine olarak tanımlanır ve bu şekilde devam eder. Bu bilgiler,Runtime.getRuntime().availableProcessors() API'sinde kullanılabilir. Eşzamanlı GC'lerden bazıları da iş parçacıklarını yapılandırmak için bu değeri kullanabilir. Diğer API'ler, kitaplıklar ve çerçeveler de iş parçacığı havuzlarını yapılandırmak için bu bilgileri kullanabilir.

Kubernetes CPU kotaları, işlemin CPU'da harcadığı süreyle ilgilidir ve işlem için kullanılabilir CPU sayısıyla ilgili değildir. JVM gibi çok iş parçacıklı çalışma zamanları, birden çok iş parçacığıyla aynı anda birden çok işlemci kullanmaya devam edebilir. Kapsayıcının bir vCPU sınırı olsa bile, JVM'ye iki veya daha fazla kullanılabilir işlemci görmesi talimatı verilmektedir.

Bir Kubernetes ortamında görmesi gereken işlemci sayısını JVM'ye bildirmek için aşağıdaki JVM bayrağını kullanın:

-XX:ActiveProcessorCount=N

Bellek isteği ve sınırları ayarlama

Bellek sınırlarını daha önce belirlediğiniz miktara ayarlayın. Bellek sınırı değerinin, kapsayıcı belleği ifade ettiğinden ve JVM yığın bellek değeri olmadığından emin olun.

Bahşiş

Bellek isteklerini bellek sınırlarına eşit olarak ayarlayın.

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

Dağıtım dosyasında JVM bağımsız değişkenlerini ayarlayın.

JVM yığın belleğini daha önce belirlediğiniz miktara ayarlamayı unutmayın. Kapsayıcı görüntüsünü yeniden oluşturmanıza gerek kalmadan kolayca değiştirebilmeniz için bu değeri ortam değişkeni olarak geçirmenizi öneririz.

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

Sonraki adımlar