Koncepty škálovatelnosti

Dokončeno

Než najdete řešení škálování, musíte pochopit, jaká škálovatelnost je a jak se vztahuje na aplikace Kubernetes.

V této lekci si projdeme některé koncepty škálovatelnosti.

Škálovatelnost

škálovatelnosti popisuje schopnost aplikace nebo systému zvládnout rostoucí množství práce přidáním dalších prostředků.

V našem ukázkovém scénáři je množství práce, které se zvyšuje, počet požadavků zákazníků. Množství přidaných prostředků lze reprezentovat dvěma způsoby: vertikální škálovatelnost a horizontální škálovatelnosti.

Vertikální škálovatelnost

Vertikální škálovatelnost nebo vertikální navýšení kapacityoznačuje škálování systému přidáním dalších fyzických prostředků, jako je paměť nebo výkon procesoru. Pokud například web vaší společnosti spotřebovává příliš mnoho paměti, můžete instanci virtuálního počítače aktualizovat tak, aby zahrnovala více paměti a přitom zachovat stejnou podkladovou aplikaci.

diagram vertikálního měřítka

Vertikální škálování stručně řečeno zahrnuje zvětšení velikosti virtuálního počítače a zachování stejného počtu aplikací. Tento přístup je cenný, pokud máte monolitické aplikace, které vyžadují velké množství výpočetního výkonu, ale jsou příliš nákladné na rozdělení na menší části. Tyto aplikace jsou většinou hostované na virtuálních počítačích, nikoli v distribuovaných systémech.

Navzdory více spravovatelným nákladům se velmi velké virtuální počítače můžou stát velmi nákladné. Náklady na přidání dalšího výpočetního výkonu jsou vyšší než náklady na duplikování malých virtuálních počítačů. Existuje horní limit počtu prostředků, které můžete přidat do jednoho virtuálního počítače, což znamená, že po dosažení horní hranice musíte virtuální počítač nakonec duplikovat.

Horizontální škálovatelnost

Horizontální škálovatelnost nebo horizontální navýšení kapacityodkazuje na škálování systému duplikováním aplikace a vyrovnáváním zatížení napříč instancemi aplikace.

horizontální diagram měřítka.

Horizontální škálování je cenné pro distribuované aplikace, jako jsou aplikace nasazené v AKS, a bezstavové systémy, protože v jednom virtuálním počítačimůžete spustit několik kontejnerů se stejnou aplikací. Škálování umožňuje využít co nejvíce prostředků při placení za jeden virtuální stroj.

V našem ukázkovém scénáři je váš firemní web bezstavový. To znamená, že rozšíření kapacity je nejlepší postup. Kubernetes poskytuje vnořený prostředek označovaný jako HorizontalPodAutoscaler (HPA), který vám umožňuje škálovat vaše nasazení.

Ruční škálovatelnost v Kubernetes

Než se podíváme na HPA, pojďme se podívat, jak škálovat aplikaci Kubernetes ručně.

Každé nasazení je vázáno na další zdroj označovaný jako ReplicaSet. ReplikaSet zodpovídá za údržbu "požadovaného stavu repliky" a škálování skutečné aplikace do nebo ven, aby byl požadovaný stav stejný jako skutečný stav. Počet replik v nasazení můžete řídit prostřednictvím klíče spec.replicas ve specifikaci nasazení. Tento klíč nastaví počet požadovaných replik v podkladové sadě ReplicaSet a vynutí kontroler replikace zachovat tento počet replik v jakémkoli okamžiku.

Počet replik v nasazení můžete řídit také pomocí příkazu kubectl scale deploy/contoso-website --replicas <number>. Tento příkaz dynamicky mění počet požadovaných replik v nasazení a přizpůsobuje škálování aplikace směrem nahoru nebo dolů.

HorizontalPodAutoscaler (HPA)

HPA je nativní prostředek Kubernetes 1.8 nebo novější, který poskytuje horizontální škálovatelnost podů v clusteru. Monitoruje rozhraní API metrik každých 30 sekund pro všechny změny v počtu požadovaných replik. Pokud se požadovaný počet replik liší od aktuálního počtu replik, správce kontroleru, který spravuje objekty HPA, škáluje nasazení do nebo ven.

Návrhový diagram HorizontalPodAutoscaling.

HpA pracují se skupinou rozhraní API autoscaling v Kubernetes. Tato skupina rozhraní API má dvě verze: v1 a v2. Verze v1 umožňuje nasazení škálovat pouze na základě metrik procesoru. Verze v2 umožňuje nativní monitorování procesoru i paměti. V tomto modulu používáme verzi v2.

Každý HPA je přiřazen k referenční škále, která je definována v klíči spec.scaleTargetRef manifestu HPA. Tento odkaz na škálování musí obsahovat základní pody, jinak HPA nefunguje, protože není možné použít škálování na objekty, které není možné škálovat, jako jsou daemonSets.

Je důležité, aby každý pod ve své specifikaci nastavil požadavek na prostředek. Algoritmus HPA nemůže správně vypočítat metriky a určit využití prostředků bez tohoto nastavení. Toto omezení můžete nastavit prostřednictvím klíče spec.template.spec.containers[].resources v manifestu nasazení, jak je znázorněno v následujícím příkladu:

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

Příklad manifestu HPA

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

Kontrola znalostí

1.

Co je horizontální škálování?

2.

Proč je důležité nastavit požadavek na prostředky u podů vázaných na HPA?

3.

Proč se vertikální škálování méně doporučuje pro bezstavové aplikace?