Azure์šฉ GKE์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ ๋…ธ๋“œ ํ’€์„ ๋งŒ๋“ค๊ณ  Azure์šฉ GKE๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Terraform ์ง€์›

Terraform์— ์ต์ˆ™ํ•˜๋‹ค๋ฉด GitHub์—์„œ ์ œ๊ณต๋˜๋Š” Terraform ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์š”๊ฑด์„ ์ž๋™ํ™”ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์ „ ๊ธฐ๋ณธ ์š”๊ฑด์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์‹คํ–‰๋˜๋Š” Azure ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ
  • Kubernetes ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ณต์ œ๋ณธ์˜ ์„œ๋ธŒ๋„ท
  • ์„œ๋น„์Šค ์ฃผ ๊ตฌ์„ฑ์›์„ ์‚ฌ์šฉํ•˜์—ฌ Azure ํ™˜๊ฒฝ์— ๋Œ€ํ•ด Azure์šฉ GKE์— ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” Azure ์—ญํ•  ํ• ๋‹น
  • Azure ์„œ๋น„์Šค์— ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  Azure ๊ณ„์ •์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Azure์šฉ GKE์— ์‚ฌ์šฉ๋˜๋Š” AzureClient ๋ฆฌ์†Œ์Šค
  • ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Azure ๊ฐ€์ƒ ๋จธ์‹ ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ SSH ํ‚ค ์Œ

์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค๋Š” ๋ชจ๋“  Anthos ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— ๊ณต์œ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ฉฐ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ฑ…์ž„์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ์™ธ์— ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๊ธฐ๋ณธ Azure ๋ฆฌ์†Œ์Šค๋Š” Azure์šฉ GKE์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

gcloud CLI์˜ ๊ธฐ๋ณธ ์„ค์ • ๊ตฌ์„ฑ

gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ๋ฐ Google Cloud ๋ฆฌ์ „์˜ ๊ธฐ๋ณธ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์—๋Š” ๊ณ ์œ  ์‹๋ณ„์ž์ธ ํ”„๋กœ์ ํŠธ ID๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ๊ณ ์œ ์˜ ID๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Google Cloud ๋ฆฌ์ „์€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด us-west1์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ฆฌ ๋ฆฌ์ „์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๋ฉด Google Cloud CLI๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ด๋ฅผ ํฌํ•จํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. --project ๋ฐ --location ํ”Œ๋ž˜๊ทธ๋ฅผ Google Cloud CLI์— ์ „๋‹ฌํ•˜์—ฌ ์„ค์ •์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋ณธ ์„ค์ •์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ๋ฐ ์œ„์น˜๋ฅผ ๊ตฌ์„ฑํ•œ ํ›„ Azure์šฉ GKE ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์™€ ์œ„์น˜์— ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID๋ฅผ ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  2. ๊ธฐ๋ณธ ๊ด€๋ฆฌ ์œ„์น˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
    

    GOOGLE_CLOUD_LOCATION์„ ์‚ฌ์šฉ์ž ์œ„์น˜(์˜ˆ: us-west1)๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์˜ Azure ๋ฆฌ์†Œ์Šค ID ์„ ํƒ

๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ID ์„ ํƒ

ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์„ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

CLUSTER_RESOURCE_GROUP_ID=$(az group show --query id --output tsv \
    --resource-group=CLUSTER_RESOURCE_GROUP_NAME)

CLUSTER_RESOURCE_GROUP_NAME์„ Azure ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ๋งŒ๋“ค๊ธฐ ๊ธฐ๋ณธ ์š”๊ฑด ๋‹จ๊ณ„์—์„œ ์„ค์ •ํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•  ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ID ์„ ํƒ

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ VNet ID๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

VNET_ID=$(az network vnet show --query id --output tsv \
    --resource-group=VNET_RESOURCE_GROUP_NAME \
    --name=VNET_NAME)

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์„œ๋ธŒ๋„ท ID ์„ ํƒ

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„œ๋ธŒ๋„ท ID๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

SUBNET_ID=$(az network vnet subnet show --query id --output tsv \
    --resource-group VNET_RESOURCE_GROUP_NAME \
    --vnet-name VNET_NAME \
    --name SUBNET_NAME)

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • VNET_RESOURCE_GROUP_NAME์„ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๊ฐ€ ํฌํ•จ๋œ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์€ Azure ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๋งŒ๋“ค๊ธฐ์—์„œ ์„ค์ •ํ•œ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ์ด๋ฆ„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • VNET_NAME์„ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. Azure ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๋งŒ๋“ค๊ธฐ์—์„œ ์„ค์ •ํ•œ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SUBNET_NAME์„ ์„œ๋ธŒ๋„ท ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: default).

