Skip to content

junwoojeong100/aks-mini-labs

Repository files navigation

AKS Mini Labs

Azure Kubernetes Service(AKS), μ»¨ν…Œμ΄λ„ˆ 기술, CI/CD μžλ™ν™”λ₯Ό μ‹€μŠ΅ν•  수 μžˆλŠ” ν•Έμ¦ˆμ˜¨ 랩 κ°€μ΄λ“œμž…λ‹ˆλ‹€. Jupyter Notebook 기반으둜 단계별 μ‹€μŠ΅μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“‹ λͺ©μ°¨

πŸŽ“ ν•™μŠ΅ λͺ©ν‘œ

이 μ‹€μŠ΅μ„ μ™„λ£Œν•˜λ©΄ λ‹€μŒμ„ ν•  수 있게 λ©λ‹ˆλ‹€:

μ»¨ν…Œμ΄λ„ˆ 기초

  • βœ… μ»¨ν…Œμ΄λ„ˆμ™€ κ°€μƒλ¨Έμ‹ μ˜ 차이점 이해
  • βœ… Dockerfile μž‘μ„± 및 λ©€ν‹° μŠ€ν…Œμ΄μ§€ λΉŒλ“œ κ΅¬ν˜„
  • βœ… μ»¨ν…Œμ΄λ„ˆ 이미지 λΉŒλ“œ 및 μ‹€ν–‰
  • βœ… Azure Container Registry ν™œμš©

Kubernetes & AKS

  • βœ… AKS ν΄λŸ¬μŠ€ν„° 생성 및 관리
  • βœ… Kubernetes Deployment 및 Service μž‘μ„±
  • βœ… HPAλ₯Ό ν†΅ν•œ μžλ™ ν™•μž₯ ꡬ성
  • βœ… Node Auto Provisioning ν™œμš©
  • βœ… Prometheus/Grafana둜 λͺ¨λ‹ˆν„°λ§ ꡬ성

CI/CD μžλ™ν™”

  • βœ… GitHub Actions μ›Œν¬ν”Œλ‘œμš° μž‘μ„±
  • βœ… Azure Pipelines ꡬ성
  • βœ… GitOps κ°œλ… 이해 및 Argo CD ν™œμš©
  • βœ… μžλ™ν™”λœ 배포 νŒŒμ΄ν”„λΌμΈ ꡬ좕

πŸš€ λΉ λ₯Έ μ‹œμž‘

방법 1: GitHub Codespaces (ꢌμž₯)

Open in GitHub Codespaces

  • μœ„ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ±°λ‚˜ μ €μž₯μ†Œμ—μ„œ Code > Create codespace on main 선택
  • λͺ¨λ“  도ꡬ가 μžλ™μœΌλ‘œ μ„€μΉ˜λ˜λ©°, λΈŒλΌμš°μ €μ—μ„œ λ°”λ‘œ μ‹€μŠ΅ κ°€λŠ₯
  • Python κ°€μƒν™˜κ²½, Azure CLI, Docker, kubectl μžλ™ μ„€μ •

방법 2: VS Code Dev Container (둜컬)

  1. 사전 μ€€λΉ„

  2. μ‹€ν–‰ 방법

    git clone https://github.com/junwoojeong100/aks-mini-labs.git
    cd aks-mini-labs
    code .
    • VS Codeμ—μ„œ Reopen in Container μ•Œλ¦Ό 클릭
    • λ˜λŠ” Ctrl+Shift+P β†’ Dev Containers: Reopen in Container μ‹€ν–‰
  3. μžλ™ μ„€μ •

    • Python κ°€μƒν™˜κ²½ 생성 (.venv)
    • Jupyter 컀널 등둝
    • Spring Boot ν”„λ‘œμ νŠΈ λΉŒλ“œ
    • λͺ¨λ“  도ꡬ μ„€μΉ˜ (Java 21, Maven, Docker, kubectl, Azure CLI)

μ‹€μŠ΅ μ‹œμž‘ν•˜κΈ°

  1. Azure CLI 둜그인

    az login --use-device-code
  2. λ…ΈνŠΈλΆ μ‹€ν–‰ μˆœμ„œ

    • 01-container-basics.ipynb β†’ μ»¨ν…Œμ΄λ„ˆ 기초 & ACR
    • 02-aks-hands-on.ipynb β†’ AKS ν΄λŸ¬μŠ€ν„° 운영
    • 03-cicd-automation.ipynb β†’ CI/CD μžλ™ν™”

