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' ler) 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, hem hem de limits
requests
dağıtım dosyasında 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.
Bahşiş
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 bir kapsayıcı içinde çalıştığını belirlediğinde, ve gibi cpu_quota
cpu_period
değerleri kullanarak kullanılabilir işlemci sayısını belirler. Genel olarak, milicore değerine kadar 1000m
olan tüm değerler tek bir işlemci makinesi olarak tanımlanır. ile 2000m
arasındaki 1001m
herhangi bir değer çift işlemcili makine olarak tanımlanır ve benzeri. Bu bilgiler, API Runtime.getRuntime().availableProcessors() aracılığıyla kullanılabilir. Bu değer, iş parçacıklarını yapılandırmak için bazı eşzamanlı GC'ler tarafından da kullanılabilir. 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şlemciyi 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ı verilebilir.
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ırları numarasının kapsayıcı belleği ve JVM yığın bellek değeri DEĞİl olduğundan 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 ayarlama
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 stratejileri
- Azure kapsayıcı çalışma zamanlarında Jakarta EE
- Oracle WebLogic Server
- IBM WebSphere Liberty, Open Liberty ve geleneksel WebSphere