ํด๋Ÿฌ์Šคํ„ฐ์˜ CIDR ๋ฒ”์œ„ ์„ ํƒ

Kubernetes์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— 2๊ฐœ์˜ CIDR ๋ฒ”์œ„๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ CIDR ๋ฒ”์œ„๋Š” VPC ์„œ๋ธŒ๋„ท์— ์‚ฌ์šฉ๋˜๋Š” CIDR ๋ฒ”์œ„์™€ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ์˜ˆ์ƒ ์ตœ๋Œ€ ํฌ๊ธฐ์— ๋งž๊ฒŒ ์ถฉ๋ถ„ํžˆ ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํฌ๋“œ ์ฃผ์†Œ CIDR ๋ฒ”์œ„: ์ƒˆ Pod๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ด ๋ฒ”์œ„์˜ IP ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์˜ˆ์‹œ: 192.168.208.0/20

  • ์„œ๋น„์Šค ์ฃผ์†Œ CIDR ๋ฒ”์œ„: ์ƒˆ ์„œ๋น„์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ด ๋ฒ”์œ„์˜ IP ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์˜ˆ์‹œ: 192.168.224.0/20

ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Azure์šฉ GKE์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud container azure clusters create azure-cluster-0 \
    --cluster-version 1.35.3-gke.300 \
    --azure-region AZURE_REGION \
    --fleet-project FLEET_PROJECT_ID \
    --client CLIENT_NAME \
    --resource-group-id $CLUSTER_RESOURCE_GROUP_ID \
    --vnet-id $VNET_ID \
    --subnet-id $SUBNET_ID \
    --pod-address-cidr-blocks POD_CIDR_BLOCK \
    --service-address-cidr-blocks SERVICE_CIDR_BLOCK \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • AZURE_REGION: Google Cloud ๋ฆฌ์ „๊ณผ ์—ฐ๊ฒฐ๋œ ์ง€์›๋˜๋Š” Azure ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค.
  • FLEET_PROJECT_ID๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋“ฑ๋กํ•  Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • CLIENT_NAME: AzureClient ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • POD_CIDR_BLOCK: ํด๋Ÿฌ์Šคํ„ฐ์˜ Pod ์ฃผ์†Œ ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค.
  • SERVICE_CIDR_BLOCK: ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„œ๋น„์Šค ์ฃผ์†Œ ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค.
  • SSH_PUBLIC_KEY๋ฅผ SSH ํ‚ค ์Œ ๋งŒ๋“ค๊ธฐ ๊ธฐ๋ณธ ์š”๊ฑด ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ๋Œ€๋กœ SSH ๊ณต๊ฐœ ํ‚ค์˜ ํ…์ŠคํŠธ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ํ•ด๋‹น ๋‹จ๊ณ„์—์„œ ๊ณต๊ฐœ ํ‚ค๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋ฉด ${SSH_PUBLIC_KEY}๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ ๋ฐ ์„ ํƒ์ ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” gcloud container azure clusters create ์ฐธ์กฐ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋…ธ๋“œ ํ’€ ๋งŒ๋“ค๊ธฐ

Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ ํ’€์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud container azure node-pools create pool-0 \
    --cluster azure-cluster-0 \
    --node-version 1.35.3-gke.300 \
    --vm-size Standard_B2s \
    --max-pods-per-node 110 \
    --min-nodes 1 \
    --max-nodes 5 \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --subnet-id $SUBNET_ID \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

SSH_PUBLIC_KEY๋ฅผ SSH ํ‚ค ์Œ ๋งŒ๋“ค๊ธฐ ๊ธฐ๋ณธ ์š”๊ฑด ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ๋Œ€๋กœ SSH ๊ณต๊ฐœ ํ‚ค์˜ ํ…์ŠคํŠธ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ณต๊ฐœ ํ‚ค๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋ฉด ${SSH_PUBLIC_KEY}๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ๋ณด๊ธฐ

ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋…ธ๋“œ ํ’€์„ ๋งŒ๋“  ํ›„์—๋Š” Google Cloud CLI ๋˜๋Š” Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ๋ณด๋ ค๋ฉด Google Cloud CLI ๋˜๋Š” Google Cloud ์ฝ˜์†” ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud

