Azure Stack Hub에서 AKS 엔진을 사용하여 Kubernetes 클러스터 배포

AKS 엔진을 실행하는 클라이언트 VM에서 Azure Stack Hub에 Kubernetes 클러스터를 배포할 수 있습니다. 이 문서에서는 클러스터 사양을 작성하고, apimodel.json 파일을 사용하여 클러스터를 배포하고, Helm을 사용하여 MySQL을 배포하여 클러스터를 확인하는 방법을 살펴봅니다.

클러스터 사양 정의

API 모델이라는 JSON 형식을 사용하여 문서 파일에서 클러스터 사양을 지정할 수 있습니다. AKS 엔진은 API 모델의 클러스터 사양을 사용하여 클러스터를 만듭니다.

AKS 엔진 및 해당 이미지 매핑에서 최근 릴리스의 OS 및 AKS 엔진 버전 번호에 대한 API 모델의 예를 찾을 수 있습니다.

  1. 테이블에서 AKS 엔진 버전 번호(예: v.0.63.0)를 찾습니다.
  2. API 모델 샘플 테이블에서 OS에 대한 링크를 선택하고 엽니다.
  3. 원시를 선택합니다. 다음 지침에서 URL을 사용할 수 있습니다.

API 모델에 대한 URL은 다음과 같을 수 있습니다.

https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json

다음 샘플 각각에 대해 를 URL로 바꿉니다 <URL for the API Model> .

API 모델 업데이트

이 섹션에서는 클러스터에 대한 API 모델을 만드는 방법에 대해 설명합니다.

  1. 먼저 Linux 또는 Windows용 Azure Stack Hub API 모델 파일을 사용합니다. 컴퓨터에서 AKS 엔진을 설치하고 다음을 실행합니다.

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    참고

    연결이 끊긴 경우 파일을 다운로드하여 편집하려는 연결이 끊긴 컴퓨터에 수동으로 복사할 수 있습니다. PuTTY 또는 WinSCP와 같은 도구를 사용하여 Linux 컴퓨터에 파일을 복사할 수 있습니다.

  2. 편집기에서 API 모델을 열려면 nano를 사용할 수 있습니다.

    nano ./kubernetes-azurestack.json
    

    참고

    nano가 설치되지 않은 경우 Ubuntu sudo apt-get install nano에 nano를 설치할 수 있습니다.

  3. kubernetes-azurestack.json 파일에서 orchestratorRelease 및 orchestratorVersion을 찾습니다. 지원되는 Kubernetes 버전 중 하나를 선택합니다. 릴리스 정보에서 버전 테이블을 찾을 수 있습니다. 를 orchestratorRelease x.xx로 지정하고 orchestratorVersion을 x.xx.x로 지정합니다. 현재 버전 목록은 지원되는 AKS 엔진 버전을 참조하세요.

  4. 테넌트 포털에 URL을 찾아 customCloudProfile 제공합니다. 예: https://portal.local.azurestack.external.

  5. AD FS를 사용하는 경우 를 추가 "identitySystem":"adfs" 합니다. 예제:

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    참고

    ID 시스템에 Microsoft Entra ID를 사용하는 경우 idSystem 필드를 추가할 필요가 없습니다.

  6. 에서 masterProfile다음 필드를 설정합니다.

    필드 Description
    dnsPrefix VM의 호스트 이름을 식별하는 데 사용할 고유한 문자열을 입력합니다. 예를 들어 리소스 그룹 이름을 기반으로 하는 이름입니다.
    count 배포에 사용할 마스터 수를 입력합니다. HA 배포의 최소값은 3이지만 비 HA 배포에는 1이 허용됩니다.
    vmSize Azure Stack Hub에서 지원하는 크기(예Standard_D2_v2: )를 입력합니다.
    distro aks-ubuntu-18.04 또는 aks-ubuntu-20.04를 입력합니다.
  7. 업데이트 중 agentPoolProfiles :

    필드 설명
    개수 배포에 사용할 에이전트 수를 입력합니다. 구독당 사용할 최대 노드 수는 50개입니다. 구독당 둘 이상의 클러스터를 배포하는 경우 총 에이전트 수가 50개를 초과하지 않도록 합니다. 샘플 API 모델 JSON 파일에 지정된 구성 항목을 사용해야 합니다.
    vmSize Azure Stack Hub에서 지원하는 크기(예Standard_D2_v2: )를 입력합니다.
    distro 또는 을 aks-ubuntu-20.04Windows입력합니다aks-ubuntu-18.04.
    Windows에서 실행되는 에이전트에 사용합니다 Windows . 예를 들어 kubernetes-windows.json을 참조하세요.
  8. 업데이트 중 linuxProfile :

    필드 Description
    adminUsername VM 관리자 사용자 이름을 입력합니다.
    ssh VM을 사용한 SSH 인증에 사용할 공개 키를 입력합니다. 키를 사용한 다음, 키를 사용합니다 ssh-rsa . 공개 키를 만드는 방법에 대한 지침은 Linux용 SSH 키 만들기를 참조하세요.

    사용자 지정 가상 네트워크에 배포하는 경우 사용자 지정 가상 네트워크에 Kubernetes 클러스터 배포의 API 모델에서 필요한 키와 값을 찾아 적절한 배열에 추가하는 방법에 대한 지침을 찾을 수 있습니다.

    참고

    Azure Stack Hub용 AKS 엔진에서는 클러스터를 만들기 위한 자체 인증서를 제공할 수 없습니다.

  9. Windows를 사용하는 경우 에서 windowsProfileadminPasswordadminUsername: 값을 업데이트합니다.

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