πŸ’‘ Tip: Jupyter 컀널은 μžλ™μœΌλ‘œ Python (.venv)둜 μ„€μ •λ©λ‹ˆλ‹€.

🎯 사전 μš”κ΅¬μ‚¬ν•­

ν•„μˆ˜ ν•­λͺ©

  • Azure ꡬ독: 무료 계정 생성 κ°€λŠ₯
  • GitHub 계정: Codespaces μ‚¬μš©μ„ μœ„ν•΄ ν•„μš”

선택 사항 (3번 λ…ΈνŠΈλΆμš©)

  • Azure DevOps 계정: Azure Pipelines μ‹€μŠ΅ μ‹œ
  • GitHub Personal Access Token: GitHub Actions μ‹€μŠ΅ μ‹œ

λΉ„μš© μ•ˆλ‚΄

이 μ‹€μŠ΅μ—μ„œ μ‚¬μš©ν•˜λŠ” μ£Όμš” Azure λ¦¬μ†ŒμŠ€:

  • Azure Container Registry (Basic): μ•½ $5/μ›”
  • AKS ν΄λŸ¬μŠ€ν„° (2 nodes, Standard_DS2_v2): μ•½ $140/μ›”
  • Managed Prometheus & Grafana: μ‚¬μš©λŸ‰ 기반

πŸ’‘ Tip: μ‹€μŠ΅ μ™„λ£Œ ν›„ λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•˜λ©΄ λΉ„μš©μ„ μ΅œμ†Œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“š μ‹€μŠ΅ λ‚΄μš©

01-container-basics.ipynb

μ»¨ν…Œμ΄λ„ˆ κΈ°μ΄ˆλΆ€ν„° Azure Container RegistryκΉŒμ§€

  • μ»¨ν…Œμ΄λ„ˆ κ°œλ… 및 μ•„ν‚€ν…μ²˜
  • Spring Boot μ•± μ»¨ν…Œμ΄λ„ˆν™”
  • Dockerfile μž‘μ„± 및 이미지 λΉŒλ“œ
  • ACR에 이미지 ν‘Έμ‹œ

02-aks-hands-on.ipynb

AKS ν΄λŸ¬μŠ€ν„° 생성 및 운영

  • AKS ν΄λŸ¬μŠ€ν„° 생성 (μ•½ 5-10λΆ„ μ†Œμš”)
  • μ»¨ν…Œμ΄λ„ˆ 배포 및 μ„œλΉ„μŠ€ λ…ΈμΆœ
  • HPA μ˜€ν† μŠ€μΌ€μΌλ§ 및 NAP(Node Auto Provisioning)
  • Prometheus/Grafana λͺ¨λ‹ˆν„°λ§ μ„€μ •

03-cicd-automation.ipynb

CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕

  • GitHub Actions μ›Œν¬ν”Œλ‘œμš° 생성 (μˆ˜λ™ ν™œμ„±ν™” ν•„μš”)
  • Azure Pipelines μ„€μ •
  • Argo CDλ₯Ό ν†΅ν•œ GitOps 배포

μ°Έκ³ : GitHub Actions μ›Œν¬ν”Œλ‘œμš°λŠ” .disabled ν™•μž₯자둜 μƒμ„±λ©λ‹ˆλ‹€. μ‚¬μš©ν•˜λ €λ©΄ Secrets/Variables μ„€μ • ν›„ ν™•μž₯자λ₯Ό μ œκ±°ν•˜μ„Έμš”.

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

