아마존 EKS – 리소스 관리

아마존 EKS 리소스 관리 방법에 대해 알아봅니다.

파드 헬스 체크

파드를 안전하게 외부로 공유하기 위해서는 헬스 체크가 필요합니다.

아마존 EKS Readiness Probe

파드와 연결된 서비스를 모니터링하기 위해서는 Readiness Probe를 사용합니다.
이것을 사용하면 첫 실행 후 오류없이 실행되었는지 확인할 수 있습니다.

  • 목표 : 첫 실행 후 정상적으로 실행되었는지 확인한다.
  • Readiness Probe 설정 방법
    아래 deployment_backend_app.k8s.yaml 참조합니다.
    readinessProbe 로 검색합니다.
          readinessProbe:
            httpGet:
              port: 8080
              path: /health
            initialDelaySeconds: 15
            periodSeconds: 30

아마존 EKS Liveness Probe

파드 상태를 모니터링하기 위해서는 Liveness Probe를 사용합니다.
이것을 사용하면 파드 상태가 정상적으로 작동하는지 모니터링한다.

  • 목표 : 파드 상태가 정상적으로 작동하는지 모니터링한다.
  • Liveness Probe 설정 방법 : deployment_backend_app.k8s.yaml 참조( livenessProbe 로 검색)
  • Liveness Probe 실패시 파드는 재시작을 시도합니다.
  • 컨테이너 재시작 정책 -> 파드 라이프사이클
          livenessProbe:
            httpGet:
              port: 8080
              path: /health
            initialDelaySeconds: 30
            periodSeconds: 30
  • deployment_backend_app.k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-app
  labels:
    app: backend-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: backend-app
  template:
    metadata:
      labels:
        app: backend-app
    spec:
      containers:
        - name: backend-app
          image: ${ECR_HOST}/backend-app:1.0.0
          imagePullPolicy: Always
          ports:
          - containerPort: 8080
          env:
            - name: DB_URL
              valueFrom:
                secretKeyRef:
                  key: db-url
                  name: db-config
            - name: DB_USERNAME
              valueFrom:
                secretKeyRef:
                  key: db-username
                  name: db-config
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  key: db-password
                  name: db-config

          readinessProbe:
            httpGet:
              port: 8080
              path: /health
            initialDelaySeconds: 15
            periodSeconds: 30

          livenessProbe:
            httpGet:
              port: 8080
              path: /health
            initialDelaySeconds: 30
            periodSeconds: 30
          resources:

            requests:
              cpu: 100m
              memory: 512Mi
            limits:
              cpu: 250m
              memory: 768Mi
          lifecycle:
            preStop:
              exec:
                command: ["/bin/sh", "-c", "sleep 2"]

초기화 처리에 걸리는 시간 고려해야 합니다.
시작 과정에서 헬스체크를 하면 재시작 무한 루프에 빠질 위험이 있습니다.

initial Delay 설정으로 파드가 동작한 후 첫번째 헬스 체크를 시작하기까지 유예 시간을 설정할 수 있습니다.

아마존 EKS 파드 종료

파드를 안전하게 종료하기 위해 고려해야 할 사항이 있습니다.

파드 종료 시의 상태 변화 이해

  • 목표 : 종료 진행 시 클라이언트로부터 온 요청 처리를 할 수 없는 상황을 종료 유예 시간을 두어 임시적으로 처리합니다.
  • preStop 설정 방법 : deployment_backend_app.k8s.yaml 참조( preStop 로 검색)
preStop:
              exec:
                command: ["/bin/sh", "-c", "sleep 2"]

아마존 EKS 리소스 관리

requests와 limits

requests와 limits를 사용하면 파드위 리소스양을 확인할 수 있습니다.

  • 목표 : 파드가 사용할 CPU/메모리 양을 설정해 호스트 쪽에 부하를 주지 않도록 합니다.
  • requests, limits 설정 방법 : deployment_backend_app.k8s.yaml 참조( requests, limits 로 검색)
  • requests 설정한 리소스가 호스트에 없으면 파드는 Pending 상태가 됨.
            requests:
              cpu: 100m
              memory: 512Mi
            limits:
              cpu: 250m
              memory: 768Mi

requests와 limits의 차이나는 경우를 알아보겠습니다.

차이를 크게 했을 경우는 아래와 같이 발생합니다.

  • Overcommit 상태 발생

차이를 작게 했을 경우는 아래와 같이 발생합니다.

  • 파드가 늘어날 수록 호스트 개수도 늘어나 비용이 증가합니다.

리밋 레인지(LimitRange)

파드가 요청 가능한 리소스 사용량을 관리할 수 있습니다.

  • 목표 : requests, limits 를 설정하지 않고 배포하는 경우를 대처한다.

리소스 쿼터

리소스의 총 요구량을 관리할 수 있습니다.

  • 목표 : 많은 파드가 배포되어 전체 리소스가 모자라는 위험을 방지합니다.

참고 문서

아래는 쿠버네티스 공식 메뉴얼 문서 링크입니다. 튜토리얼 형식으로 되어 있으니 꼭 참고바랍니다.

튜토리얼

Back to top