Inteligentní umístění prostředků Kubernetes napříč clustery pomocí Azure Kubernetes Fleet Manageru
Vývojáři aplikací často potřebují nasazovat prostředky Kubernetes do několika clusterů. Operátoři vozového parku často potřebují vybrat nejlepší clustery pro úlohy na základě heuristiky (například nákladů na výpočetní prostředky) nebo dostupných prostředků (například paměti a procesoru). Je zdlouhavé vytvářet, aktualizovat a sledovat tyto prostředky Kubernetes napříč několika clustery ručně. Tento článek popisuje, jak můžete tyto scénáře řešit pomocí inteligentní funkce umísťování prostředků Kubernetes v Azure Kubernetes Fleet Manageru (Kubernetes Fleet).
Schopnost umístění prostředků Kubernetes Fleet může provádět rozhodnutí o plánování na základě následujících vlastností clusteru:
- Počet uzlů
- Náklady na výpočetní prostředky nebo paměť v cílových členských clusterech
- Dostupnost prostředků (procesoru nebo paměti) v cílových členských clusterech
Další informace o konceptech v tomto článku najdete v tématu Umístění prostředků Kubernetes z clusteru centra do členských clusterů.
Požadavky
Potřebujete účet Azure s aktivním předplatným. Vytvoření účtu zdarma
Musíte mít prostředek Kubernetes Fleet s jedním nebo více členskými clustery. Pokud ho nemáte, vytvořte pomocí rychlého startu prostředek Kubernetes Fleet s clusterem centra. Pak připojte clustery Azure Kubernetes Service (AKS) jako členy.
Tip
Ujistěte se, že jsou vaše členské clustery AKS nakonfigurované tak, abyste mohli otestovat umístění pomocí vlastností clusteru, které vás zajímají (umístění, počet uzlů, prostředky nebo náklady).
Nastavte následující proměnné prostředí:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBERCLUSTER01=<cluster01> export MEMBERCLUSTER02=<cluster02>
K dokončení tohoto článku potřebujete azure CLI verze 2.58.0 nebo novější. Pokud chcete nainstalovat nebo upgradovat, přečtěte si téma Instalace Azure CLI.
Pokud rozhraní příkazového řádku Kubernetes (kubectl) ještě nemáte, můžete ho nainstalovat pomocí tohoto příkazu:
az aks install-cli
Potřebujete
fleet
rozšíření Azure CLI. Můžete ho nainstalovat spuštěním následujícího příkazu:az extension add --name fleet
Spuštěním
az extension update
příkazu aktualizujte na nejnovější verzi rozšíření:az extension update --name fleet
Autorizovat kubectl pro připojení ke clusteru Centra flotily Kubernetes:
az fleet get-credentials --resource-group $GROUP --name $FLEET
Kontrola vlastností člena clusteru
Načtěte popisky, vlastnosti a prostředky pro váš členský cluster dotazováním clusteru centra. Výstup jako YAML, abyste mohli číst výsledky.
kubectl get membercluster $MEMBERCLUSTER01 –o yaml
Výsledný soubor YAML obsahuje podrobnosti (popisky a vlastnosti), které můžete použít k sestavení zásad umístění. Tady je příklad:
apiVersion: cluster.kubernetes-fleet.io/v1
kind: MemberCluster
metadata:
annotations:
...
labels:
fleet.azure.com/location: eastus2
fleet.azure.com/resource-group: resource-group
fleet.azure.com/subscription-id: 8xxxxxxx-dxxx-4xxx-bxxx-xxxxxxxxxxx8
name: cluster01
resourceVersion: "123456"
uid: 7xxxxxxx-5xxx-4xxx-bxxx-xxxxxxxxxxx4
spec:
...
status:
...
properties:
kubernetes-fleet.io/node-count:
observationTime: "2024-09-19T01:33:54Z"
value: "2"
kubernetes.azure.com/per-cpu-core-cost:
observationTime: "2024-09-19T01:33:54Z"
value: "0.073"
kubernetes.azure.com/per-gb-memory-cost:
observationTime: "2024-09-19T01:33:54Z"
value: "0.022"
resourceUsage:
allocatable:
cpu: 3800m
memory: 10320392Ki
available:
cpu: 2740m
memory: 8821256Ki
capacity:
cpu: "4"
memory: 14195208Ki
Tento krok opakujte pro každý členský cluster, který přidáte, abyste identifikovali popisky a vlastnosti, které můžete použít ve svých zásadách.
Příprava úlohy na umístění
Dále publikujte úlohu do clusteru centra, aby ji bylo možné umístit do členských clusterů:
Vytvořte obor názvů pro úlohu v clusteru centra:
kubectl create namespace test-app
Ukázkovou úlohu je možné nasadit do nového oboru názvů v clusteru centra. Vzhledem k tomu, že tyto typy prostředků Kubernetes nevyžadují zapouzdření, můžete je nasadit beze změny.
Uložte následující YAML do souboru s názvem
sample-workload.yaml
:apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test-app spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.16.1 ports: - containerPort: 80
Nasaďte definici úlohy do clusteru centra:
kubectl apply -f sample-workload.yaml
S nasazenou definicí úlohy je teď možné otestovat inteligentní umísťování kubernetes fleetu.
Testování zásad umístění úloh
Následující ukázky můžete použít spolu s koncepční dokumentací jako vodítka k psaní vlastního ClusterResourcePlacement
objektu.
Poznámka:
Pokud chcete vyzkoušet jednotlivé ukázkové zásady, nezapomeňte předchozí objekt odstranit ClusterResourcePlacement
.
Umístění na základě počtu uzlů clusteru
Tento příklad ukazuje řazení vlastností, které používá Descending
pořadí. Toto pořadí znamená, že Kubernetes Fleet upřednostňuje clustery s vyšším počtem uzlů.
Cluster s nejvyšším počtem uzlů přijímá váhu 20 a cluster s nejnižší hodnotou přijímá váhu 0. Ostatní shluky přijímají proporcionální váhy vypočítané pomocí vzorce výpočtu hmotnosti.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
metricSorter:
name: kubernetes-fleet.io/node-count
sortOrder: Descending
Umístění s selektorem popisků a řazením vlastností
V tomto příkladu cluster obdrží váhu pouze v případě, že má popisek env=prod
. Pokud cluster splňuje toto omezení popisku, je daná proporcionální váha na základě celkového využití procesoru v daném členském clusteru.
Tento příklad ukazuje, jak můžete pro spřažení použít selektor popisků i řazení preferredDuringSchedulingIgnoredDuringExecution
vlastností. Členový cluster, který selže selektorem popisku, neobdrží žádnou váhu. Členské clustery, které vyhovují selektoru popisků, přijímají proporcionální váhy, jak je uvedeno v rámci řazení vlastností.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
labelSelector:
matchLabels:
env: prod
metricSorter:
name: resources.kubernetes-fleet.io/total-cpu
sortOrder: Descending
Umístění na základě nákladů na paměť a jádro procesoru
Vzhledem k tomu, že řazení v tomto příkladu má Ascending
pořadí, dává Kubernetes Fleet přednost clusterům s nižšími náklady na paměť a jádra procesoru. Cluster s nejnižšími náklady na paměť a jádro procesoru přijímá váhu 20 a cluster s nejvyšší váhu přijímá 0. Ostatní shluky přijímají proporcionální váhy vypočítané pomocí vzorce výpočtu hmotnosti.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 2
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
propertySorter:
name: kubernetes.azure.com/per-gb-memory-core-cost
sortOrder: Ascending
- weight: 20
preference:
propertySorter:
name: kubernetes.azure.com/per-cpu-core-cost
sortOrder: Ascending
Zobrazení stavu umístění
Pokud chcete zobrazit stav umístění, můžete použít příkaz Azure Portal nebo kubectl.
Podrobnosti o tom, jak zobrazit průběh umístění, najdete v části Použití rozhraní API ClusterResourcePlacement k šíření prostředků do členských clusterů.
Vyčištění prostředků
Podrobnosti o odebrání umístění prostředků clusteru prostřednictvím webu Azure Portal nebo příkazu kubectl najdete v tématu Vyčištění prostředků v článku o šíření prostředků.
Související obsah
- Další informace o šíření prostředků najdete v opensourcové dokumentaci kubernetes Fleet.
Azure Kubernetes Service