DevOps 환경에서 Kubernetes를 사용하여 컨테이너 오케스트레이션을 관리하는 것은 많은 장점을 제공하지만, 때때로 오류가 발생할 수 있습니다. 특히 AWS EKS(Elastic Kubernetes Service)와 같은 클라우드 기반 Kubernetes 환경에서는 이러한 문제를 신속하게 해결하는 것이 중요합니다. 이번 글에서는 AWS EKS에서 발생할 수 있는 컨테이너 오류를 진단하고 신속하게 복구하는 방법에 대해 알아보겠습니다.

1. 오류 진단하기

컨테이너 오류가 발생하면 먼저 해당 오류의 원인을 파악하는 것이 중요합니다. kubectl 명령어를 사용하여 Pod의 상태와 로그를 확인할 수 있습니다.

kubectl get pods -n <네임스페이스>

# 특정 Pod의 로그 확인
kubectl logs <pod-name> -n <네임스페이스>

Pod의 상태를 확인하면 RUNNING, CRASHED, PENDING 등의 상태 정보를 얻을 수 있습니다. CRASHED 상태일 경우, 로그를 통해 오류의 원인을 분석할 수 있습니다.

2. 컨테이너 재시작

일부 오류는 컨테이너를 재시작하여 간단히 해결할 수 있습니다. kubectl delete pod 명령어로 Pod를 삭제하면 Kubernetes가 자동으로 새로운 Pod를 생성합니다.

# Pod 재시작
kubectl delete pod <pod-name> -n <네임스페이스>

이 방법은 일시적인 오류를 해결하는 데 유용하지만, 문제가 지속되는 경우에는 다른 접근 방법이 필요합니다.

3. 헬스 체크 및 라벨링

EKS에서 컨테이너가 정상적으로 작동하는지 확인하기 위해 헬스 체크를 설정할 수 있습니다. Deployment나 StatefulSet의 경우, readinessProbe와 livenessProbe를 통해 헬스 체크를 구성할 수 있습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:latest
        readinessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10

이 헬스 체크를 통해, 컨테이너가 비정상 상태일 경우 자동으로 재시작하고, 트래픽은 정상 컨테이너로만 라우팅됩니다.

4. 롤백

오류가 발생한 후 최근 배포한 이미지가 문제의 원인일 수 있습니다. 이 경우, 이전 버전으로 롤백할 수 있습니다. kubectl rollout undo 명령어를 사용하여 이전 상태로 되돌릴 수 있습니다.

# Deployment 롤백
kubectl rollout undo deployment/my-app -n <네임스페이스>

이 명령어를 통해 안정적인 버전으로 빠르게 복구할 수 있습니다.

5. 모니터링 및 경고 시스템 구축

AWS EKS에서의 안정성을 높이기 위해 모니터링과 경고 시스템을 구축하는 것이 중요합니다. AWS CloudWatch와 같은 도구를 사용하여 Pod와 노드의 상태를 지속적으로 모니터링하고, 문제가 발생할 경우 알림을 받을 수 있습니다.

{
  "AlarmName": "EKS Pod Unhealthy Alarm",
  "MetricName": "UnhealthyHostCount",
  "Namespace": "AWS/EKS",
  "Statistic": "Average",
  "Period": 300,
  "EvaluationPeriods": 1,
  "Threshold": 1,
  "ComparisonOperator": "GreaterThanThreshold",
  "TreatMissingData": "missing",
  "ActionsEnabled": true,
  "AlarmActions": [
    "<SNS-ARN>"
  ]
}

이와 같은 경고 시스템을 설정하면, 장애 발생 시 신속하게 대응할 수 있습니다.

마무리

AWS EKS에서 컨테이너 오류가 발생했을 때 신속하게 복구하는 방법에 대해 살펴보았습니다. 오류 진단, 재시작, 헬스 체크, 롤백 및 모니터링 시스템 구축 등의 방법을 통해 안정적인 서비스를 유지할 수 있습니다. 이러한 접근법을 통해 DevOps 팀은 문제를 효과적으로 해결하고, 시스템의 가용성을 높일 수 있습니다. EKS와 Kubernetes를 활용하여 더 나은 서비스 운영을 경험해보세요.