Azure CLI를 사용하여 Kubernetes 클러스터 만들기

적용 대상: Azure Stack HCI, 버전 23H2

이 문서에서는 Azure CLI를 사용하여 Azure Stack HCI에서 Kubernetes 클러스터를 만드는 방법을 설명합니다. 워크플로는 다음과 같습니다.

  1. Azure CLI를 사용하여 Azure Stack HCI 23H2에서 Kubernetes 클러스터를 만듭니다. 클러스터는 기본적으로 Azure Arc에 연결됩니다.
  2. 클러스터를 만드는 동안 Kubernetes 클러스터 관리자 액세스 권한이 있는 Microsoft Entra 사용자 목록이 포함된 Microsoft Entra 그룹을 제공합니다.
  3. kubectl 및 Microsoft Entra ID 사용하여 클러스터에 액세스합니다.
  4. 클러스터에서 웹 프런트 엔드 및 Redis instance 사용하여 샘플 다중 컨테이너 애플리케이션을 실행합니다.

시작하기 전에

  • 시작하기 전에 온-프레미스 인프라 관리자의 다음 세부 정보가 있는지 확인합니다.
    • Azure 구독 ID - Azure Stack HCI가 배포 및 등록에 사용되는 Azure 구독 ID입니다.
    • 사용자 지정 위치 ID - 사용자 지정 위치의 Azure Resource Manager ID입니다. 사용자 지정 위치는 Azure Stack HCI 클러스터 배포 중에 구성됩니다. 인프라 관리자는 사용자 지정 위치의 Resource Manager ID를 제공해야 합니다. Kubernetes 클러스터를 만들려면 이 매개 변수가 필요합니다. 인프라 관리자가 사용자 지정 위치 이름 및 리소스 그룹 이름을 제공하는 경우 를 사용하여 az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsvResource Manager ID를 가져올 수도 있습니다.
    • 네트워크 ID - 다음 단계에 따라 만든 Azure Stack HCI 논리 네트워크의 Azure Resource Manager ID입니다. 관리자는 논리 네트워크의 ID를 제공해야 합니다. Kubernetes 클러스터를 만들려면 이 매개 변수가 필요합니다. 논리 네트워크가 만들어진 리소스 그룹을 알고 있는 경우 를 사용하여 az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv Azure Resource Manager ID를 가져올 수도 있습니다.
  • 로컬 개발 컴퓨터에서 이 문서의 단계를 실행하여 원격 Azure Stack HCI 배포에 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 확장을 설치합니다.

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 -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0  --control-plane-ip $controlplaneIP

몇 분 후 명령이 완료되면 클러스터에 대한 JSON 형식 정보가 반환됩니다.

Kubernetes 클러스터에 연결

이제 개발 컴퓨터에서 명령을 실행하여 Kubernetes 클러스터에 az connectedk8s proxy 연결할 수 있습니다. 이 명령을 실행하기 전에 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: mcr.microsoft.com/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: mcr.microsoft.com/azuredocs/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

애플리케이션 테스트

애플리케이션이 실행되면 애플리케이션 프런트 엔드를 인터넷에 공개하는 Kubernetes 서비스가 만들어집니다. 이 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다.

--watch 인수와 함께 kubectl get service 명령을 사용하여 진행 상황을 모니터링합니다.

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 --resource-group $aksclustername --name $resource_group

다음 단계