Azure Stack Hub에서 AKS 엔진을 사용하여 Kubernetes 클러스터 배포
AKS 엔진을 실행하는 클라이언트 VM에서 Azure Stack Hub에 Kubernetes 클러스터를 배포할 수 있습니다. 이 문서에서는 클러스터 사양을 작성하고, apimodel.json 파일을 사용하여 클러스터를 배포하고, Helm을 사용하여 MySQL을 배포하여 클러스터를 확인하는 것을 살펴봅니다.
클러스터 사양 정의
API 모델이라는 JSON 형식을 사용하여 문서 파일에서 클러스터 사양을 지정할 수 있습니다. AKS 엔진은 API 모델의 클러스터 사양을 사용하여 클러스터를 만듭니다.
AKS 엔진 및 해당 이미지 매핑에서 최근 릴리스 에 대한 OS 및 AKS 엔진 버전 번호에 대한 API 모델의 예를 찾을 수 있습니다.
- 테이블에서 AKS 엔진 버전 번호(예:
v.0.63.0
)를 찾습니다. - API 모델 샘플 테이블에서 OS에 대한 링크를 선택하고 엽니다.
- 원시를 선택합니다. 다음 지침에서 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 모델을 만드는 방법에 대해 설명합니다.
먼저 Linux 또는 Windows용 Azure Stack Hub API 모델 파일을 사용합니다. 컴퓨터에서 AKS 엔진을 설치하고 다음을 실행합니다.
curl -o kubernetes-azurestack.json <URL for the API Model>
참고 항목
연결이 끊긴 경우 파일을 다운로드하여 편집하려는 연결이 끊긴 컴퓨터에 수동으로 복사할 수 있습니다. PuTTY 또는 WinSCP와 같은 도구를 사용하여 Linux 컴퓨터에 파일을 복사할 수 있습니다.
편집기에서 API 모델을 열려면 nano를 사용할 수 있습니다.
nano ./kubernetes-azurestack.json
참고 항목
Nano를 설치하지 않은 경우 Ubuntu
sudo apt-get install nano
에 nano를 설치할 수 있습니다.kubernetes-azurestack.json 파일에서 orchestratorRelease 및 orchestratorVersion을 찾습니다. 지원되는 Kubernetes 버전 중 하나를 선택합니다. 릴리스 정보에서 버전 테이블을 찾을 수 있습니다.
orchestratorRelease
x.xx 및 orchestratorVersion을 x.xx.x로 지정합니다. 현재 버전 목록은 지원되는 AKS 엔진 버전을 참조 하세요.테넌트 포털에 URL을 찾아
customCloudProfile
제공합니다. 예들 들어https://portal.local.azurestack.external
입니다.AD FS를 사용하는 경우 추가
"identitySystem":"adfs"
합니다. 예를 들면 다음과 같습니다."customCloudProfile": { "portalURL": "https://portal.local.azurestack.external", "identitySystem": "adfs" },
참고 항목
ID 시스템에 Microsoft Entra ID를 사용하는 경우 identitySystem 필드를 추가할 필요가 없습니다.
에서
masterProfile
다음 필드를 설정합니다.필드 설명 dnsPrefix VM의 호스트 이름을 식별하는 데 사용될 고유 문자열을 입력합니다. 예를 들어 리소스 그룹 이름을 기반으로 하는 이름입니다. count 배포에 사용할 마스터 수를 입력합니다. HA 배포의 최소값은 3이지만 비 HA 배포에는 1이 허용됩니다. vmSize Azure Stack Hub에서 지원하는 크기를 입력합니다(예: /> Standard_D2_v2
).배포판 aks-ubuntu-18.04
또는aks-ubuntu-20.04
를 입력합니다.업데이트 중
agentPoolProfiles
:필드 설명 count 배포에 사용할 에이전트 수를 입력합니다. 구독당 사용할 최대 노드 수는 50개입니다. 구독당 둘 이상의 클러스터를 배포하는 경우 총 에이전트 수가 50개를 넘지 않도록 합니다. 샘플 API 모델 JSON 파일에 지정된 구성 항목을 사용해야 합니다. vmSize Azure Stack Hub에서 지원하는 크기를 입력합니다(예: /> Standard_D2_v2
).배포판 또는 을 aks-ubuntu-20.04
입력aks-ubuntu-18.04
합니다Windows
.
Windows에서 실행되는 에이전트에 사용합니다Windows
. 예를 들어 kubernetes-windows.json 참조하세요 .업데이트 중
linuxProfile
:필드 설명 adminUsername VM 관리자 사용자 이름을 입력합니다. ssh VM을 사용하여 SSH 인증에 사용할 공개 키를 입력합니다. 키를 사용한 ssh-rsa
다음, 공개 키를 만드는 방법에 대한 지침은 Linux용 SSH 키 만들기를 참조하세요.사용자 지정 가상 네트워크에 배포하는 경우 Kubernetes 클러스터를 사용자 지정 가상 네트워크에 배포할 때 API 모델의 적절한 배열에 필요한 키와 값을 찾아서 추가하는 방법에 대한 지침을 찾을 수 있습니다.
참고 항목
Azure Stack Hub용 AKS 엔진에서는 클러스터를 만들기 위한 자체 인증서를 제공할 수 없습니다.
Windows
windowsProfile
를 사용하는 경우 다음의adminUsername:
adminPassword
값을 업데이트합니다."windowsProfile": { "adminUsername": "azureuser", "adminPassword": "", "sshEnabled": true }
API 모델에 대한 자세한 정보
- API 모델에서 사용 가능한 모든 옵션에 대한 전체 참조는 클러스터 정의를 참조 하세요.
- Azure Stack Hub에 대한 특정 옵션에 대한 강조 표시는 Azure Stack Hub 클러스터 정의 세부 정보를 참조 하세요.
ASDK를 사용할 때 인증서 추가
ASDK(Azure Stack Development Kit)에 클러스터를 배포하고 Linux를 사용하는 경우 AKS 엔진을 실행하는 클라이언트 VM의 신뢰할 수 있는 인증서 저장소에 루트 인증서를 추가해야 합니다.
- 이 디렉터리의 VM에서 루트 인증서를 찾습니다.
/var/lib/waagent/Certificates.pem.
- 인증서 파일을 복사합니다.
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 수에 충분한 공간이 있는지 확인할 수 있도록 구독과 연결된 할당량에 대한 세부 정보를 제공합니다.
클러스터 배포를 계속 진행합니다.
Azure Stack Hub CLI 플래그에서 AKS 엔진에 사용할 수 있는 매개 변수를 검토합니다.
매개 변수 예 설명 azure-env AzureStackCloud 대상 플랫폼이 Azure Stack Hub임을 AKS 엔진에 나타내려면 . AzureStackCloud
identity-system adfs 선택 사항. AD FS(Active Directory Federated Services)를 사용하는 경우 ID 관리 솔루션을 지정합니다. location 로컬 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 서비스 주체 암호를 입력합니다. 서비스를 만들 때 클라이언트 비밀을 설정합니다. 구독 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
어떤 이유로 출력 디렉터리를 만든 후 실행이 실패하는 경우 문제를 수정하고 명령을 다시 실행할 수 있습니다. 배포를 다시 실행하고 이전에 동일한 출력 디렉터리를 사용한 경우 AKS 엔진은 디렉터리가 이미 있다는 오류를 반환합니다. 플래그
--force-overwrite
를 사용하여 기존 디렉터리를 덮어쓸 수 있습니다.AKS 엔진 클러스터 구성을 암호화된 안전한 위치에 저장합니다.
파일 apimodel.json 찾습니다. 안전한 위치에 저장합니다. 이 파일은 다른 모든 AKS 엔진 작업에서 입력으로 사용됩니다.
생성된 apimodel.json 파일에는 입력 API 모델에서 사용하는 서비스 주체, 비밀 및 SSH 공개 키가 포함됩니다. 또한 파일에는 AKS 엔진이 다른 모든 작업을 수행하는 데 필요한 다른 모든 메타데이터도 있습니다. 파일이 손실되면 AKS 엔진에서 클러스터를 구성할 수 없습니다.
비밀은 암호화되지 않습니다. 파일을 암호화된 안전한 위치에 보관합니다.
클러스터 확인
연결하고 kubectl
, 정보를 얻은 다음, 노드의 상태를 가져오면 클러스터를 확인합니다.
컨트롤 플레인
kubeconfig
에 연결할 파일을 가져옵니다.- 이미
kubectl
설치한 경우 이 디렉터리 경로/kubeconfig/kubeconfig.json
에서 새로 만든 클러스터에 대한 파일을 확인kubeconfig
합니다. 디렉터리에 추가하고/kubeconfig.json
.kube
이름을 "config"로 변경하여 새 클러스터에 액세스할 수 있습니다.
설치kubectl
하지 않은 경우 설치 도구를 방문하여 Kubernetes 명령줄 도구를 설치합니다. 그렇지 않으면 아래 지침에 따라 컨트롤 플레인 노드 중 하나에서 클러스터에 액세스합니다.
- 이미
Azure Stack Hub 포털을 사용하여 컨트롤 플레인 노드 중 하나의 공용 IP 주소를 가져옵니다.
Azure Stack Hub 인스턴스에 액세스할 수 있는 컴퓨터에서 PuTTY 또는 MobaXterm과 같은 클라이언트를 사용하여 SSH를 통해 새 컨트롤 플레인 노드에 연결합니다.
SSH 사용자 이름의 경우 클러스터 배포를 위해 제공한 키 쌍의 "azureuser" 및 프라이빗 키 파일을 사용합니다.
클러스터 엔드포인트가 실행되고 있는지 확인합니다.
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
그런 다음 노드 상태를 검토합니다.
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 클러스터를 배포하는 동안 오류가 발생하면 다음을 확인할 수 있습니다.
- 올바른 SPN(서비스 주체 자격 증명)을 사용하고 있나요?
- SPN에 Azure Stack Hub 구독에 대한 "기여자" 역할이 있나요?
- Azure Stack Hub 계획에 충분한 할당량이 있나요?
- Azure Stack Hub 인스턴스에 패치 또는 업그레이드가 적용되고 있나요?
자세한 내용은 Azure/aks-engine-azurestack GitHub 리포지토리의 문제 해결 문서를 참조하세요.
서비스 주체 비밀 회전
AKS 엔진을 사용하여 Kubernetes 클러스터를 배포한 후에는 서비스 주체(SPN)가 Azure Stack Hub 인스턴스에서 Azure Resource Manager와의 상호 작용을 관리하는 데 사용됩니다. 이 경우 서비스 주체의 비밀이 만료 될 수 있습니다. 비밀이 만료되면 다음을 통해 자격 증명을 새로 고칠 수 있습니다.
- 새 서비스 주체 암호를 사용하여 각 노드를 업데이트합니다.
- 또는 API 모델 자격 증명을 업데이트하고 업그레이드를 실행합니다.
각 노드를 수동으로 업데이트
- 클라우드 운영자로부터 서비스 주체에 대한 새 비밀을 가져옵니다. Azure Stack Hub에 대한 지침은 앱 ID를 사용하여 Azure Stack Hub 리소스에 액세스하는 방법을 참조 하세요.
- 클라우드 운영자가 제공한 새 자격 증명을 사용하여 각 노드에서 /etc/kubernetes/azure.json 업데이트합니다. 업데이트를 수행한 후 두 가지를 모두
kubele
다시 시작합니다kube-controller-manager
.
aks-engine 업데이트로 클러스터 업데이트
또는 apimodel.json 자격 증명을 바꾸고 업데이트된 .json 파일을 사용하여 동일한 또는 최신 Kubernetes 버전으로 업그레이드를 실행할 수 있습니다. 모델 업그레이드에 대한 지침은 Azure Stack Hub에서 Kubernetes 클러스터 업그레이드를 참조 하세요.