Azure Stack Hub에서 Azure Kubernetes Service 테스트 애플리케이션 배포
Azure Stack Hub에서 AKS(Azure Kubernetes Service) 서비스를 사용하기 시작하는 방법에 대한 가이드입니다. 이 문서에서는 Azure Stack Hub의 AKS를 숙지할 수 있도록 일부 테스트 앱을 클러스터에 배포하는 방법을 설명합니다. Azure Stack Hub에서 사용할 수 있는 기능은 글로벌 Azure에서 사용할 수 있는 기능의 하위 집합 입니다.
시작하기 전에 Azure Stack Hub instance AKS 클러스터를 만들 수 있는지 확인합니다. 첫 번째 클러스터를 설정하고 만드는 방법에 대한 지침은 CLI를 사용하여 Azure Stack Hub에서 Azure Kubernetes Service 사용을 참조하세요.
테스트 앱 배포
스탬프가 연결된 경우 다음 지침에 따라 Prometheus 및 Grafana를 클러스터에 배포할 수 있습니다.
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
안정적인 최신 Helm 리포지토리가 있는지 확인합니다.
helm repo add stable https://charts.helm.sh/stable helm repo update
Prometheus를 설치합니다.
helm install my-prometheus stable/prometheus --set server.service.type=LoadBalancer --set rbac.create=false
Prometheus 계정에 대한 클러스터 관리 액세스 권한을 부여합니다. 보안상의 이유로 낮은 사용 권한이 더 좋습니다.
kubectl create clusterrolebinding my-prometheus-server --clusterrole=cluster-admin --serviceaccount=default:my-prometheus-server
Grafana를 설치합니다.
helm install my-grafana stable/grafana --set service.type=LoadBalancer --set rbac.create=false
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 추가
SPN을 ACR에 기여자 추가합니다.
참고
이 스크립트는 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