Membuat infrastruktur Azure AKS

Dalam artikel ini, Anda menyediakan sumber daya Azure inti yang diperlukan untuk penyebaran AKS yang siap untuk produksi. Artikel ini memvalidasi akses Azure, membuat grup sumber daya, mendirikan Azure Container Registry (ACR), menyebarkan kluster AKS dasar, secara opsional menambahkan kumpulan simpul tambahan untuk beban kerja pengguna, dan memberikan izin kepada kluster untuk mengambil dari ACR. Semua perintah mengandalkan variabel lingkungan berparameter sehingga alur kerja tetap dapat diulang di seluruh wilayah dan langganan.

Prasyarat

Anda memerlukan alat dan akses akun berikut sebelum menjalankan panduan. Pastikan Anda diautentikasi ke Azure menggunakan az login dan memiliki izin yang memadai untuk membuat grup sumber daya, registri kontainer, dan kluster AKS.

  • Langganan Azure dengan kuota untuk wilayah yang dipilih
  • Azure CLI (az) dengan hak Pemilik atau Kontributor
  • kubectl dikonfigurasi secara lokal untuk akses kluster
  • jq (opsional) untuk mengurai output JSON selama verifikasi

Jalankan perintah berikut untuk mengonfirmasi bahwa Anda memiliki semua alat CLI dan akses Azure yang diperlukan:

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)"

Menyiapkan lingkungan kerja

Di sini, Anda menentukan semua variabel lingkungan yang digunakan di seluruh langkah-langkah provisi. Tanda HASH waktu menjaga nama sumber daya tetap unik selama eksekusi berulang. Pengaturan bawaan kluster dan registri menargetkan penerapan bukti konsep yang minimal, tetapi Anda dapat menyesuaikannya sesuai kebutuhan.

Perintah berikut menetapkan konvensi lingkup Azure, ukuran AKS, dan penamaan ACR untuk urutan provisi terlepas dari beban kerja hilir.

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}"

Memverifikasi nilai variabel lingkungan

Tinjau konfigurasi efektif sebelum membuat sumber daya. Jalankan kembali blok setelah penyesuaian apa pun untuk memastikan nilai aktif sudah benar untuk langganan dan wilayah target.

Gunakan perintah berikut untuk menyematkan parameter aktif untuk memvalidasi penamaan, ukuran, dan pilihan regional.

: "${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

Steps

Jalankan setiap langkah secara berurutan. Setiap sub bagian mencakup tujuan, perintah, dan ringkasan untuk mengonfirmasi hasil yang diharapkan.

Periksa konteks langganan Azure

Verifikasi langganan Azure aktif dan pastikan penyedia sumber daya yang diperlukan untuk operasi AKS dan ACR terdaftar.

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

Membuat grup sumber daya

Provisikan grup sumber daya khusus untuk mengisolasi kluster AKS, registri, dan infrastruktur pendukung untuk beban kerja Anda.

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

Menyediakan Azure Container Registry

Buat Azure Container Registry untuk menyimpan citra kontainer dan autentikasi daemon Docker lokal agar dapat mengunggah citra.

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

Membuat kluster AKS

Sebarkan kluster AKS untuk menghosting beban kerja Anda. Jaga agar tidak menggunakan kembali nama kluster yang ada dengan memeriksa sebelum pembuatan.

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

Menambahkan kumpulan simpul pengguna opsional

Siapkan kumpulan node tambahan saat diminta. Perintah tambahkan berjalan secara asinkron untuk menghindari batas waktu CLI; perintah tunggu melacak kemajuan Azure. Skrip pertama-tama memeriksa apakah kumpulan sudah ada untuk mencegah kesalahan nama duplikat.

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

Mengambil kredensial kluster

Gabungkan kubeconfig AKS ke dalam konteks lokal dan verifikasi bahwa semua simpul dapat dijangkau.

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

Lampirkan ACR ke kluster AKS

Berikan izin kluster AKS untuk menarik gambar dari ACR yang disediakan sehingga penyebaran di masa mendatang dapat mengakses gambar kontainer Anda.

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

Verifikasi

Konfirmasikan kluster AKS ada dan merespons kueri dasar kubectl sebelum melanjutkan langkah-langkah penyebaran hilir. Mulailah dengan memastikan kluster AKS ada.

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

Jika kluster AKS telah dibuat, Anda akan melihat sesuatu seperti:

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

Selanjutnya, periksa apakah kubectl dikonfigurasi dengan benar:

kubectl cluster-info

Perintah ini akan menghasilkan status kluster saat ini, seperti:

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

Terakhir, pastikan bahwa ada simpul sistem dan pengguna yang tersedia:

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

Ini akan menghasilkan hitungan simpul, seperti:

      1 system
      1 user

Ringkasan: Divalidasi bahwa kluster AKS ada, sehat, dan dapat dijangkau melalui kubectl dalam konteks saat ini.

Ringkasan

Grup sumber daya, registri kontainer, kluster AKS, kumpulan simpul opsional, dan lampiran registri divalidasi, membuat kluster siap untuk beban kerja kontainer apa pun.

Langkah Selanjutnya

  • Lanjutkan dengan docs/OpenWebSearch_On_AKS.md untuk menyebarkan KMCP dan server MCP
  • Konfigurasikan penetapan peran atau kebijakan jaringan yang spesifik untuk postur keamanan Anda
  • Mengintegrasikan Azure Monitor atau Analitik Log untuk visibilitas operasional
  • Jalankan perintah pembersihan infrastruktur setelah eksperimen untuk mengelola biaya