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,
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
- java kapsayıcılama stratejilerini
- Azure kapsayıcı çalışma zamanlarında Jakarta EE
- Oracle WebLogic Server
- IBM WebSphere Liberty, Open Liberty ve geleneksel WebSphere