- Docker Compose는 로컬 환경과 테스트를 간소화하고, Kubernetes는 자동 확장, 롤링 업데이트, 자체 복구 기능을 통해 대규모 워크로드를 조정합니다.
- Compose는 단일 호스트와 Docker에서 작동하는 반면, K8s는 여러 런타임, 다중 노드 클러스터 및 클라우드 배포를 지원합니다.
- Kompose는 Compose에서 Kubernetes로의 마이그레이션을 가속화합니다. 서비스를 미세 조정할 수 있는 공급자, 대체 객체 및 태그를 지원합니다.
- 사용 사례: 개발/CI를 위한 Compose, 프로덕션, IoT/엣지, 빅데이터/ML 및 멀티/하이브리드 클라우드 시나리오를 위한 Kubernetes.
컨테이너를 사용하다 보면 결국 Docker Compose 와 Kubernetes 중 어떤 것을 선택해야 할지 고민하게 됩니다. 두 도구 모두 컨테이너화된 애플리케이션 개발 과정에서 사용되지만 , 정확히 같은 문제를 해결하거나 같은 환경에서 사용하도록 설계된 것은 아닙니다. 이 글에서는 실제 사례와 시나리오를 통해 두 도구를 심층적으로 비교하고, 한 도구에서 다른 도구로 원활하게 마이그레이션하는 팁을 제공합니다.
기술적 측면을 넘어, 이 결정은 배포 시간, 확장성 , 복원력, 보안 및 비용 등 일상적인 운영에 영향을 미칩니다 . 또한 파이프라인, 데이터베이스, 스트리밍, 배치 처리, 데이터 형식 및 거버넌스와 같은 일반적인 데이터 엔지니어링 사용 사례에도 영향을 미치는데, 이러한 부분에서 오케스트레이션은 생산성에 매우 중요한 역할을 합니다.
Docker와 Docker Compose는 무엇이고, 실제로는 어떤 용도로 사용되나요?
Docker에 대해 이야기할 때, 우리는 실제로 Docker Engine, Docker Hub, Dockerfile, Docker Compose를 포함하는 생태계에 대해 이야기하는 것입니다. Docker Engine은 이미지로부터 컨테이너를 생성하고 실행하며, Docker Hub는 컨테이너를 쉽게 공유할 수 있도록 해주고, Docker Compose는 YAML 파일에 스택의 여러 구성 요소를 정의하여 단일 명령으로 실행할 수 있도록 해줍니다.
Compose는 끝없는 스크립트와 개별 명령에서 벗어나도록 설계되었습니다. 단 하나의 docker-compose.yml 파일로 서비스, 네트워크, 볼륨을 정의하고 , "docker compose up"(버전 1에서는 "docker-compose up") 명령 한 번으로 모든 것을 실행할 수 있습니다. 로컬 개발, 통합 테스트, 데모 또는 CI 환경에 이상적입니다.
Compose의 대표적인 예는 API와 PostgreSQL 데이터베이스를 사용하는 다음 예시입니다. 종속성, 변수 및 포트가 읽기 쉬운 블록으로 선언된 것을 확인할 수 있습니다.
version: '3.8'
services:
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
ports:
- '5432:5432'
volumes:
- db:/var/lib/postgresql/data
networks:
- mynet
my-api:
container_name: my-api
build:
context: ./
image: my-api
depends_on:
- db
ports:
- '8080:8080'
environment:
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: postgres
networks:
- mynet
networks:
mynet:
driver: bridge
volumes:
db:
driver: local
Compose에서 수동으로 크기를 조정하려면 서비스의 스케일링 옵션을 사용하면 됩니다. Compose V2에서는 `up --scale` 명령어를 사용하는 것이 일반적입니다 (V1에서는 `docker-compose scale`이었습니다).
docker compose up -d --scale my-api=3
제한 사항에 유의하십시오. Compose는 단일 호스트용으로 설계되었으며 노드 간 로드 밸런싱이나 자동 스케일링을 지원하지 않으며, 업데이트는 일반적으로 "build" 및 "up -d" 명령어를 사용하여 컨테이너를 수동으로 다시 생성하는 방식입니다.
Kubernetes란 무엇이고 Compose보다 어떤 기능을 제공합니까?
Kubernetes(K8s)는 분산 컨테이너 오케스트레이션 플랫폼입니다. Pod, Deployment, Service와 같은 개념을 사용하여 프로덕션 워크로드를 운영하며, 멀티 노드 클러스터 전반에 걸쳐 대규모 배포를 관리합니다 .
Kubernetes에서는 개별 컨테이너를 관리하는 것이 아니라, Pod(하나 이상의 컨테이너를 포함할 수 있음)를 관리합니다. 컨트롤 플레인은 각 Pod의 실행 위치를 예약하고 , 서비스를 노출하고, 트래픽을 분산하고, 수평 확장을 수행하고, 워크로드의 상태를 모니터링합니다.
기본적인 배포 구성은 웹 서비스 복제본 3개를 사용하는 다음과 같은 모습일 수 있습니다. 템플릿, 레이블 및 노출 포트를 정의합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
로드 밸런싱을 통해 이를 노출하기 위해 클라우드 환경에서는 일반적으로 LoadBalancer 서비스가 사용됩니다. 셀렉터는 Pod의 레이블과 일치시켜 트래픽을 라우팅합니다.
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: LoadBalancer
Kubernetes는 프로덕션 환경에서 고성능 자동화(HPA), 롤링 업데이트, 자체 복구와 같은 기능을 통해 뛰어난 성능을 발휘합니다. HPA는 CPU 사용량과 같은 지표를 기반으로 복제본 수를 조정합니다.
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-deployment
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
컨테이너 상태는 프로브를 통해 모니터링되며, 프로브에 오류가 발생하면 Kubernetes는 컨테이너를 재시작합니다. 이것이 바로 "자가 복구"의 기본 원리입니다.
apiVersion: v1
kind: Pod
metadata:
name: web-pod
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
livenessProbe:
httpGet:
path: /healthcheck
port: 8000
initialDelaySeconds: 15
periodSeconds: 15

