Skip to content

[Docs] K8s문서 #19

@suye0ng

Description

@suye0ng

Kubernetes 개념 및 AKS 설정 방법

Kubernetes는 애플리케이션을 효율적으로 배포하고 관리하기 위한 시스템으로, 주로 컨테이너화된 애플리케이션을 배포하고, 확장하고, 운영 상태를 유지하는 데 사용됩니다.

주요 구성 요소

  1. 클러스터(Cluster): 여러 대의 컴퓨터를 모아 하나의 큰 시스템처럼 사용. 마스터 노드와 워커 노드로 구성.
  2. 노드(Node): 클러스터를 구성하는 하나의 컴퓨터이며, 마스터 노드와 워커 노드로 나뉨.
    • 마스터 노드: 클러스터의 상태를 모니터링하고, 작업을 분배하며, 문제가 생기면 해결함.
    • 워커 노드: 실제로 애플리케이션을 실행하는 컴퓨터.
  3. 파드(Pod): 쿠버네티스에서 애플리케이션을 실행하는 최소 단위. 하나 이상의 컨테이너로 구성되며, 같은 네트워크와 저장 공간을 공유.
  4. 디플로이먼트(Deployment): 애플리케이션의 파드를 어떻게 배포할지 정의하는 계획서. 원하는 수의 파드를 유지하고, 새로운 버전으로 업데이트하거나, 문제가 발생하면 자동으로 복구.
  5. 서비스(Service): 파드에 네트워크 접근을 제공하는 안정적인 방법. 클러스터 내부 또는 외부에서 파드에 접근할 수 있는 고정된 IP 주소와 포트를 제공.
  6. 컨피그맵(ConfigMap) 및 시크릿(Secret):
    • 컨피그맵: 애플리케이션의 설정 데이터를 저장.
    • 시크릿: 비밀번호, API 키와 같은 민감한 데이터를 저장.
  7. 네임스페이스(Namespace): 클러스터를 여러 개의 논리적 구역으로 나누는 방법으로, 서로 다른 팀이나 프로젝트가 동일한 클러스터를 공유 가능.

학교 예시로 이해하기

  • 클러스터 = 학교
  • 노드 = 각 학급이 클러스터를 구성하는 하나의 단위
  • 마스터 노드 = 교장 선생님처럼 전체 학교를 관리하고 지휘
  • 워커 노드 = 각 학급의 선생님처럼 학생들에게 일을 시키고 수업을 진행
  • 파드 = 각 학생이 하는 하나의 프로젝트
  • 디플로이먼트 = 학생들이 어떤 프로젝트를 할지, 몇 명이 할지, 문제가 생겼을 때 어떻게 할지에 대한 계획서
  • 서비스 = 학생들이 프로젝트를 발표할 때 사용하는 발표 무대
  • 컨피그맵 = 프로젝트를 위해 필요한 자료나 설정을 저장하는 파일
  • 시크릿 = 프로젝트의 중요한 정보, 예를 들어 시험 문제 같은 비밀 자료를 안전하게 보관하는 곳
  • 네임스페이스 = 학급별로 프로젝트를 구분하는 방법

Azure에서 AKS(Azure Kubernetes Service) 설정하기

1. Azure CLI 설치 및 로그인

# Azure CLI 설치 (macOS 및 Linux)
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

# Azure 로그인
az login

2. AKS 클러스터 생성

# 리소스 그룹 생성
az group create --name myResourceGroup --location eastus

# AKS 클러스터 생성
az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 3 --enable-addons monitoring --generate-ssh-keys

3. kubectl 구성

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

자동 스케일링 설정

클러스터 오토스케일러 설정

az aks update --resource-group myResourceGroup --name myAKSCluster --enable-cluster-autoscaler --min-count 1 --max-count 5

Horizontal Pod Autoscaler (HPA) 설정

  1. HPA를 적용할 디플로이먼트 생성:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: node-app
  template:
    metadata:
      labels:
        app: node-app
    spec:
      containers:
      - name: node-app
        image: <your-dockerhub-username>/node-app:latest
        ports:
        - containerPort: 3000
        resources:
          requests:
            cpu: 200m
            memory: 512Mi
          limits:
            cpu: 500m
            memory: 1Gi

이 파일을 deployment.yaml로 저장하고 생성:

kubectl apply -f deployment.yaml
  1. HPA 생성:
kubectl autoscale deployment node-app --cpu-percent=50 --min=1 --max=10

4. 모니터링 및 확인

# 클러스터 노드 수 확인
kubectl get nodes

# HPA 상태 확인
kubectl get hpa

쿠버네티스와 깃허브 액션의 차이점

쿠버네티스

  • 목적: 애플리케이션의 배포 및 운영을 관리
  • 사용 환경: 클러스터 환경(여러 대의 컴퓨터)에서 작동
  • 주요 기능: 컨테이너 오케스트레이션, 자동 확장, 셀프-힐링
  • 작동 방식: 클러스터 내에서 컨테이너를 관리
  • 주요 구성 요소: 클러스터, 노드, 파드, 디플로이먼트, 서비스

깃허브 액션

  • 목적: 코드의 빌드, 테스트 및 배포를 자동화
  • 사용 환경: 깃허브 리포지토리 기반에서 작동
  • 주요 기능: CI/CD 파이프라인, 워크플로 자동화
  • 작동 방식: 코드 변경 시 워크플로를 실행
  • 주요 구성 요소: 워크플로, 액션, 이벤트, 러너

결론

쿠버네티스는 애플리케이션의 실행과 운영을 관리하는 도구이며, Azure에서 AKS(Azure Kubernetes Service)를 통해 설정하고 어플리케이션을 배포 및 관리할 수 있습니다. 반면에 깃허브 액션은 코드 변경 시 자동으로 빌드, 테스트, 배포를 수행하는 CI/CD 도구로, 두 도구는 서로 보완적인 역할을 합니다. 깃허브 액션을 사용해 코드를 자동으로 배포하고, 배포된 애플리케이션을 쿠버네티스가 관리하는 시스템을 만드는 것이 가능합니다.

Metadata

Metadata

Assignees

Labels

📄 문서문서화하기 위해 작성한 글

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions