Azure Stack Hub에서 Azure Kubernetes Service 테스트 애플리케이션 배포

Azure Stack Hub에서 AKS(Azure Kubernetes Service) 서비스를 사용하기 위한 가이드입니다. 이 문서에서는 Azure Stack Hub의 AKS에 익숙해지도록 일부 테스트 앱을 클러스터에 배포하는 방법을 설명합니다. Azure Stack Hub에서 사용할 수 있는 기능은 글로벌 Azure에서 사용할 수 있는 기능의 하위 집합 입니다.

시작하기 전에 Azure Stack Hub 인스턴스에 AKS 클러스터를 만들 수 있는지 확인합니다. 첫 번째 클러스터를 설정하고 만드는 방법에 대한 지침은 CLI를 사용하여 Azure Stack Hub에서 Azure Kubernetes Service 사용을 참조하세요.

테스트 앱 배포

스탬프가 연결된 경우 다음 지침에 따라 Prometheus 및 Grafana를 클러스터에 배포할 수 있습니다.

  1. Helm 3 다운로드 및 설치:

    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
    

    참고

    Windows 사용자는 Chocolatey를 사용하여 Helm을 설치합니다.

    choco install kubernetes-helm
    
  2. 안정적인 최신 Helm 리포지토리가 있는지 확인합니다.

    helm repo add stable https://charts.helm.sh/stable
    helm repo update
    
  3. Prometheus를 설치합니다.

    helm install my-prometheus stable/prometheus --set server.service.type=LoadBalancer --set rbac.create=false
    
  4. Prometheus 계정에 대한 클러스터 관리 액세스 권한을 부여합니다. 보안상의 이유로 낮은 사용 권한이 더 좋습니다.

    kubectl create clusterrolebinding my-prometheus-server --clusterrole=cluster-admin --serviceaccount=default:my-prometheus-server
    
  5. Grafana를 설치합니다.

    helm install my-grafana stable/grafana --set service.type=LoadBalancer --set rbac.create=false
    
  6. Grafana 포털에 대한 비밀을 가져옵니다.

    kubectl get secret --namespace default my-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
    

참고

Windows 다음 PowerShell cmdlet을 사용하여 비밀을 가져옵니다.

\$env:Path = \$env:Path + ";\$env:USERPROFILE\\.azure-kubectl"
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String(\$(kubectl get secret --namespace default my-grafana -o jsonpath="{.data.admin-password}")))

ACR을 사용하여 AKS에 앱 배포

이때 클라이언트 컴퓨터가 클러스터에 연결되고 kubectl 을 사용하여 클러스터를 구성하고 애플리케이션을 배포할 수 있습니다. ACR(Azure Container Registry) 서비스도 테스트하는 경우 아래 지침을 따를 수 있습니다.

로컬 ACR에 액세스하기 위한 Docker 레지스트리 비밀

로컬 ACR에서 애플리케이션 이미지를 배포하는 경우 Kubernetes 클러스터가 레지스트리에서 이미지를 끌어올 수 있도록 비밀을 저장해야 합니다. 이렇게 하려면 SPN(서비스 주체 ID) 및 비밀을 제공하고, SPN을 원본 레지스트리에 기여자로 추가하고, Kubernetes 비밀을 만들어야 합니다. 또한 비밀을 참조하도록 YAML 파일을 업데이트해야 합니다.

ACR에 SPN 추가

ACR에 기여자로 SPN을 추가합니다.

참고

Azure Stack Hub에 아직 ACRPULL 역할이 없으므로 이 스크립트는 Azure Container Registry 사이트(bash 샘플)에서 수정되었습니다. 이 샘플은 PowerShell 스크립트이며, bash로 작성할 수 있습니다. 시스템에 대한 값을 추가해야 합니다.

# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the SPN's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=mycontainerregistry
SERVICE_PRINCIPAL_ID=<service-principal-ID>

# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

# Assign the desired role to the SPN. 
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role contributor

Kubernetes에서 비밀 만들기

다음 명령을 사용하여 Kubernetes 클러스터에 비밀을 추가합니다. 코드 조각에서 시스템에 대한 값을 추가해야 합니다.

kubectl create secret docker-registry <secret name> \
kubectl create secret docker-registry <secret name> \
    --docker-server=<ACR container registry URL> \
    --docker-username=<service principal ID> \
    --docker-password=<service principal secret> 

앱 YAML에서 비밀을 참조하는 예제

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment 
spec:
selector:
  matchLabels:
   app: nginx
replicas: 2
template:
  metadata:
   labels:
    app: nginx
  spec:
   containers:
   - name: nginx
     image: democr2.azsacr.redmond.ext-n31r1208.masd.stbtest.microsoft.com/library/nginx:1.17.3
     imagePullPolicy: Always
     ports: 
      - containerPort: 80
   imagePullSecrets:
     - name: democr2
 
 
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80
  type: LoadBalancer

다음 단계

CLI를 사용하여 Azure Stack Hub에서 Azure Kubernetes Service 사용