API 모델에 대한 자세한 정보

ASDK를 사용할 때 인증서 추가

ASDK(Azure Stack Development Kit)에 클러스터를 배포하고 Linux를 사용하는 경우 AKS 엔진을 실행하는 클라이언트 VM의 신뢰할 수 있는 인증서 저장소에 루트 인증서를 추가해야 합니다.

  1. 이 디렉터리에서 VM에서 루트 인증서를 찾습니다. /var/lib/waagent/Certificates.pem.
  2. 인증서 파일을 복사합니다.
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Kubernetes 클러스터 배포

API 모델에서 필요한 모든 값을 수집한 후 클러스터를 만들 수 있습니다. 이 시점에서 다음을 수행해야 합니다.

Azure Stack Hub 운영자에게 다음을 요청합니다.

  • 시스템의 상태를 확인하고, 실행 Test-AzureStack 및 OEM 공급업체의 하드웨어 모니터링 도구를 제안합니다.
  • 메모리, 스토리지 및 공용 IP와 같은 리소스를 포함하여 시스템 용량을 확인합니다.
  • 사용하려는 VM 수에 충분한 공간이 있는지 확인할 수 있도록 구독과 연결된 할당량에 대한 세부 정보를 제공합니다.

클러스터 배포를 계속 진행합니다.

  1. Azure Stack Hub CLI 플래그에서 AKS 엔진에 사용할 수 있는 매개 변수를 검토합니다.

    매개 변수 예제 Description
    azure-env AzureStackCloud AKS 엔진에 대상 플랫폼이 Azure Stack Hub임을 나타내려면 를 사용합니다 AzureStackCloud.
    identity-system adfs 선택 사항입니다. AD FS(Active Directory Federated Services)를 사용하는 경우 ID 관리 솔루션을 지정합니다.
    위치 로컬 Azure Stack Hub의 지역 이름입니다. ASDK의 경우 지역은 로 설정 local됩니다.
    resource-group kube-rg 새 리소스 그룹의 이름을 입력하거나 기존 리소스 그룹을 선택합니다. 리소스 이름은 영숫자 및 소문자여야 합니다.
    api-model ./kubernetes-azurestack.json 클러스터 구성 파일 또는 API 모델의 경로입니다.
    output-directory kube-rg 출력 파일 apimodel.json 및 기타 생성된 파일을 포함할 디렉터리의 이름을 입력합니다.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 서비스 주체 GUID를 입력합니다. Azure Stack Hub 관리자가 서비스 주체를 만들 때 애플리케이션 ID로 식별된 클라이언트 ID입니다.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 서비스 주체 암호를 입력합니다. 서비스를 만들 때 클라이언트 암호를 설정합니다.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 구독 ID를 입력합니다. 테넌트 구독을 제공해야 합니다. 관리 구독에 대한 배포는 지원되지 않습니다. 자세한 내용은 제품 구독을 참조하세요.

    다음은 예제입니다.

    참고

    AKSe 버전 0.75.3 이상의 경우 AKS 엔진 클러스터를 배포하는 명령은 입니다 aks-engine-azurestack deploy.

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. 어떤 이유로 출력 디렉터리를 만든 후 실행이 실패하는 경우 문제를 수정하고 명령을 다시 실행할 수 있습니다. 배포를 다시 실행하고 이전에 동일한 출력 디렉터리를 사용한 경우 AKS 엔진은 디렉터리가 이미 있다는 오류를 반환합니다. 플래그 --force-overwrite를 사용하여 기존 디렉터리를 덮어쓸 수 있습니다.

  3. AKS 엔진 클러스터 구성을 암호화된 안전한 위치에 저장합니다.

    apimodel.json 파일을 찾습니다. 안전한 위치에 저장합니다. 이 파일은 다른 모든 AKS 엔진 작업에서 입력으로 사용됩니다.

    생성된 apimodel.json 파일에는 입력 API 모델에서 사용하는 서비스 주체, 비밀 및 SSH 공개 키가 포함됩니다. 또한 파일에는 AKS 엔진이 다른 모든 작업을 수행하는 데 필요한 다른 모든 메타데이터가 있습니다. 파일이 손실되면 AKS 엔진이 클러스터를 구성할 수 없습니다.

    비밀은 암호화되지 않습니다. 파일을 암호화된 안전한 위치에 유지합니다.