주요 유사점과 차이점(필수 사항만 간략하게 설명)
두 솔루션 의 공통점은 컨테이너를 사용하고 YAML을 통해 배포를 정의한다는 것입니다. 두 솔루션 모두 개발자와 운영자 모두에게 유용하며 , 개발에서 운영으로의 워크플로에서 서로를 매우 잘 보완합니다.
결정적인 차이점은 범위에 있습니다. Compose는 Docker 중심이며 단일 호스트를 지원하는 반면, Kubernetes는 여러 런타임과 다중 노드 클러스터를 지원하며 클라우드 및 관리형 서비스와 직접 통합됩니다.
더 중요한 차이점은 Kubernetes는 자동 확장, 롤링 업데이트 및 자체 복구 기능을 제공하지만 Compose는 그렇지 않다는 것입니다. Kubernetes는 Pod를 통해 추상화하는 반면, Compose는 Docker 컨테이너와 직접 상호 작용합니다.
또한 Kubernetes는 일회성 또는 예약된 작업을 위한 Job 및 CronJob을 제공합니다. 이를 통해 시스템 cron 작업과 추가적인 컨테이너화된 프로세스를 만들 필요가 없으며 , 플랫폼 자체가 자동화를 정의하는 자연스러운 공간이 됩니다.
온프레미스 환경에서는 속도와 단순성 면에서 Compose가 우수합니다. 하지만 수백 개의 노드 또는 멀티 클라우드 환경으로 확장할 경우에는 Kubernetes가 더 적합한 선택입니다 . Compose는 멀티 호스트 배포를 위해 Docker Swarm을 활용할 수 있지만, 도입률과 기능 면에서 Kubernetes의 생태계 및 성숙도에 미치지 못합니다.
오케스트레이션이 필요한 이유(그리고 각 오케스트레이션이 가장 적합한 경우)
훌륭한 오케스트레이터는 통합된 프로비저닝 및 배포, 예약된 시작, 서비스 간 통신 , 로드 밸런싱, 그리고 각 서비스에 대한 추가적인 거버넌스를 통한 보안 강화 기능을 제공합니다.
Compose는 기본 사항을 간결하고 읽기 쉬운 방식으로 다루므로 개발, 테스트 및 데모에 매우 유용한 도구입니다. 그러나 여러 노드, 네이티브 로드 밸런싱 및 자동 스케일링 , 또는 다운타임 없는 증분 배포가 필요한 경우에는 한계가 드러납니다 .
반면 쿠버네티스는 부하가 증가할 때 작동하는 "플랫폼"입니다. 멀티 노드, 자동 확장, 고가용성, 그리고 AWS, Azure, GCP에 대한 기본 지원 및 관리형 옵션을 제공하는 거대한 생태계를 갖추고 있습니다.
실제 사용 사례(개발, 데이터 등)
Compose는 재현 가능한 로컬 환경, 엔드투엔드 테스트, CI/CD 및 교육 분야에서 탁월한 성능을 발휘합니다 . 전체 스택을 YAML로 정의하고 단일 명령으로 실행함으로써 불필요한 과정을 크게 줄일 수 있습니다.
Kubernetes는 프로덕션 애플리케이션, IoT 및 엣지 컴퓨팅, 빅데이터 및 머신러닝 , 멀티/하이브리드 클라우드 환경 에 이상적입니다 . 지연 시간, 복원력 및 관찰 가능성이 중요한 분산 워크로드를 관리합니다.
데이터 엔지니어링 분야에서 K8s는 포드별 리소스 제어 및 피크 시 자동 확장을 통해 스트리밍 및 배치 파이프라인, 데이터베이스, 큐, 분석 엔진에 적합합니다 .
프로젝트 규모가 작아서 단일 호스트에서 실행할 수 있다면 Compose로도 별다른 문제 없이 사용할 수 있습니다. 하지만 사용자 기반이 커지고 심각한 장애 복구 및 로드 밸런싱이 필요해지면 Kubernetes를 고려해야 할 때입니다.
네트워킹, 확장 및 업그레이드: 실제 비교
Compose는 프로젝트별로 네트워크를 생성하고 서비스별로 이름을 확인합니다. 프로젝트 내에서 컨테이너와의 통신은 간단하고 안전 하지만, 외부 로드 밸런싱 및 멀티 호스팅은 기본 기능이 아닙니다.
Kubernetes에서 서비스는 클러스터 내에서 DNS 검색 및 로드 밸런싱을 제공하며, 외부로는 LoadBalancer, NodePort 또는 Ingress를 사용하여 HTTP/S 트래픽을 라우팅할 수 있습니다.
확장성: Compose는 수동으로 단일 호스트에서만 확장할 수 있습니다. Kubernetes는 HPA를 통한 수평 확장 과 메트릭 및/또는 이벤트를 이용한 프로그래밍 방식 확장을 지원합니다. 또한 클러스터가 허용하는 경우 노드 수를 늘려 확장할 수도 있습니다.
업데이트: Compose에서는 일반적으로 수동으로 다시 빌드합니다. Kubernetes는 진행률 제어 (kubectl rollout)를 통해 롤링 업데이트를 수행하며, 문제가 발생할 경우 되돌릴 수 있는 기능을 제공하여 영향을 최소화합니다.
자가 복구: Compose는 컨테이너를 재시작할 수 있지만 호스트 또는 런타임 충돌을 해결하지는 않습니다. Kubernetes는 Pod를 정상적인 노드로 재배치하며 , 이 과정은 사용자에게 투명하게 진행됩니다.
개발자 생산성 및 운영 경험
Compose는 Docker 위에 구축된 얇은 레이어입니다. 배우기 쉽고 피드백이 즉각적이어서 반복 작업에 매우 적합합니다.
Kubernetes는 Pod, Deployment, Service, Ingress, ConfigMap, PVC 등과 같은 새로운 개념들을 도입합니다. 학습 곡선이 존재하지만, 그 대가로 배포, 보안, 관찰 가능성 및 확장성에 대한 세밀한 제어 권한을 얻을 수 있습니다 .
호환성 측면에서 Compose는 "Docker 우선"입니다. Kubernetes는 다양한 런타임을 지원하고 클라우드 제공업체와 통합되므로 멀티클라우드 또는 하이브리드 전략을 가진 기업에 매우 중요합니다.
Docker Compose에서 Kubernetes로 미쳐가지 않고 마이그레이션하기
언제 마이그레이션을 해야 할까요? 애플리케이션 규모가 더 이상 "소형"이 아니거나, 멀티 노드, 관찰 가능성, 확장성 및 고가용성이 필요 하거나, 카나리 배포 및 블루/그린 배포를 요청받았을 때입니다.
일반적인 과제: 서비스 네트워크 매핑, PV/PVC를 사용한 스토리지 설계 , 구성을 ConfigMaps/Secrets로 분리, 각 컨테이너의 상태 및 준비 패턴 검토.
아키텍처 또한 재고해야 합니다. 배포 단위로는 Pod를 , 엔드포인트를 노출하는 서비스, 그리고 스케줄러가 제대로 작동할 수 있도록 컨테이너별 리소스(CPU/메모리)를 사용하는 방식이 필요합니다.
Kompose: 몇 단계만으로 Compose에서 K8s까지
Kompose는 docker-compose.yml 파일을 Kubernetes 또는 OpenShift 매니페스트로 변환합니다. 모든 YAML 파일을 수동으로 다시 작성하지 않고 마이그레이션을 시작하는 가장 직접적인 방법입니다 .
시작하기 전에 Kubectl 클러스터와 kubectl 설정이 필요합니다. 상태를 저장하는 기능을 테스트하는 경우 최소 두 개의 워커 노드 (컨트롤 플레인이 아닌)를 권장합니다. `kubectl version` 명령으로 버전을 확인하세요.
설치: 권장 방법은 최신 GitHub 릴리스에서 바이너리 파일을 다운로드하는 것입니다. tarball, macOS의 Homebrew 또는 "go get" 명령어를 사용할 수도 있습니다 (마지막 옵션은 개발 중인 변경 사항이 포함된 master 브랜치를 사용합니다).
기본 변환: docker-compose.yml 디렉토리로 이동하여 다음 명령을 실행하세요.
kompose convert
kubectl apply -f <archivos-generados>
Kompose는 기본적으로 배포(Deployment)와 서비스(Service)를 생성합니다. 로그에는 일반적으로 생성된 각 파일이 나열되며 , 적용이 완료되면 클러스터에 배포와 서비스가 "생성됨"으로 표시됩니다.
접근: Minikube를 사용하는 경우 서비스를 쉽게 노출하거나 쿼리할 수 있습니다. 클라우드 환경에서는 "LoadBalancer Ingress"를 확인하여 로드 밸런싱 서비스의 공용 IP 주소를 얻을 수 있으며, NodePort를 사용하는 경우에는 노드에서 열린 포트를 사용할 수 있습니다.
정리: 테스트가 완료되면 적용된 리소스를 제거하십시오. 반복 작업 간 충돌을 방지하기 위해 클러스터를 깨끗하게 유지하십시오.
Kompose 고급 옵션(공급자, 객체 및 태그)
Kompose는 Kubernetes와 OpenShift를 지원합니다. "--provider" 옵션을 지정하지 않으면 기본적으로 Kubernetes를 사용합니다 . OpenShift를 사용하는 경우, DeploymentConfigs와 ImageStreams는 물론, 빌드 지시문을 사용하면 BuildConfigs까지 생성할 수 있습니다.
또한 "-j" 옵션을 사용하면 JSON 형식으로 출력되고, ReplicationControllers, DaemonSets 또는 Helm Charts 형식으로 도 출력됩니다 . "--replicas" 플래그를 사용하면 RC의 복제본 수를 변경할 수 있으며, Helm의 경우 기본 차트 구조를 생성합니다.
Kompose 프로세스 내의 Kompose 관련 태그는 변환에 영향을 미칩니다. 예를 들어 서비스 유형을 정의하거나 엔드포인트를 Ingress/Route를 통해 노출할지 여부를 지정할 수 있습니다.
| 태그 | 값 |
|---|---|
| kompose.service.type | 노드포트/클러스터립/로드밸런서 |
| kompose.service.expose | 참 / 호스트 이름 |
유의해야 할 세부 사항: 이름에 "_"가 포함된 경우 "-"로 변환됩니다 (K8s는 밑줄을 허용하지 않음). 또한 서비스가 볼륨을 사용하는 경우 여러 기록자와의 충돌을 방지하기 위해 배포 전략이 "다시 생성"으로 변경됩니다.
Kompose는 여러 버전과 파일을 지원합니다
Kompose는 Compose V1, V2 및 V3을 지원합니다(2.1 및 3.2 버전은 실험적인 기능이므로 지원이 제한적입니다). 여러 개의 docker-compose 파일을 한 번에 전달하면 파일이 병합되고 , 공통 요소는 최신 파일의 요소로 덮어쓰여집니다. 이는 오버라이드 방식과 동일합니다.
Kubernetes 변환 과정에서 호환되지 않는 키가 있는 경우 "WARN Unsupported key build – ignoring"과 같은 메시지가 표시될 수 있습니다. 걱정하지 마세요. 도구는 이해하는 부분은 계속 진행 하고 나머지는 나중에 수동으로 조정할 수 있도록 남겨둡니다.
Kompose를 넘어: Move2Kube 및 수동 마이그레이션
보다 세밀한 제어가 필요하다면 Move2Kube와 같은 도구를 사용하여 Compose 파일을 분석하고 더욱 세밀하게 조정된 Kubernetes 아티팩트를 생성할 수 있습니다. 이러한 도구는 플랫폼의 비즈니스 패턴이나 템플릿을 적용하려는 경우에 유용합니다.
수동 마이그레이션은 초기 마이그레이션 이후에는 완전히 유효하며 거의 항상 권장됩니다. 일반적인 단계는 서비스를 Deployment/StatefulSet으로 , 네트워크를 Services/Ingress로, 볼륨을 스토리지 클래스가 있는 PV/PVC로 변환하는 것입니다.
Compose 서비스를 Deployment로 변환하는 최소한의 예는 다음과 같습니다. 포트, 이미지 및 레이블을 Pod 템플릿으로 전송합니다.
# docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- '8000:8000'
depends_on:
- db
# Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
상태 관리(데이터베이스, 큐)에는 StatefulSet과 PersistentVolume을 사용하는 것을 고려해 보세요. Compose에서 "함께" 구성되었다고 해서 모든 구성 요소를 같은 Pod에 넣을 필요는 없습니다 . 각 구성 요소의 책임을 분리하고 서비스(Service)를 사용하여 구성 요소 간의 통신을 구현하세요.
데이터 시나리오: 스트리밍, 배치 및 거버넌스
복잡한 데이터 파이프라인에서 Kubernetes는 최적의 솔루션입니다. 배치 처리를 위한 Job, 시간 범위 내 작업을 위한 CronJobs , API를 위한 Deployment, 그리고 Kafka, Spark 또는 Flink와 같은 시스템을 위한 Operator를 제공합니다.
스트리밍 및 데이터베이스의 경우, 커뮤니티 운영자와 차트를 통해 출시가 용이해집니다. 서비스 메시 네트워크와 리소스 제어를 통해 단일 호스트 솔루션에 비해 더욱 예측 가능한 지연 시간과 서비스 수준 목표(SLO)를 보장합니다.
데이터 거버넌스 및 보안 측면에서 Kubernetes는 환경 감사 및 분리를 위한 네임스페이스, 정책 및 RBAC 제어 기능을 제공합니다 . 이는 Compose의 로컬 접근 방식보다 실질적인 이점입니다.
모범 사례와 작은 운영 팁
Compose를 사용할 때는 YAML 파일을 간결하고 모듈화하고 , 환경 변수와 .env 파일을 활용하며, 포트와 종속성을 문서화하고, 로컬에서 실행하는 내용을 CI에 반영하세요.
Kubernetes에서는 CPU 및 메모리 요청/제한을 정의하고 , 준비 상태/활성 상태 프로브를 사용하고, 구성을 ConfigMaps/Secrets로 분리하고, 각 서비스에 적절한 배포 전략을 적용해야 합니다.
Kubeck 업데이트의 경우, `kubectl set image` 및 `kubectl rollout status` 명령어를 사용하여 진행 상황을 모니터링하고 문제가 발생할 경우 롤백하십시오. 이렇게 하면 프로덕션 환경의 다운타임을 방지할 수 있습니다.
Compose에서 특정 작업을 실행해야 하는 경우 시뮬레이션을 사용할 수 있지만, Kubernetes에서는 CronJobs/Jobs를 사용하는 것이 더 깔끔합니다 . 컨테이너에 불필요한 프로세스를 추가하거나 cron 작업을 호스팅할 필요가 없습니다.
혼란을 피하기 위한 간단한 FAQ
Compose가 Kubernetes를 대체하는 건가요? 아닙니다. Compose는 단일 호스트에서 여러 컨테이너를 사용하는 스택을 간소화하는 반면, Kubernetes는 고가용성을 갖춘 클러스터 규모의 오케스트레이션을 담당합니다.
Compose는 아직도 사용되나요? 네, 아주 많이 사용됩니다. 몇 가지 명령어만으로 완벽한 개발 및 테스트 환경을 구축할 수 있는 이상적인 개발 및 테스트 도구입니다 .
쿠버네티스가 도커보다 "더 나은" 것일까요? 둘은 서로 다른 것입니다. 도커는 컨테이너 플랫폼 이고, 쿠버네티스는 클러스터에서 컨테이너를 오케스트레이션하고 고급 운영 기능을 제공합니다.
Compose 파일을 수동으로 다시 작성하지 않고 Kubernetes에 가져올 수 있나요? 네, Kompose 또는 Docker Desktop 통합을 통해 가능합니다. 이를 통해 빠르게 첫 단계를 진행하고 , 이후에 기능을 개선할 수 있습니다.
세부 사항: 프로그래밍, OpenShift 및 대체 변환
Kubernetes는 단순한 지속적 배포를 넘어, Job과 CronJob을 통해 시스템 cron을 직접 관리할 필요 없이 일회성 또는 계획된 작업을 처리할 수 있습니다 .
OpenShift에서 Kompose는 DeploymentConfigs와 ImageStreams는 물론, Git 리포지토리와 연결된 빌드가 있는 경우 BuildConfigs까지 생성할 수 있습니다. "--build-repo" 및 "--build-branch" 플래그는 소스를 조정하는 데 사용됩니다.
원하는 출력 형식이 다르다면 Kompose는 기본 배포 및 서비스 대신 DaemonSet, ReplicationController 또는 Helm Chart를 사용할 수 있도록 지원합니다. 또한 YAML뿐만 아니라 JSON 형식의 출력도 생성할 수 있습니다.
호환성, 경고 및 사소한 문제
Kompose는 Compose V1/V2/V3를 지원합니다(2.1 및 3.2 버전에서는 제한 사항이 있습니다). 지원되지 않는 키는 경고 메시지와 함께 무시되므로 수동으로 조정할 수 있습니다.
서비스에 볼륨이 있는 경우 Kompose는 동일한 볼륨에서 동시 실행을 방지하기 위해 전략을 "재생성(Recreate)"으로 변경합니다 . 이는 상태를 저장하는 서비스에서 일반적인 동작입니다.
이름에 밑줄이 있으면 하이픈으로 변환됩니다. 이는 Kubernetes에서 객체 이름에 적용하는 제한 사항이므로 , 변환 과정에서 문제가 발생하지 않도록 Compose에서 이름을 올바르게 지정해야 합니다.
외부에서 액세스하려면 서비스 유형( ClusterIP(내부), NodePort(노드 포트) 또는 LoadBalancer (클라우드 내 공용 IP))을 확인하세요. Ingress를 사용하면 깔끔한 HTTP/S 경로와 중앙 집중식 TLS를 이용할 수 있습니다.
Minikube에서 테스트할 경우, "minikube service <svc> –url"과 같은 명령어를 사용하면 URL이 바로 반환됩니다 . 클라우드 환경에서는 서비스를 설명할 때 "LoadBalancer Ingress" 필드를 확인하세요.
흥미로운 점은 커뮤니티 내에서 쿠버네티스 전문가의 연봉 이나 프로덕션 환경에서의 도입률이 88%에 육박한다는 언급을 찾아볼 수 있다는 것입니다. 이는 전혀 이상한 일이 아닙니다. 사실상 표준으로 자리 잡았기 때문입니다.
전체적인 그림을 그려보면, 쿠버네티스는 HTTP 그 이상입니다. 서비스 메시, 오퍼레이터, CRD( 크래그먼트 레코드) 등이 쿠버네티스의 활용 범위를 확장시켜 줍니다. 쿠버네티스 컴포즈를 사용하다가 처음 접하는 사람이라면 처음에는 다소 복잡하게 느껴질 수 있지만, 이러한 추가적인 기능은 더욱 견고한 운영으로 이어집니다.
정책 재설정: 유용한 동등성
Compose는 "재시작: 항상/실패 시/아니요"를 허용합니다. Kubernetes에서는 경우에 따라 개별 Pod 또는 컨트롤러 (Deployment 또는 RC)에 적절한 재시작 정책이 적용됩니다.
| docker-compose 재시작 | K8s의 객체 | 재시작 정책 |
|---|---|---|
| "" / 언제나 | 컨트롤러(배치/RC) | 항상 |
| 실패 시 | 작은 무리 | 실패 시 |
| 아니 | 작은 무리 |
Compose에서 "계산" 컨테이너나 임시 작업(예: 간단한 "파이" 계산)을 사용했다면, 해당 작업을 적절한 정책을 적용한 Job 또는 CronJob으로 Kubernetes에 구현하면 됩니다 .
빠른 로컬 배포에는 Compose를 선택하고, 환경에 더 강력한 기능이 필요할 때는 Kubernetes를 선택하세요. Kubernetes 는 멀티 노드 지원, 자동 확장, 원활한 배포, 그리고 진정한 복원력을 제공합니다 . Compose, Move2Kube, 그리고 약간의 주의를 기울이면 원활하게 전환할 수 있습니다.
궁극적으로 선택은 규모와 복잡성에 따라 달라집니다. Compose는 개발, 테스트 및 단일 호스트 스택 에 적합하며 , Kubernetes는 엔터프라이즈급 멀티 클라우드 배포 환경과 고급 자동화, 고가용성, 수천 개의 통합 기능을 갖춘 에코시스템이 필요한 팀에 적합합니다.