aks-mini-labs/
β”œβ”€β”€ .devcontainer/                 # Dev Container μ„€μ •
β”‚   β”œβ”€β”€ devcontainer.json          # μ»¨ν…Œμ΄λ„ˆ ꡬ성
β”‚   └── setup.sh                   # μžλ™ μ„€μ • 슀크립트
β”œβ”€β”€ 01-container-basics.ipynb      # μ»¨ν…Œμ΄λ„ˆ 기초 μ‹€μŠ΅
β”œβ”€β”€ 02-aks-hands-on.ipynb          # AKS ν΄λŸ¬μŠ€ν„° μ‹€μŠ΅
β”œβ”€β”€ 03-cicd-automation.ipynb       # CI/CD μžλ™ν™” μ‹€μŠ΅
β”œβ”€β”€ config.py                      # 곡톡 ν™˜κ²½ λ³€μˆ˜ μ„€μ •
β”œβ”€β”€ requirements.txt               # Python νŒ¨ν‚€μ§€ μ˜μ‘΄μ„±
β”œβ”€β”€ deployment.yaml                # Kubernetes 배포 ν…œν”Œλ¦Ώ
β”œβ”€β”€ springboot-docker-demo/        # Spring Boot μƒ˜ν”Œ μ•±
β”‚   β”œβ”€β”€ Dockerfile                 # λ©€ν‹° μŠ€ν…Œμ΄μ§€ λΉŒλ“œ μ„€μ •
β”‚   β”œβ”€β”€ pom.xml                    # Maven μ„€μ •
β”‚   └── src/                       # μ†ŒμŠ€ μ½”λ“œ
β”œβ”€β”€ .github/
β”‚   └── workflows/                 # GitHub Actions (3λ²ˆμ—μ„œ 생성)
└── azure-pipelines.yml            # Azure Pipelines (3λ²ˆμ—μ„œ 생성)

βš™οΈ ν™˜κ²½ λ³€μˆ˜ 및 곡톡 μ„€μ •

config.py μ‚¬μš©λ²•

λͺ¨λ“  λ…ΈνŠΈλΆμ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 섀정값은 config.py νŒŒμΌμ—μ„œ κ΄€λ¦¬λ©λ‹ˆλ‹€.

μ£Όμš” λ³€μˆ˜:

λ³€μˆ˜λͺ… μ„€λͺ… κΈ°λ³Έκ°’ μ‚¬μš© λ…ΈνŠΈλΆ
RESOURCE_GROUP Azure λ¦¬μ†ŒμŠ€ κ·Έλ£Ή 이름 aks-mini-labs-rg 01, 02, 03
LOCATION Azure 리전 koreacentral 01, 02, 03
ACR_NAME ACR 이름 (01번 μ‹€μŠ΅ ν›„ μ—…λ°μ΄νŠΈ ν•„μš”) None β†’ νƒ€μž„μŠ€νƒ¬ν”„λ‘œ μžλ™ 생성 01, 02, 03
AKS_CLUSTER_NAME AKS ν΄λŸ¬μŠ€ν„° 이름 aks-mini-labs-cluster 02, 03
APP_NAME μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름 myapp 01, 02, 03
IMAGE_TAG 이미지 νƒœκ·Έ latest 01, 02, 03

헬퍼 ν•¨μˆ˜:

  • get_acr_login_server(acr_name): ACR 둜그인 μ„œλ²„ μ£Όμ†Œ λ°˜ν™˜ (예: myacr123.azurecr.io)
  • get_full_image_name(acr_name, app_name, tag): 전체 이미지 이름 생성
  • print_config(): ν˜„μž¬ μ„€μ •λœ λͺ¨λ“  λ³€μˆ˜ 좜λ ₯

λ…ΈνŠΈλΆμ—μ„œ μ‚¬μš©:

# λͺ¨λ“  μ„€μ • 뢈러였기
from config import *

# μ„€μ • 확인
print_config()

# κ°œλ³„ λ³€μˆ˜ μ‚¬μš©
print(f"λ¦¬μ†ŒμŠ€ κ·Έλ£Ή: {RESOURCE_GROUP}")

⚠️ μ€‘μš”: ACR_NAME μ—…λ°μ΄νŠΈ 방법은 각 λ…ΈνŠΈλΆλ³„ μ£Όμ˜μ‚¬ν•­μ„ μ°Έκ³ ν•˜μ„Έμš”.

⚠️ 각 λ…ΈνŠΈλΆλ³„ μ£Όμ˜μ‚¬ν•­

