Skapa Azure AKS-infrastruktur

I den här artikeln etablerar du de grundläggande Azure-resurser som krävs för en produktionsklar AKS-distribution. Den här artikeln validerar Azure-åtkomst, skapar en resursgrupp, upprättar ett Azure Container Registry (ACR), distribuerar ett AKS-baslinjekluster, lägger till ytterligare en nodpool för användararbetsbelastningar och ger klustret behörighet att hämta från ACR. Alla kommandon förlitar sig på parameterbaserade miljövariabler så att arbetsflödet förblir repeterbart mellan regioner och prenumerationer.

Förutsättningar

Du behöver följande verktyg och kontoåtkomst innan du kör guiden. az login Se till att du är autentiserad till Azure och har tillräcklig behörighet för att skapa resursgrupper, containerregister och AKS-kluster.

  • Azure-prenumeration med kvot för den valda regionen
  • Azure CLI (az) med ägar- eller deltagarrättigheter
  • kubectl konfigurerad lokalt för klusteråtkomst
  • jq (valfritt) för parsning av JSON-utdata under verifiering

Kör följande kommandon för att bekräfta att du har alla nödvändiga CLI-verktyg och Azure-åtkomst:

command -v az >/dev/null || echo "Azure CLI missing"
command -v kubectl >/dev/null || echo "kubectl missing"
command -v jq >/dev/null || echo "jq missing (optional)"

Konfigurera miljön

Här definierar du alla miljövariabler som används i etableringsstegen. Tidsstämpeln HASH används för att hålla resursnamnen unika under upprepade körningar. Kluster och register har som standard ett minimalt proof-of-concept-fotavtryck, men du kan justera dem efter behov.

Följande kommandon upprättar Azure-omfång, AKS-storlek och ACR-namngivningskonventioner för provisioneringssekvensen, oavsett nedströms arbetsbelastningar.

export HASH="${HASH:-$(date -u +"%y%m%d%H%M")}"  # YYMMDDHHMM stamp

# Azure scope and regional placement
export LOCATION="${LOCATION:-eastus2}"
export SUBSCRIPTION_ID="${SUBSCRIPTION_ID:-$(az account show --query id -o tsv)}"
export RESOURCE_GROUP="${RESOURCE_GROUP:-rg_aks_${HASH}}"

# AKS cluster naming and version control
# Hyphen required because AKS cluster names cannot include underscores
export AKS_CLUSTER_NAME="${AKS_CLUSTER_NAME:-aks-openwebsearch-${HASH}}"
export AKS_VERSION="${AKS_VERSION:-}"  # Optional Kubernetes version override

# Node pool sizing
export AKS_SYSTEM_NODE_COUNT="${AKS_SYSTEM_NODE_COUNT:-1}"
export AKS_USER_NODE_COUNT="${AKS_USER_NODE_COUNT:-1}"
export AKS_NODE_VM_SIZE="${AKS_NODE_VM_SIZE:-Standard_D4s_v5}"
export AKS_SYSTEM_NODEPOOL_NAME="${AKS_SYSTEM_NODEPOOL_NAME:-system}"
export AKS_USER_NODEPOOL_NAME="${AKS_USER_NODEPOOL_NAME:-user}"

# ACR configuration
export ACR_NAME="${ACR_NAME:-acrwebsearch${HASH}}"
export ACR_LOGIN_SERVER="${ACR_LOGIN_SERVER:-${ACR_NAME}.azurecr.io}"

Verifiera miljövariabelvärden

Granska den effektiva konfigurationen innan du skapar resurser. Kör blocket igen efter eventuella justeringar för att säkerställa att de aktiva värdena är korrekta för målprenumerationen och -regionen.

Använd följande kommandon för att skriva ut de aktiva parametrarna för att verifiera namngivning, storlek och regionval.

: "${HASH:=$(date -u +"%y%m%d%H%M")}"  # Ensure HASH exists

VARS=(
  HASH
  LOCATION
  SUBSCRIPTION_ID
  RESOURCE_GROUP
  AKS_CLUSTER_NAME
  AKS_VERSION
  AKS_SYSTEM_NODE_COUNT
  AKS_USER_NODE_COUNT
  AKS_NODE_VM_SIZE
  AKS_SYSTEM_NODEPOOL_NAME
  AKS_USER_NODEPOOL_NAME
  ACR_NAME
  ACR_LOGIN_SERVER
)
for v in "${VARS[@]}"; do
  printf "%s=%s\n" "$v" "${!v}"
done

Steg

Kör varje steg sekventiellt. Varje underavsnitt innehåller syfte, kommandon och en sammanfattning för att bekräfta förväntade resultat.

Kontrollera Azure-prenumerationskontexten

Verifiera den aktiva Azure-prenumerationen och se till att de resursprovidrar som krävs för AKS- och ACR-åtgärder är registrerade.

az account show --query id -o tsv
az provider register --namespace Microsoft.ContainerService
az provider register --namespace Microsoft.ContainerRegistry

Skapa en resursgrupp

Etablera en dedikerad resursgrupp för att isolera AKS-klustret, registret och stödinfrastrukturen för dina arbetsbelastningar.

az group create \
  --name "${RESOURCE_GROUP}" \
  --location "${LOCATION}" \
  --output table

