[DevOps] Kubernetes

illilili·2025년 6월 16일

DevOps

목록 보기
2/12
post-thumbnail

✅ 쿠버네티스(Kubernetes)란?

  • 컨테이너화된 워크로드와 서비스를 자동으로 배포, 확장, 관리해주는 오픈소스 플랫폼
  • 원래 Google에서 내부 운영 도구 "Borg"에서 발전
  • 현재 CNCF(Cloud Native Computing Foundation)에서 관리
  • 약칭: k8s (k + 8자 + s)

🔹 쿠버네티스로 할 수 있는 일

  • 컨테이너 자동 배포 및 관리
  • 컨테이너 간 서비스 디스커버리 및 로드밸런싱
  • 자동 스케일링(HPA)
  • 롤링 업데이트 및 롤백
  • 자가 복구 (Crash 시 자동 재시작 등)

🔹 쿠버네티스 핵심 구성 요소

구성 요소설명
Pod컨테이너 1개 이상을 감싼 실행 단위
Node쿠버네티스가 Pod를 배포하는 실제 머신 (VM 또는 물리 서버)
Cluster하나 이상의 Node로 구성된 쿠버네티스 전체 시스템
Deployment원하는 상태(Pod 개수 등)를 선언하고 자동으로 유지하는 객체
ServicePod 앞단에 위치한 고정 접점 IP/포트 제공하는 로드밸런서 역할

🔹 Kubernetes vs Docker Swarm

항목KubernetesDocker Swarm
오케스트레이션 수준복잡하고 유연함단순하고 빠름
확장성매우 높음상대적으로 낮음
커뮤니티매우 크고 활발함상대적으로 작음
학습 난이도높음낮음

✅ 컨테이너 오케스트레이션 구조

🔹 자가 치유 메커니즘

  • ERP, CRM, BI 등 다양한 서비스가 Grid engine(워크로드 분산 시스템)을 통해 컨테이너로 배포됨
  • 컨테이너는 각각 가상 서버(Virtual Server Containers) 형태로 실행됨
  • 자원 모니터링과 과금 측정 가능: $/CPU/hr,$/GB, $/Gbps
  • 물리적 서버는 Commodity Hardware 기반 (표준 서버 인프라)

🔹 무중단 배포

  • ver1ver2로 점진적 교체하며 서비스 제공 중단 없음
  • 라우터가 새로운 버전 컨테이너로 점진적 트래픽 전달
  • 쿠버네티스의 롤링 업데이트(Rolling Update) 개념과 직결됨

✅ Azure Kubernetes Service(AKS) 사용 환경 설정

🔹 1. Azure 콘솔 작업

🔸 1.1 리소스 그룹 생성

  • "리소스 그룹" → "만들기"

    • 구독: 종량제1 등
    • 이름: user07-rsrcgrp 등 사용자 ID 기반
    • 지역: Korea Central (Asia Pacific)

🔸 1.2 AKS 클러스터 생성

  • "Kubernetes" → "Kubernetes 클러스터" → "만들기"

    • 구독: 선택
    • 리소스 그룹: 위에서 생성한 그룹
    • 이름: user07-aks
    • 목적: 개발/테스트

🔸 1.3 노드 풀 설정

  • 가용성 영역: 1, 2, 3 모두 선택

  • VM 크기: DS2_v2 (2Core, 7GB)

  • 자동 크기 조정 활성화 (최소/최대: 3)

  • 완료 후 "검토 + 만들기" → "만들기" 클릭

  • 프로비저닝 상태는 상단의 알림에서 확인


🔹 2. Azure CLI 작업

🔸 2.1 Azure CLI 설치

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

🔸 2.2 로그인 (SSO)

az login --use-device-code
  • 출력된 URL 접속 후 인증코드 입력 → 계정 연결 완료

🔸 2.3 AKS 컨텍스트 설정

az aks get-credentials --resource-group (RESOURCE-GROUP-NAME) --name (CLUSTER-NAME)
kubectl get nodes
kubectl get all


🔹 3. ACR (Azure Container Registry) 설정

🔸 3.1 ACR 생성

az acr create --resource-group (RESOURCE-GROUP-NAME) --name (REGISTRY_NAME) --sku Basic
  • REGISTRY_NAME은 영문자+숫자 조합 (예: user07registry)

🔸 3.2 AKS와 ACR 바인딩

az aks update -n (CLUSTER-NAME) -g (RESOURCE-GROUP-NAME) --attach-acr (REGISTRY_NAME)


🔹 4. ACR 이미지 빌드 및 배포

🔸 4.1 ACR 로그인

az acr login --name (REGISTRY_NAME)

🔸 4.2 Docker로 이미지 빌드 & 푸시

docker build -t (REGISTRY_NAME).azurecr.io/welcome:v1 .
docker push (REGISTRY_NAME).azurecr.io/welcome:v1

🔸 4.3 ACR 명령어로 직접 빌드

az acr build --registry (REGISTRY_NAME) --image welcome:v2 .

🔸 AKS에 내 이미지 배포

kubectl create deploy myhome --image=(REGISTRY_NAME).azurecr.io/welcome:v1
kubectl expose deploy myhome --type=LoadBalancer --port=80
kubectl get service
  • EXTERNAL-IP 확인 후 브라우저에서 접속 확인

🔹 트러블슈팅

  • Resource group could not be found → 구독 정보 확인
az account show
az account set --subscription "종량제1"

profile
코코딩딩

0개의 댓글