01-container-basics.ipynb

  • ACR 이름 μžλ™ 생성: ACR 이름이 νƒ€μž„μŠ€νƒ¬ν”„λ‘œ μžλ™ μƒμ„±λ©λ‹ˆλ‹€ (예: myacr1760169422)
  • ACR_NAME μˆ˜λ™ μ—…λ°μ΄νŠΈ ν•„μˆ˜:
    1. λ…ΈνŠΈλΆ μ‹€ν–‰ ν›„ μƒμ„±λœ ACR 이름을 확인
    2. config.py νŒŒμΌμ„ μ—΄μ–΄ ACR_NAME 값을 μ—…λ°μ΄νŠΈ
      # config.py 파일 μˆ˜μ • μ˜ˆμ‹œ
      ACR_NAME = "myacr1760169422"  # μƒμ„±λœ μ‹€μ œ μ΄λ¦„μœΌλ‘œ λ³€κ²½
    3. 파일 μ €μž₯ ν›„ 02, 03번 λ…ΈνŠΈλΆμ—μ„œ ν•΄λ‹Ή ACR μ‚¬μš© κ°€λŠ₯

02-aks-hands-on.ipynb

  • AKS ν΄λŸ¬μŠ€ν„° 생성 μ‹œκ°„: μ•½ 5-10λΆ„ μ†Œμš”
  • deployment.yaml μžλ™ 생성: Kubernetes 배포 λ§€λ‹ˆνŽ˜μŠ€νŠΈκ°€ μžλ™μœΌλ‘œ μƒμ„±λ©λ‹ˆλ‹€

03-cicd-automation.ipynb

  • GitHub Actions μ›Œν¬ν”Œλ‘œμš° ν™œμ„±ν™”:
    • μ›Œν¬ν”Œλ‘œμš° 파일이 .disabled ν™•μž₯자둜 μƒμ„±λ©λ‹ˆλ‹€
    • ν™œμ„±ν™” 절차:
      1. GitHub Repository Settingsμ—μ„œ Secrets μ„€μ •: AZURE_CREDENTIALS
      2. GitHub Repository Settingsμ—μ„œ Variables μ„€μ •: ACR_NAME
      3. .github/workflows/ λ””λ ‰ν† λ¦¬μ˜ μ›Œν¬ν”Œλ‘œμš° νŒŒμΌμ—μ„œ .disabled ν™•μž₯자 제거
  • Azure DevOps: Azure Pipelines μ‚¬μš© μ‹œ Service Connection 섀정이 ν•„μš”ν•©λ‹ˆλ‹€

πŸ› οΈ 문제 ν•΄κ²°

ACR 둜그인 μ‹€νŒ¨

  • Azure CLI 둜그인 μ„Έμ…˜μ΄ λ§Œλ£Œλ˜μ—ˆμ„ 수 있음
  • az login λͺ…λ ΉμœΌλ‘œ 재둜그인

이미지 λΉŒλ“œ μ‹€νŒ¨

  • Docker 데λͺ¬μ΄ μ‹€ν–‰ 쀑인지 확인: docker ps
  • λ””μŠ€ν¬ 곡간 확인: df -h

Pod Pending μƒνƒœ

  • kubectl describe pod <pod-name>으둜 원인 확인
  • NAPκ°€ ν™œμ„±ν™”λ˜μ–΄ 있으면 μžλ™μœΌλ‘œ λ…Έλ“œ μΆ”κ°€

λ¦¬μ†ŒμŠ€ κ·Έλ£Ή λ³€κ²½

  • config.py의 RESOURCE_GROUP λ³€μˆ˜ μˆ˜μ •
  • 이후 λͺ¨λ“  λ…ΈνŠΈλΆμ—μ„œ λ™μΌν•œ 이름 μ‚¬μš©

πŸ”— μ°Έκ³  자료

μ»¨ν…Œμ΄λ„ˆ 및 Docker

Azure 곡식 λ¬Έμ„œ

Kubernetes

πŸ’¬ κΈ°μ—¬ 및 ν”Όλ“œλ°±

이 ν”„λ‘œμ νŠΈμ— κΈ°μ—¬ν•˜κ³  μ‹ΆμœΌμ‹œλ‹€λ©΄:

  1. Fork ν›„ μƒˆλ‘œμš΄ 브랜치 생성
  2. 변경사항 컀밋
  3. Pull Request 제좜

버그 λ¦¬ν¬νŠΈλ‚˜ κΈ°λŠ₯ μ œμ•ˆμ€ Issuesλ₯Ό μ΄μš©ν•΄μ£Όμ„Έμš”.

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€.


Made with ❀️ for Azure & Kubernetes learners

About

Labs for Azure Kubernetes Service (AKS), containers, GitHub Actions, Azure Pipelines and Argo CD

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published