gcloud container azure clusters describe ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

gcloud container azure clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • CLUSTER_NAME: ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„
  • GOOGLE_CLOUD_LOCATION: ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Google Cloud์œ„์น˜์˜ ์ด๋ฆ„

Google Cloud ์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Google Kubernetes Engine ํด๋Ÿฌ์Šคํ„ฐ ๊ฐœ์š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    GKE ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ด๋™

  2. ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ด๋ฆ„ ๋ฐ ์œ„์น˜๋กœ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค.

  3. ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ๋ฐ ์‚ฌ์šฉ ์„ค์ •๋œ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ํŒจ๋„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ์–ป๊ธฐ

ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“  ํ›„ ํด๋Ÿฌ์Šคํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

gcloud container azure clusters get-credentials azure-cluster-0

์ด ๋ช…๋ น์–ด๋Š” Connect ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฌ์šฉํ•ด ๋งŒ๋“  ํด๋Ÿฌ์Šคํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋„๋ก kubectl์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. Connect ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋กœ ์‹คํ–‰๋˜๋Š” Connect ์—์ด์ „ํŠธ์— ๊ธฐ๋ฐ˜ํ•˜๋ฏ€๋กœ Connect ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋…ธ๋“œ ํ’€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด์ œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋น ๋ฅธ ์‹œ์ž‘์—์„œ๋Š” ์˜ˆ์‹œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(hello-app)์„ ๋ฐฐํฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„์™€ ๊ฐ™์€ ์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค(Stateless) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐํฌ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ฐ์ฒด๋Š” ์ธํ„ฐ๋„ท์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™๊ณผ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ๋งŒ๋“ค๊ธฐ

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ hello-app์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

์ด Kubernetes ๋ช…๋ น์–ด kubectl create deployment๋Š” hello-server๋ผ๋Š” ๋ฐฐํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฐฐํฌ์˜ ํฌ๋“œ๋Š” hello-app ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ช…๋ น์–ด์—์„œ

  • --image๋Š” ๋ฐฐํฌํ•  ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ด ๋ช…๋ น์–ด๋Š” Artifact Registry ์ €์žฅ์†Œ us-docker.pkg.dev/google-samples/containers/gke/hello-app์—์„œ ์˜ˆ์‹œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. :1.0์€ ๊ฐ€์ ธ์˜ฌ ํŠน์ • ์ด๋ฏธ์ง€ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ฒ„์ „์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด latest ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ๋…ธ์ถœ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•œ ํ›„์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฅผ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์— ๋…ธ์ถœํ•˜๋Š” Kubernetes ๋ฆฌ์†Œ์Šค์ธ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋…ธ์ถœํ•˜๋ ค๋ฉด ๋‹ค์Œ kubectl expose ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080

--type LoadBalancer ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ Azure ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. --port ํ”Œ๋ž˜๊ทธ๋Š” ์ธํ„ฐ๋„ท์— ๊ณต๊ฐœ ํฌํŠธ 80์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  --target-port ํ”Œ๋ž˜๊ทธ๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌํŠธ 8080์œผ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” Azure ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๊ฐ€๊ฒฉ ์ฑ…์ •์— ๋”ฐ๋ผ ์š”๊ธˆ์ด ์ฒญ๊ตฌ๋ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒ€์‚ฌ ๋ฐ ๋ณด๊ธฐ

  1. kubectl get pods๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์ค‘์ธ ํฌ๋“œ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    kubectl get pods
    

    ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ•˜๋‚˜์˜ hello-server ํฌ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ž„์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  2. kubectl get service๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ hello-server ์„œ๋น„์Šค๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    kubectl get service hello-server
    

    ์ด ๋ช…๋ น์–ด์˜ ์ถœ๋ ฅ์—์„œ EXTERNAL-IP ์—ด์— ์žˆ๋Š” ์„œ๋น„์Šค์˜ ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  3. ์™ธ๋ถ€ IP์™€ ๋…ธ์ถœ๋œ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    http://EXTERNAL-IP
    

Azure์šฉ GKE์— ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ญ์ œ

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋น„์Šค ๋ฐ ๋ฐฐํฌ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. gcloud container azure node-pools delete๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋…ธ๋“œ ํ’€์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. gcloud container azure clusters delete๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    gcloud container azure clusters delete azure-cluster-0
    

๋‹ค์Œ ๋‹จ๊ณ„