적용 대상: Azure 로컬의 AKS
이 문서에서는 Azure CLI를 사용하여 Azure Local에서 Kubernetes 클러스터를 만드는 방법을 설명합니다. 워크플로는 다음과 같습니다.
- Azure CLI를 사용하여 Azure 로컬에서 Kubernetes 클러스터를 만듭니다. 클러스터는 기본적으로 Azure Arc에 연결됩니다.
- 클러스터를 만드는 동안 Kubernetes 클러스터 관리자 액세스 권한이 있는 Microsoft Entra 사용자 목록이 포함된 Microsoft Entra 그룹을 제공합니다.
- kubectl 및 Microsoft Entra ID를 사용하여 클러스터에 액세스합니다.
- 클러스터에서 웹 프런트 엔드 및 Redis 인스턴스를 사용하여 샘플 다중 컨테이너 애플리케이션을 실행합니다.
시작하기 전 주의 사항:
- 시작하기 전에 온-프레미스 인프라 관리자의 다음 세부 정보가 있는지 확인합니다.
- Azure 구독 ID - Azure Local이 배포 및 등록에 사용되는 Azure 구독 ID입니다.
-
사용자 지정 위치 ID - 사용자 지정 위치의 Azure Resource Manager ID입니다. 사용자 지정 위치는 Azure 로컬 클러스터 배포 중에 구성됩니다. 인프라 관리자는 사용자 지정 위치의 Resource Manager ID를 제공해야 합니다. Kubernetes 클러스터를 만들려면 이 매개 변수가 필요합니다. 인프라 관리자가 사용자 지정 위치 이름 및 리소스 그룹 이름을 제공하는 경우 리소스 관리자 ID를 가져올
az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv수도 있습니다. -
네트워크 ID - 다음 단계에 따라 만든 Azure 로컬 논리 네트워크의 Azure Resource Manager ID입니다. 관리자는 논리 네트워크의 ID를 제공해야 합니다. Kubernetes 클러스터를 만들려면 이 매개 변수가 필요합니다. 논리 네트워크가 만들어진 리소스 그룹을 알고 있는 경우 Azure
az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsvResource Manager ID를 가져올 수도 있습니다.
- 로컬 개발 컴퓨터에서 이 문서의 단계를 실행하여 원격 Azure 로컬 배포에 Kubernetes 클러스터를 만들 수 있습니다. 개발 머신에 최신 버전의 Az CLI 가 있는지 확인합니다. 를 사용하여
az upgradeAz CLI 버전을 업그레이드하도록 선택할 수도 있습니다. - 어디서나 Kubernetes 클러스터에 연결하려면 Microsoft Entra 그룹을 만들고 구성원을 추가합니다. Microsoft Entra 그룹의 모든 구성원은 클러스터에 대한 클러스터 관리자 액세스 권한을 갖습니다. 자신을 Microsoft Entra 그룹에 구성원으로 추가해야 합니다. 자신을 추가하지 않으면 kubectl을 사용하여 Kubernetes 클러스터에 액세스할 수 없습니다. Microsoft Entra 그룹을 만들고 사용자를 추가하는 방법에 대한 자세한 내용은 Microsoft Entra 그룹 및 그룹 멤버 자격 관리를 참조하세요.
- 개발 머신에 kubectl을 다운로드하고 설치합니다. Kubernetes 명령줄 도구인 kubectl을 사용하면 Kubernetes 클러스터에 대해 명령을 실행할 수 있습니다. kubectl을 사용하여 애플리케이션을 배포하고, 클러스터 리소스를 검사 및 관리하고, 로그를 볼 수 있습니다.
Azure CLI 확장 설치
다음 명령을 실행하여 필요한 Azure CLI 확장을 설치합니다.
경고
Azure 로컬 노드에 다음 확장을 직접 설치하지 마세요. Azure 로컬 인스턴스에 연결하는 데 사용하는 클라이언트 머신에 설치하는 것이 좋습니다.
az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade
Kubernetes 클러스터 만들기
az aksarc create 명령을 사용하여 AKS Arc에서 Kubernetes 클러스터를 만듭니다. 이 명령을 실행하기 전에 Azure에 로그인해야 합니다. 여러 Azure 구독이 있는 경우 az account set 명령을 사용하여 적절한 구독 ID를 선택합니다.
az aksarc create 명령을 사용하면 사용하려는 입력 매개 변수의 --validate 유효성을 검사하는 플래그를 사용하는 것이 좋습니다. 입력 매개 변수의 유효성이 검사되면 플래그 없이 az aksarc create 명령을 실행 --validate 하여 Kubernetes 클러스터를 만들 수 있습니다.
az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys
몇 분 후 명령이 완료되면 클러스터에 대한 JSON 형식 정보가 반환됩니다.
고려 사항
클러스터를 만들 때 다음 사항을 고려합니다.
- SSH 키는 문제 해결 및 로그 수집에 필수적입니다. 나중에 사용할 수 있도록 프라이빗 키 파일을 저장해야 합니다. 노드에 액세스하려면 SSH를 사용하여 Windows 또는 Linux 작업자 노드에 연결을 참조하세요.
- 클러스터를 만드는 동안 기존 SSH 키를 사용하거나 AKS 클러스터에 대한 SSH 키를 구성할 수 있습니다. 로컬 컴퓨터에 기존 SSH 키가 없는 경우 매개 변수가
--generate-ssh-keys필요합니다. 설명서에 따라 SSH 액세스를 제한할 수도 있습니다. 자세한 지침은 Azure CLI 또는 Azure Portal에서 SSH 키 만들기 및 저장을 참조하세요. - 클러스터를 만드는 동안 포함하지
--generate-ssh-keys않고 SSH 키가 없는 경우 오류 메시지가 표시됩니다. 로컬 컴퓨터에 SSH 키가 이미 있는 경우 AKS 클러스터에서 다시 사용합니다. 이 경우 지정--generate-ssh-keys여부에 관계없이 차이가 없습니다. - 기본적으로 SSH 키는 ~/.ssh/id_rsa.pub에 저장됩니다. 클러스터를 만드는 동안 매개 변수를 사용하여
--ssh-key-value대체 위치를 지정할 수 있습니다.
Important
AKS 클러스터에 Azure RBAC 또는 워크로드 ID를 사용하려면 Azure CLI를 사용하여 클러스터를 만드는 동안 필요한 매개 변수를 전달해야 합니다. 현재 워크로드 ID 및/또는 Azure RBAC를 사용하도록 기존 AKS 클러스터를 업데이트하는 것은 지원되지 않습니다. 자세한 내용은 Kubernetes 권한 부여에 Azure RBAC 사용 또는 클러스터에 대한 워크로드 ID 배포 및 구성을 참조하세요.
Kubernetes 클러스터에 연결
이제 개발 컴퓨터에서 az connectedk8s proxy 명령을 실행함으로써 Kubernetes 클러스터에 연결할 수 있습니다. 이 명령을 실행하기 전에 Azure에 로그인해야 합니다. 여러 Azure 구독이 있는 경우 az account set 명령을 사용하여 적절한 구독 ID를 선택합니다.
이 명령은 Kubernetes 클러스터의 kubeconfig를 개발 머신에 다운로드하고 온-프레미스 Kubernetes 클러스터에 대한 프록시 연결 채널을 엽니다. 명령이 실행되는 동안 채널이 열립니다. 클러스터에 액세스하려는 한 이 명령을 실행합니다. 시간이 초과되면 CLI 창을 닫고 새로 연 다음 명령을 다시 실행합니다.
다음 명령을 성공적으로 실행하려면 Kubernetes 클러스터를 호스트하는 리소스 그룹에 대한 기여자 권한이 있어야 합니다.
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
예상 출력:
Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.
이 세션을 계속 실행하고 다른 터미널/명령 프롬프트에서 Kubernetes 클러스터에 연결합니다. kubectl get 명령을 실행하여 Kubernetes 클러스터에 연결할 수 있는지 확인합니다. 이 명령은 클러스터 노드 목록을 반환합니다.
kubectl get node -A --kubeconfig .\aks-arc-kube-config
다음 출력 예제에서는 이전 단계에서 만든 노드를 보여줍니다. 노드 상태가 준비 상태인지 확인합니다.
NAME STATUS ROLES AGE VERSION
moc-l0ttdmaioew Ready control-plane,master 34m v1.24.11
moc-ls38tngowsl Ready <none> 32m v1.24.11
애플리케이션 및 부하 분산 장치 배포
Kubernetes 매니페스트 파일은 실행할 컨테이너 이미지와 같은 클러스터에 대해 원하는 상태를 정의합니다.
매니페스트를 사용하여 Azure Vote 애플리케이션을 실행하는 데 필요한 모든 개체를 만들 수 있습니다. 이 매니페스트에는 두 개의 Kubernetes 배포가 포함됩니다.
- 샘플 Azure Vote Python 애플리케이션.
- Redis 인스턴스.
두 개의 Kubernetes 서비스 도 만들어집니다.
- Redis 인스턴스에 대한 내부 서비스.
- 인터넷에서 Azure Vote 애플리케이션에 액세스하기 위한 외부 서비스.
azure-vote.yaml이라는 파일을 만들고 다음 매니페스트에 복사합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-back
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-back
template:
metadata:
labels:
app: azure-vote-back
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: azure-vote-back
image: <path to image>/oss/bitnami/redis:6.0.8
env:
- name: ALLOW_EMPTY_PASSWORD
value: "yes"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 6379
name: redis
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-back
spec:
ports:
- port: 6379
selector:
app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-front
template:
metadata:
labels:
app: azure-vote-front
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: azure-vote-front
image: <path to image>/azure-vote-front:v1
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
env:
- name: REDIS
value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front
kubectl apply 명령을 사용하여 애플리케이션을 배포하고 YAML의 이름을 지정합니다.
kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config
다음 예제 출력은 성공적으로 생성된 배포 및 서비스를 보여 줍니다.
deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created
애플리케이션 프런트 엔드에 대한 외부 IP를 할당할 수 있도록 MetalLB 부하 분산 장치를 배포합니다. 다음 지침에 따라 Azure Portal에서 또는 CLI를 사용하여 MetalLB 확장을 배포할 수 있습니다.
애플리케이션 테스트
애플리케이션이 실행되면 Kubernetes 서비스는 애플리케이션 프런트 엔드를 인터넷에 노출합니다. 이 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있습니다.
kubectl get service 명령에 --watch 인수를 추가하여 진행 상태를 모니터링합니다.
kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config
azure-vote-front 서비스에 대한 EXTERNAL-IP 출력은 처음에 보류 중으로 표시됩니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
EXTERNAL-IP 주소가 보류 중에서 실제 공용 IP 주소로 변경되면 CTRL-C를 사용하여 kubectl watch 프로세스를 중지합니다. 다음 예제 출력은 서비스에 할당된 유효한 공용 IP 주소를 보여줍니다.
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Azure Vote 앱이 실제로 작동하는 모습을 보려면 웹 브라우저를 서비스의 외부 IP 주소로 엽니다.
클러스터 삭제
az aksarc delete 명령을 실행하여 만든 클러스터를 정리합니다.
az aksarc delete --name $aksclustername --resource-group $resource_group