본문 바로가기
Docker

Docker와 클라우드 통합 / Kubernetes: Docker와의 연동 및 클러스터 관리

by Maccrey Coding 2024. 9. 13.
반응형

 

Kubernetes는 컨테이너 오케스트레이션을 위한 강력한 플랫폼으로, Docker와 함께 사용하면 애플리케이션의 배포, 관리, 확장을 효율적으로 할 수 있습니다.

Docker는 컨테이너를 실행하기 위한 도구인 반면, Kubernetes는 이러한 컨테이너를 대규모로 관리하는 데 필요한 기능을 제공합니다.

이 블로그 포스트에서는 초보자가 Kubernetes와 Docker를 연동하여 클러스터를 관리하는 방법을 쉽고 자세히 설명하겠습니다.

1. Kubernetes란?

Kubernetes(K8s)는 컨테이너화된 애플리케이션을 자동으로 배포하고 관리하는 오픈 소스 플랫폼입니다.

컨테이너 클러스터를 구성하고, 애플리케이션의 상태를 모니터링하며, 장애 복구를 자동으로 수행할 수 있게 해줍니다.

2. Docker와 Kubernetes의 관계

  • Docker: 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있게 해줍니다.
  • Kubernetes: Docker 컨테이너를 클러스터에서 관리하고 조정하는 도구입니다. 여러 Docker 컨테이너를 배포하고, 로드 밸런싱하며, 자동으로 스케일링할 수 있습니다.

3. Kubernetes 클러스터 구성하기

Kubernetes 클러스터를 설정하기 위해, Docker를 사용하여 컨테이너화된 애플리케이션을 Kubernetes 클러스터에서 관리하는 방법을 알아보겠습니다.

3.1. Kubernetes 설치

Kubernetes를 설치하려면 여러 가지 방법이 있습니다. 여기서는 Minikube를 사용하여 로컬에서 Kubernetes 클러스터를 설정하는 방법을 소개합니다.

1. Minikube 설치: Minikube는 로컬에서 Kubernetes 클러스터를 쉽게 실행할 수 있게 해주는 도구입니다. Minikube를 설치하려면 공식 Minikube 설치 가이드를 참고하세요.

 

2. Minikube 시작: Minikube를 실행하여 로컬 Kubernetes 클러스터를 시작합니다.

minikube start

 

3. kubectl 설치: kubectl은 Kubernetes 클러스터와 상호작용할 수 있는 명령줄 도구입니다. kubectl 설치 가이드를 참고하여 설치합니다.

3.2. Docker 이미지 준비하기

Docker를 사용하여 애플리케이션을 컨테이너화한 후, Kubernetes에서 사용할 수 있도록 Docker 이미지를 준비합니다.

 

1. Dockerfile 작성: 애플리케이션의 Dockerfile을 작성합니다.

FROM node:14
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

 

2. Docker 이미지 빌드: Dockerfile을 사용하여 Docker 이미지를 빌드합니다.

docker build -t my-app:latest .

 

3. Docker 이미지 로컬 저장소에 푸시: Minikube의 Docker 데몬에 이미지를 푸시하여 Kubernetes에서 사용할 수 있도록 합니다.

eval $(minikube -p minikube docker-env)
docker tag my-app:latest my-app:latest

3.3. Kubernetes에 애플리케이션 배포하기

1. 배포 파일 작성: Kubernetes 배포 파일을 작성하여 애플리케이션을 클러스터에 배포합니다. deployment.yaml 파일을 생성합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:latest
        ports:
        - containerPort: 3000

 

2. 배포 적용: kubectl 명령어를 사용하여 배포 파일을 적용합니다.

kubectl apply -f deployment.yaml

 

3. 서비스 노출: 애플리케이션을 외부에 노출시키기 위해 서비스 파일을 작성합니다. service.yaml 파일을 생성합니다.

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

 

4. 서비스 적용: 서비스 파일을 적용하여 애플리케이션을 외부에 노출시킵니다.

kubectl apply -f service.yaml

 

5. 서비스 확인: kubectl 명령어를 사용하여 서비스의 상태를 확인합니다.

kubectl get services

4. Kubernetes의 주요 기능

  • 자동 스케일링: 애플리케이션의 부하에 따라 자동으로 컨테이너의 수를 조정합니다.
  • 로드 밸런싱: 클러스터 내의 여러 인스턴스에 트래픽을 균등하게 분산시킵니다.
  • 셀프 힐링: 컨테이너가 실패할 경우 자동으로 복구하거나 재배포합니다.

5. 실습 예제

단계 1: Minikube와 kubectl 설정

minikube start
eval $(minikube -p minikube docker-env)

 

단계 2: Docker 이미지 빌드 및 태깅

docker build -t my-app:latest .
docker tag my-app:latest my-app:latest

 

단계 3: 배포 및 서비스 파일 작성

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

 

단계 4: 서비스 확인

kubectl get services

 

Kubernetes는 Docker와 함께 사용하면 강력한 컨테이너 오케스트레이션 기능을 제공하여 애플리케이션의 배포, 관리, 확장을 훨씬 더 효율적으로 할 수 있습니다.

이 블로그 포스트에서는 Kubernetes와 Docker의 연동 및 클러스터 관리 방법을 소개했습니다.

이를 통해 여러분의 애플리케이션을 클라우드 환경에서 효과적으로 관리하고 배포할 수 있기를 바랍니다.

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

반응형