Koncepty škálovatelnosti
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.
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.
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.
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