Ölçeklenebilirlik kavramları
Ö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.
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.
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.
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