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álovatelnost popisuje schopnost aplikace nebo systému zpracovávat 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, u které dochází ke zvýšení počtu žádostí zákazníků. Množství přidaných prostředků lze reprezentovat dvěma způsoby: vertikální škálovatelnost a horizontální škálovatelnost.

Vertikální škálovatelnost

Vertikální škálovatelnost nebo vertikální navýšení kapacity označ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.

Vertical scaling diagram.

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ý výpočetní výkon, 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í kapacity odkazuje na škálování systému duplikováním aplikace a vyrovnáváním zatížení napříč instancemi aplikace.

Horizontal scaling diagram.

Horizontální škálování je cenné pro distribuované aplikace, jako jsou ty nasazené v AKS, a bezstavové systémy, protože můžete v jednom virtuálním počítači spustit několik kontejnerů se stejnou aplikací. Horizontální navýšení kapacity umožňuje extrahovat většinu prostředků při placení za jeden virtuální počítač.

V našem ukázkovém scénáři je váš firemní web bezstavový. To znamená, že horizontální navýšení kapacity je nejlepší postup. Kubernetes poskytuje zastaralý prostředek s názvem HorizontalPodAutoscaler (HPA), který umožňuje škálovat nasazení na více instancí.

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ázané na jiný prostředek, který se nazývá 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 spec.replicas klíče 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.

Pomocí příkazu můžete také řídit počet replik v nasazení kubectl scale deploy/contoso-website --replicas <number> . Tento příkaz dynamicky mění počet požadovaných replik v nasazení a škáluje aplikaci do nebo ven.

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.

HorizontalPodAutoscaling design diagram.

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

Každý HPA je připojen k odkazu na škálování, který je definován v spec.scaleTargetRef klíči 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 spec.template.spec.containers[].resources klíče 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

Prověřte si své znalosti

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?