클러스터 확인

에 연결하고 kubectl정보를 얻은 다음 노드의 상태를 가져오면 클러스터를 확인합니다.

  1. 컨트롤 플레인 kubeconfig 에 연결할 파일을 가져옵니다.

    • 이미 kubectl 설치한 경우 이 디렉터리 경로 /kubeconfig/kubeconfig.json에서 새로 만든 클러스터에 대한 파일을 검사kubeconfig. 를 디렉터리에 추가하여 /kubeconfig.json.kube 새 클러스터에 액세스할 수 있습니다.
      를 설치 kubectl하지 않은 경우 도구 설치 를 방문하여 Kubernetes 명령줄 도구를 설치합니다. 그렇지 않으면 아래 지침에 따라 컨트롤 플레인 노드 중 하나에서 클러스터에 액세스합니다.
  2. Azure Stack Hub 포털을 사용하여 컨트롤 플레인 노드 중 하나의 공용 IP 주소를 가져옵니다.

  3. Azure Stack Hub instance 액세스할 수 있는 컴퓨터에서 PuTTY 또는 MobaXterm과 같은 클라이언트를 사용하여 SSH를 통해 새 컨트롤 플레인 노드에 연결합니다.

  4. SSH 사용자 이름의 경우 클러스터 배포를 위해 제공한 키 쌍의 프라이빗 키 파일과 "azureuser"를 사용합니다.

  5. 클러스터 엔드포인트가 실행되고 있는지 확인합니다.

    kubectl cluster-info
    

    출력은 다음과 비슷해야 합니다.

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. 그런 다음 노드 상태를 검토합니다.

    kubectl get nodes
    

    출력은 다음과 같은 형태가 됩니다.

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

클러스터 배포 문제 해결

AKS 엔진을 사용하여 Kubernetes 클러스터를 배포하는 동안 오류가 발생하면 다음을 검사 수 있습니다.

  1. 올바른 SPN(서비스 주체 자격 증명)을 사용하고 있나요?
  2. SPN에 Azure Stack Hub 구독에 대한 "기여자" 역할이 있나요?
  3. Azure Stack Hub 계획에 충분한 할당량이 있나요?
  4. Azure Stack Hub instance 패치 또는 업그레이드가 적용되고 있나요?

자세한 내용은 Azure/aks-engine-azurestack GitHub 리포지토리의 문제 해결 문서를 참조하세요.

서비스 주체 비밀 회전

AKS 엔진을 사용하여 Kubernetes 클러스터를 배포한 후 서비스 주체(SPN)는 Azure Stack Hub instance Azure Resource Manager 상호 작용을 관리하는 데 사용됩니다. 어느 시점에서 서비스 주체에 대한 비밀이 만료 될 수 있습니다. 비밀이 만료되면 다음을 통해 자격 증명을 새로 고칠 수 있습니다.

  • 새 서비스 주체 암호를 사용하여 각 노드를 업데이트합니다.
  • 또는 API 모델 자격 증명을 업데이트하고 업그레이드를 실행합니다.

각 노드를 수동으로 업데이트

  1. 클라우드 운영자로부터 서비스 주체에 대한 새 비밀을 가져옵니다. Azure Stack Hub에 대한 지침은 앱 ID를 사용하여 Azure Stack Hub 리소스 액세스를 참조하세요.
  2. 클라우드 운영자가 제공하는 새 자격 증명을 사용하여 각 노드에서 /etc/kubernetes/azure.json 을 업데이트합니다. 업데이트를 수행한 후 및 kube-controller-manager를 모두 kubele 다시 시작합니다.

aks-engine 업데이트로 클러스터 업데이트

또는 apimodel.json 의 자격 증명을 바꾸고 업데이트된 .json 파일을 사용하여 동일하거나 최신 Kubernetes 버전으로 업그레이드를 실행할 수 있습니다. 모델 업그레이드에 대한 지침은 Azure Stack Hub에서 Kubernetes 클러스터 업그레이드를 참조하세요.

다음 단계