이 문서에서는 프로덕션 준비 AKS 배포에 필요한 핵심 Azure 리소스를 프로비전합니다. 이 문서에서는 Azure 액세스의 유효성을 검사하고, 리소스 그룹을 만들고, ACR(Azure Container Registry)을 설정하고, 기준 AKS 클러스터를 배포하고, 필요에 따라 사용자 워크로드에 대한 추가 노드 풀을 추가하고, ACR에서 끌어올 클러스터 권한을 부여합니다. 모든 명령은 매개 변수가 있는 환경 변수를 사용하므로 워크플로는 지역 및 구독 간에 반복 가능한 상태로 유지됩니다.
필수 조건
가이드를 실행하기 전에 다음 도구 및 계정 액세스 권한이 필요합니다. 리소스 그룹, 컨테이너 레지스트리 및 AKS 클러스터를 만들 수 있는 충분한 권한을 사용하여 az login Azure에 인증되었는지 확인합니다.
- 선택한 지역에 대한 할당량이 있는 Azure 구독
- 소유자 또는 기여자 권한이 있는 Azure CLI(
az) - 클러스터 액세스를 위해 로컬로 구성된 kubectl
- 확인 중에 JSON 출력을 구문 분석하기 위한 jq(선택 사항)
다음 명령을 실행하여 필요한 모든 CLI 도구 및 Azure 액세스 권한이 있는지 확인합니다.
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)"
환경 설정
여기서는 프로비전 단계 전체에서 사용되는 모든 환경 변수를 정의합니다.
HASH 타임스탬프는 반복 실행 중에 리소스 이름을 고유하게 유지합니다. 클러스터 및 레지스트리 기본값은 최소한의 개념 증명 공간을 대상으로 하지만 필요에 따라 조정할 수 있습니다.
다음 명령은 다운스트림 워크로드에 관계없이 프로비저닝 시퀀스에 대한 Azure 범위, AKS 크기 조정 및 ACR 명명 규칙을 설정합니다.
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}"
환경 변수 값 확인
리소스를 만들기 전에 효과적인 구성을 검토합니다. 조정 후 블록을 다시 실행하여 대상 구독 및 지역에 대해 활성 값이 올바른지 확인합니다.
다음 명령을 사용하여 활성 매개 변수를 핀트하여 명명, 크기 조정 및 지역 선택 항목의 유효성을 검사합니다.
: "${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
각 단계를 순차적으로 실행합니다. 모든 하위 섹션에는 예상 결과를 확인하기 위한 목적, 명령 및 요약이 포함됩니다.
Azure 구독 컨텍스트 확인
활성 Azure 구독을 확인하고 AKS 및 ACR 작업에 필요한 리소스 공급자가 등록되어 있는지 확인합니다.
az account show --query id -o tsv
az provider register --namespace Microsoft.ContainerService
az provider register --namespace Microsoft.ContainerRegistry
리소스 그룹 만들기
워크로드에 대한 AKS 클러스터, 레지스트리 및 지원 인프라를 격리하도록 전용 리소스 그룹을 프로비전합니다.
az group create \
--name "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--output table
Azure Container Registry를 프로비저닝합니다
컨테이너 이미지를 저장하기 위한 Azure Container Registry를 만들고 로컬 Docker 디먼을 인증하여 이미지를 푸시합니다.
az acr create \
--name "${ACR_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--sku Basic \
--output table
az acr login --name "${ACR_NAME}"
AKS 클러스터 만들기
AKS 클러스터를 배포하여 워크로드를 호스트합니다. 만들기 전에 확인하여 기존 클러스터 이름을 다시 사용하지 않도록 방지합니다.
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
선택적 사용자 노드 풀 추가
요청 시 추가 노드 풀을 프로비전합니다. ADD 명령은 CLI 시간 제한을 방지하기 위해 비동기적으로 실행됩니다. 대기 명령은 Azure의 진행률을 추적합니다. 스크립트는 먼저 중복된 이름 오류를 방지하기 위해 풀이 이미 있는지 확인합니다.
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
클러스터 자격 증명 검색
AKS kubeconfig를 로컬 컨텍스트에 병합하고 모든 노드에 연결할 수 있는지 확인합니다.
az aks get-credentials \
--name "${AKS_CLUSTER_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--overwrite-existing
kubectl get nodes -o wide
AKS 클러스터에 ACR 연결
향후 배포에서 컨테이너 이미지에 액세스할 수 있도록 프로비전된 ACR에서 이미지를 끌어올 수 있는 AKS 클러스터 권한을 부여합니다.
az aks update \
--name "${AKS_CLUSTER_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--attach-acr "${ACR_NAME}" \
--output table
확인
AKS 클러스터가 있는지 확인하고 다운스트림 배포 단계를 계속하기 전에 기본 kubectl 쿼리에 응답합니다. 먼저 AKS 클러스터가 있는지 확인합니다.
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
AKS 클러스터를 만든 경우 다음과 같이 표시됩니다.
AKS cluster ${AKS_CLUSTER_NAME} exists in resource group ${RESOURCE_GROUP}.
다음으로 올바르게 구성되었는지 kubectl 확인합니다.
kubectl cluster-info
이 명령은 다음과 같이 현재 클러스터의 상태를 출력합니다.
Kubernetes control plane is running at ...
CoreDNS is running at https://...
Metrics-server is running at https://...
마지막으로, 사용할 수 있는 시스템 및 사용자 노드가 모두 있는지 확인합니다.
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.labels.agentpool}{"\n"}{end}' |
sort |
uniq -c
그러면 다음과 같은 노드 수가 출력됩니다.
1 system
1 user
요약: AKS 클러스터가 현재 컨텍스트에서 kubectl을 통해 존재하고 정상이며 연결할 수 있는지 확인했습니다.
요약
리소스 그룹, 컨테이너 레지스트리, AKS 클러스터, 선택적 노드 풀 및 레지스트리 첨부 파일의 유효성이 검사되어 클러스터가 컨테이너화된 워크로드에 대해 준비됩니다.
다음 단계
-
docs/OpenWebSearch_On_AKS.mdKMCP 및 MCP 서버를 배포 진행하십시오 - 보안 상태와 관련된 역할 할당 또는 네트워크 정책 구성
- 운영 가시성을 위해 Azure Monitor 또는 Log Analytics 통합
- 실험 후 인프라 정리 명령을 실행하여 비용 관리