[DevOps] 컨테이너 오케스트레이션

illilili·2025년 6월 17일

DevOps

목록 보기
3/12
post-thumbnail
  • 여러 컨테이너를 자동으로 배치하고, 복제하며, 확장 및 관리하는 기술
  • Kubernetes는 가장 널리 사용되는 오케스트레이션 도구
  • 컨테이너 기반 애플리케이션의 배포, 확장, 유지 관리 등을 자동화

✅ 서비스 생성

kubectl create deploy order --image=jinyoung/monolith-order:v202105042
  • Docker Hub에 있는 이미지로 order 배포 생성
kubectl get all
kubectl get po


✅ 트러블슈팅

🔸 Pod 상태 확인

kubectl describe po <Pod명>
kubectl logs -f <Pod명>
kubectl exec -it <Pod명> -- /bin/sh

🔸 Pod 내부 예시

ls         # -> app.jar 등 확인 가능
ps         # -> java 실행 확인 (PID 1)

🔹 이미지 롤백 및 재설정

kubectl set image deploy order monolith-order=jinyoung/monolith-order:v20210504
  • 잘못된 이미지 v202105042 → 올바른 v20210504로 교체

✅ Pod 삭제 후 재생성 확인

🔸 관측용 터미널

watch kubectl get pod

🔸 삭제용 터미널

kubectl delete pod -l app=order

ReplicaSet이 자동으로 새 Pod를 생성함


✅ 외부 접속 허용 (LoadBalancer)

kubectl expose deploy order --type=LoadBalancer --port=8080
kubectl get service -w

  • 외부 접속 테스트:
curl http://<EXTERNAL-IP>:8080/orders

또는 브라우저에서 접속: http://<EXTERNAL-IP>:8080/orders

🔹 오류 발생 시 대처

🔸 서비스 중복 오류 발생

kubectl expose deploy order --type=LoadBalancer --port=8080
# Error from server (AlreadyExists): services "order" already exists

🔸 해결 방법

kubectl delete svc order
kubectl expose deploy order --type=LoadBalancer --port=8080

🔹 로컬 포트포워딩

kubectl port-forward deploy/order 8080:8080
curl localhost:8080
  • 외부 IP가 Pending일 경우 임시 테스트 용도로 사용

✅ 배포 관리 및 확장

🔹 롤백하기

kubectl rollout undo deploy order
kubectl get deploy -o wide
  • 이전 이미지(apexacme/order 등)으로 롤백됨을 확인

🔹 수동 스케일 아웃

kubectl scale deploy order --replicas=3
kubectl get pods

  • Pod가 3개로 늘어나는 것을 확인

✅ Deployment 리소스 배포

💡 Deployment와 ReplicaSet, Pod 관계

  • Deployment는 선언형 방식으로 애플리케이션의 원하는 상태를 정의
  • 변경이 발생하면 새로운 ReplicaSet이 생성
  • 이전 ReplicaSet은 자동으로 scale down
  • Pod는 ReplicaSet에 의해 관리
  • Deployment → ReplicaSet → Pod 구조를 형성
  • 롤백, 롤링 업데이트, 버전 관리 등 가능

🔹 Lab/order.yaml 파일 생성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-by-yaml
  labels:
    app: order
spec:
  replicas: 2
  selector:
    matchLabels:
      app: order
  template:
    metadata:
      labels:
        app: order
    spec:
      containers:
        - name: order
          image: jinyoung/monolith-order:v20210504
          ports:
            - containerPort: 8080

🔹 배포 및 확인

kubectl apply -f order.yaml
kubectl get all

profile
코코딩딩

0개의 댓글