Etablera Azure Container Registry

Skapa ett Azure Container Registry för lagring av containeravbildningar och autentisera den lokala Docker-daemonen för att skicka avbildningar.

az acr create \
  --name "${ACR_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --location "${LOCATION}" \
  --sku Basic \
  --output table
az acr login --name "${ACR_NAME}"

Skapa AKS-klustret

Distribuera AKS-klustret för att hantera dina belastningar. Skydda mot att återanvända ett befintligt klusternamn genom att kontrollera innan du skapar det.

if az aks show \
  --name "${AKS_CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" >/dev/null 2>&1; then
  echo "AKS cluster ${AKS_CLUSTER_NAME} already exists in ${RESOURCE_GROUP}";
  echo "Skip creation or provide a new AKS_CLUSTER_NAME.";
else
  az aks create \
    --name "${AKS_CLUSTER_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --location "${LOCATION}" \
    --generate-ssh-keys \
    --node-count "${AKS_SYSTEM_NODE_COUNT}" \
    --nodepool-name "${AKS_SYSTEM_NODEPOOL_NAME}" \
    --node-vm-size "${AKS_NODE_VM_SIZE}" \
    ${AKS_VERSION:+--kubernetes-version "${AKS_VERSION}"} \
    --output table
fi

Lägg till valfri användarnodpool

Etablera ytterligare en nodpool när den begärs. Kommandot lägg till körs asynkront för att undvika CLI-timeouter. kommandot wait spårar Azures förlopp. Skriptet kontrollerar först om poolen redan finns för att förhindra duplicerade namnfel.

if [ "${AKS_USER_NODE_COUNT}" -gt 0 ]; then
  if az aks nodepool show \
    --cluster-name "${AKS_CLUSTER_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --name "${AKS_USER_NODEPOOL_NAME}" >/dev/null 2>&1; then
    echo "Node pool ${AKS_USER_NODEPOOL_NAME} already exists; skipping add.";
  else
    az aks nodepool add \
      --cluster-name "${AKS_CLUSTER_NAME}" \
      --resource-group "${RESOURCE_GROUP}" \
      --name "${AKS_USER_NODEPOOL_NAME}" \
      --node-count "${AKS_USER_NODE_COUNT}" \
      --node-vm-size "${AKS_NODE_VM_SIZE}" \
      --no-wait
    az aks nodepool wait \
      --cluster-name "${AKS_CLUSTER_NAME}" \
      --resource-group "${RESOURCE_GROUP}" \
      --name "${AKS_USER_NODEPOOL_NAME}" \
      --created
  fi
fi

Hämta klusterautentiseringsuppgifter

Sammanfoga AKS-kubeconfig i den lokala kontexten och kontrollera att alla noder kan nås.

az aks get-credentials \
  --name "${AKS_CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --overwrite-existing
kubectl get nodes -o wide

Koppla ACR till AKS-kluster

Ge AKS-klustret behörighet att hämta avbildningar från den etablerade ACR:en så att framtida distributioner kan komma åt dina containeravbildningar.

az aks update \
  --name "${AKS_CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --attach-acr "${ACR_NAME}" \
  --output table

Verification

Bekräfta att AKS-klustret finns och svarar på grundläggande kubectl frågor innan du fortsätter till nedströmsdistributionsstegen. Börja med att se till att AKS-klustret finns.

if ! az aks show \
  --name "${AKS_CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --query "{name:name,provisioningState:provisioningState,location:location}" \
  --output table; then
  echo "AKS cluster '${AKS_CLUSTER_NAME}' not found in resource group '${RESOURCE_GROUP}'."
else
  echo "AKS cluster '${AKS_CLUSTER_NAME}' exists in resource group '${RESOURCE_GROUP}'."
fi

Om AKS-klustret har skapats ser du ungefär så här:

AKS cluster ${AKS_CLUSTER_NAME} exists in resource group ${RESOURCE_GROUP}.

Kontrollera sedan att är kubectl korrekt konfigurerat:

kubectl cluster-info

Det här kommandot visar statusen för det aktuella klustret, ungefär så här:

Kubernetes control plane is running at ...
CoreDNS is running at https://...
Metrics-server is running at https://...

Se slutligen till att det finns både system- och användarnoder tillgängliga:

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.labels.agentpool}{"\n"}{end}' |
  sort |
  uniq -c

Då matas antalet noder ut, ungefär så här:

      1 system
      1 user

Sammanfattning: Verifierade att AKS-klustret finns, är i gott skick och kan nås via kubectl i det aktuella sammanhanget.

Sammanfattning

Resursgruppen, containerregistret, AKS-klustret, den valfria nodpoolen och den bifogade registerbilagan verifieras, vilket gör klustret redo för alla containerbaserade arbetsbelastningar.

Nästa steg

  • Fortsätt med docs/OpenWebSearch_On_AKS.md för att distribuera KMCP och MCP-servern
  • Konfigurera rolltilldelningar eller nätverksprinciper som är specifika för din säkerhetsstatus
  • Integrera Azure Monitor eller Log Analytics för driftssynlighet
  • Köra infrastrukturrensningskommandon efter experimentering för att hantera kostnader