심플 코스 #2 Azure Managed Workload

codelab·2023년 10월 11일
0

Multi Cloud

목록 보기
3/11

워크로드

워크로드 생성에 앞서 워크로드에 대해 간단히 알아봅시다.
워크로드는 제어권을 기준으로 두 가지로 구분합니다.

  • Workload는 k8s control-plane node를 워크로드의 클러스터 안에 생성하여 이를 사용자가 제어할 수 있습니다.
  • 반면, Managed Workload는 k8s control-plane node가 클라우드 공급자(azure 등)에 가상화되기 때문에 사용자가 직접 제어할 수 없다는 차이가 있습니다.

제어의 주도권을 사용자가 갖게 되면 다양한 커스텀이 가능해지는 장점이 있지만 하나하나 세팅을 해주어야 하는 불편함이 발생합니다. 주도권을 클라우드 공급자가 갖게 되면 세부 설정을 바꿀 수 없는 단점이 있지만 이미 클라우드 공급자가 만들어둔 기능들을 큰 부가작업 없이 사용할 수 있게 됩니다. 워크로드를 사용할 때 로드벨랜서(백엔드, 프론트엔드 집합 등 포함), 볼륨 관리 등 클라우드 인프라와의 협동 기능이 필요한데, Managed Workload는 이 연결이 이미 되어 있습니다.

서론은 여기까지로 하고 우리는 이중 무료 크래딧을 제공하는 Azure에 Managed Workload 생성해 봅시다.


준비

설치

Azure CLI

https://learn.microsoft.com/ko-kr/cli/azure/install-azure-cli

# for Mac
➜  brew update && brew install azure-cli

# for Ubuntu
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

jq

sudo apt install jq -y

권한 & 환경변수 설정

https://capz.sigs.k8s.io/topics/getting-started
https://capz.sigs.k8s.io/topics/managedcluster

# Azure CLI를 사용하여 로그인합니다.
az login

# Azure resource를 등록합니다.
```bash
az provider register -n Microsoft.ContainerService
az provider register -n Microsoft.Compute
az provider register -n Microsoft.Network
az provider register -n Microsoft.ManagedIdentity
az provider register -n Microsoft.Authorization
az provider register -n Microsoft.ResourceHealth

# Azure 구독을 나열합니다.
az account list -o table

# 계정이 두 개 이상인 경우 사용하려는 계정을 선택하세요.
az account set -s <SubscriptionId>

# 구독 ID를 환경 변수에 저장하세요.
vi ~/.zshrc or ~/.bashrc
export AZURE_SUBSCRIPTION_ID="<SubscriptionId>"
export AZURE_TENANT_ID="<tenant>"
source ~/.zshrc

# 지역조회
az account list-locations --output table

vi ~/.zshrc or .bashrc
# -- azure
# Kubernetes values
export CLUSTER_NAME="az"
export WORKER_MACHINE_COUNT=1
export KUBERNETES_VERSION="v1.27.3"
# 관리형 클러스터에는 클러스터 API "MachinePool" 기능 플래그가 활성화되어 있어야 합니다. 
export EXP_MACHINE_POOL=true
# 선택적으로 CAPZ “AKSResourceHealth” 기능 플래그도 활성화할 수 있습니다.
export EXP_AKS_RESOURCE_HEALTH=true

# Azure values
export AZURE_LOCATION="eastus2"
export AZURE_RESOURCE_GROUP="az"
source ~/.zshrc

WorkLoad 생성

# 새 서비스 주체를 만들고 로컬 파일에 저장합니다.
az ad sp create-for-rbac --role Contributor --scopes="/subscriptions/${AZURE_SUBSCRIPTION_ID}" --sdk-auth > sp.json

WARNING: Option '--sdk-auth' has been deprecated and will be removed in a future release.
WARNING: Creating 'Contributor' role assignment under scope '/subscriptions/78c4440c-2050-4d5a-93f3-e30263f35cd9'
WARNING: The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli


# 현재 셸에서 다음 변수를 내보냅니다.
export AZURE_SUBSCRIPTION_ID="$(cat sp.json | jq -r .subscriptionId | tr -d '\n')"
export AZURE_CLIENT_SECRET="$(cat sp.json | jq -r .clientSecret | tr -d '\n')"
export AZURE_CLIENT_ID="$(cat sp.json | jq -r .clientId | tr -d '\n')"
export AZURE_TENANT_ID="$(cat sp.json | jq -r .tenantId | tr -d '\n')"
export AZURE_NODE_MACHINE_TYPE="Standard_D2s_v3"
export AZURE_CLUSTER_IDENTITY_SECRET_NAME="cluster-identity-secret"
export AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE="default"
export CLUSTER_IDENTITY_NAME="cluster-identity"

# 관리 클러스터에서 ID 비밀을 생성합니다.
kubectl create secret generic "${AZURE_CLUSTER_IDENTITY_SECRET_NAME}" --from-literal=clientSecret="${AZURE_CLIENT_SECRET}"

# Clusterctl을 초기화합니다.
# clusterctl delete --all --include-crd --include-namespace 
clusterctl init --infrastructure azure

# Clusterctl을 실행하여 리소스 템플릿을 만든 다음 관리 클러스터에 적용합니다.
clusterctl generate cluster ${CLUSTER_NAME} --kubernetes-version ${KUBERNETES_VERSION} --flavor aks > az-cluster.yaml

# assumes an existing management cluster
kubectl apply -f az-cluster.yaml

생성 확인

kubectl get cluster -w
kubectl get cluster-api -o wide
clusterctl describe --show-conditions all cluster az

kubectl logs deploy/capz-controller-manager -n capz-system manager

심플 코스 완료

벌써 심플코스가 완료되었습니다.
생각보다 어렵지 않으셨으리라 생각합니다.
다음에 기회가 되면 커스텀이 가능한 버전의 중급 코스도 마련할 생각이니 기대(?)해 주세요 :)

profile
Think about a better architecture

0개의 댓글