Ölçeklenebilirlik kavramları

Tamamlandı

Ölçeklendirme çözümünü bulmadan önce ölçeklenebilirliğin ne olduğunu ve Kubernetes uygulamalarına nasıl uygulandığını anlamanız gerekir.

Bu ünitede bazı ölçeklenebilirlik kavramlarını gözden geçireceğiz.

Ölçeklenebilirlik

Ölçeklenebilirlik , bir uygulamanın veya sistemin daha fazla kaynak ekleyerek artan miktarda çalışmayı işleyebilmesini açıklar.

Örnek senaryomuzda, artışla karşılaşan çalışma miktarı müşteri isteklerinin sayısıdır. Eklenen kaynakların miktarı iki şekilde gösterilebilir: dikey ölçeklenebilirlik ve yatay ölçeklenebilirlik.

Dikey ölçeklenebilirlik

Dikey ölçeklenebilirlik veya ölçeği artırma, bellek veya CPU gücü gibi daha fazla fiziksel kaynak ekleyerek sistemin ölçeklendirildiğini ifade eder. Örneğin, şirketinizin web sitesi çok fazla bellek tüketiyorsa, aynı temel uygulamayı tutarken VM örneğinizi daha fazla bellek içerecek şekilde güncelleştirebilirsiniz.

Vertical scaling diagram.

Kısacası dikey ölçeklendirme, vm boyutunu artırmayı ve uygulama sayısını aynı tutmayı içerir. Çok fazla işlem gücü gerektiren ancak daha küçük parçalara ayrılamayacak kadar maliyetli olan monolitik uygulamalarınız varsa bu yaklaşım değerlidir. Bu uygulamalar, dağıtılmış sistemlerin aksine çoğunlukla VM'lerde barındırılır.

Daha yönetilebilir bir maliyete rağmen, çok büyük VM'ler çok pahalı olabilir. Daha fazla işlem gücü eklemenin maliyeti, küçük VM'leri çoğaltma maliyetinden daha yüksektir. Tek bir VM'ye ekleyebileceğiniz kaynak sayısının üst sınırı vardır; başka bir deyişle, üst sınıra ulaştıktan sonra VM'yi yinelemeniz gerekir.

Yatay ölçeklenebilirlik

Yatay ölçeklenebilirlik veya ölçeği genişletme, uygulamayı çoğaltarak ve yükü uygulama örnekleri arasında dengeleyerek sistemin ölçeklendirileceğini ifade eder.

Horizontal scaling diagram.

Yatay ölçeklendirme, AKS'de dağıtılan uygulamalar ve durum bilgisi olmayan sistemler gibi dağıtılmış uygulamalar için değerlidir çünkü tek bir VM'de aynı uygulamayla birkaç kapsayıcı çalıştırabilirsiniz. Ölçeği genişletme, tek bir VM için ödeme yaparken en fazla kaynağı ayıklamanıza olanak tanır.

Örnek senaryomuzda, şirket siteniz durum bilgisi olmayan bir sitedir. Bu, ölçeği genişletmenin en iyi eylem kursu olduğu anlamına gelir. Kubernetes, dağıtımlarınızın ölçeğini genişletmenizi sağlayan HorizontalPodAutoscaler (HPA) adlı kullanıma açık bir kaynak sağlar.

Kubernetes'te el ile ölçeklenebilirlik

HPA'yı ele almadan önce Kubernetes uygulamasını el ile ölçeklendirmeyi gözden geçirelim.

Her dağıtım, ReplicaSet adlı başka bir kaynağa bağlıdır. ReplicaSet, "istenen çoğaltma durumunu" korumaktan ve istenen durumu gerçek durumla aynı tutmak için gerçek uygulamanın ölçeğini daraltmak veya dışarı çıkarmaktan sorumludur. Dağıtım belirtimindeki anahtar aracılığıyla spec.replicas bir dağıtımdaki çoğaltma sayısını denetleyebilirsiniz. Bu anahtar, temel alınan ReplicaSet içindeki istenen çoğaltma sayısını ayarlar ve çoğaltma denetleyicisini herhangi bir zamanda bu sayıda çoğaltmayı tutmaya zorlar.

Ayrıca komutuyla kubectl scale deploy/contoso-website --replicas <number> bir dağıtımdaki çoğaltma sayısını denetleyebilirsiniz. Bu komut, bir dağıtımda istenen çoğaltma sayısını dinamik olarak değiştirir ve uygulamayı içeri veya dışarı ölçeklendirir.

HorizontalPodAutoscaler (HPA)

HPA, kümedeki podlara yatay ölçeklenebilirlik sağlayan yerel Kubernetes 1.8+ kaynağıdır. ölçüm API'sini istenen çoğaltma sayısındaki değişiklikler için 30 saniyede bir izler. İstenen çoğaltma sayısı geçerli çoğaltma sayısından farklıysa, HPA nesnelerini yöneten denetleyici yöneticisi dağıtımın ölçeğini daraltabilir veya genişletebilir.

HorizontalPodAutoscaling design diagram.

HPA'lar Kubernetes'teki API grubuyla autoscaling çalışır. Bu API grubunun iki sürümü vardır: v1 ve v2. Sürüm, v1 dağıtımın yalnızca CPU ölçümlerine göre ölçeklendirilmesine olanak tanır. Sürüm, v2 hem CPU hem de belleğin yerel olarak izlenmesine izin verir. Bu modülde v2 sürümünü kullanacağız.

Her HPA, HPA bildiriminin spec.scaleTargetRef anahtarında tanımlanan bir ölçek başvurusuna eklenir. DaemonSets gibi ölçeklendirilmeyen nesnelere ölçeklendirme uygulamak mümkün olmadığından, bu ölçek başvurusunun ölçeklendirilebilmesi için temel podları olması gerekir, aksi takdirde HPA çalışmaz.

Her podda kendi belirtiminde ayarlanmış bir kaynak isteği olması önemlidir. HPA algoritması ölçümleri doğru hesaplayamıyor ve bu ayar olmadan kaynak kullanımını belirleyemiyor. Bu sınırlamayı spec.template.spec.containers[].resources , aşağıdaki örnekte gösterildiği gibi dağıtım bildirimindeki anahtar aracılığıyla ayarlayabilirsiniz:

spec:
  template:
    spec:
      containers:
        - resources:
            requests:
              cpu: 250m
              memory: 256M
            limits:
              cpu: 500m
              memory: 512M

Örnek HPA bildirimi

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Bilgilerinizi kontrol edin

1.

Yatay ölçeklendirme nedir?

2.

HpA'ya bağlı podlarda bir kaynak isteğinin ayarlanması neden önemlidir?

3.

Durum bilgisi olmayan uygulamalar için dikey ölçeklendirme neden daha az önerilir?