TIL - kubernetes

문한성·2023년 5월 22일
0

부트캠프

목록 보기
93/123
post-thumbnail

애플리케이션에 HTTP 500과 같은 에러가 발생한 경우, 컨테이너를 다시 실행해야 할 것입니다. HTTP 에러가 발생했다는 것을 어떻게 알 수 있을까요? 어떻게 해야 쿠버네티스가 에러가 발생한 컨테이너를 자동으로 재시작하게 만들 수 있을까요? (힌트: liveness probe 키워드를 검색하세요)

Kubernetes에서 활동성 프로브를 사용하여 컨테이너 내부의 애플리케이션이 제대로 실행되고 있는지 확인할 수 있습니다. Liveness 프로브는 주기적으로 애플리케이션의 상태를 확인하고 실패하면 Kubernetes가 컨테이너를 자동으로 다시 시작할 수 있습니다.

HTTP 500과 같은 HTTP 오류를 감지하기 위해 애플리케이션의 특정 엔드포인트에 대한 HTTP 요청을 수행하고 예상되는 응답을 확인하는 활성 프로브를 구성할 수 있습니다. 응답에 오류가 표시되면 Kubernetes는 컨테이너를 비정상으로 간주합니다.

다음은 Kubernetes Pod 매니페스트의 활동성 프로브 구성 예시입니다.

Copy code
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-app-image
      livenessProbe:
        httpGet:
          path: /health
          port: 80
        initialDelaySeconds: 15
        periodSeconds: 10

이 예에서 활동성 프로브는 컨테이너의 포트 80에서 /health 경로에 대한 HTTP GET 요청을 수행하도록 구성됩니다. 15초의 초기 지연 후 활성 확인을 시작하고 10초마다 확인을 반복합니다.

활동성 프로브가 실패하면 Kubernetes는 자동으로 컨테이너를 다시 시작합니다. 이 재시작 프로세스는 애플리케이션이 오류를 복구하고 가용성을 유지할 수 있도록 합니다.

애플리케이션의 특정 요구 사항에 따라 활동성 프로브 구성을 조정할 수 있습니다. 예를 들어 서로 다른 HTTP 엔드포인트 또는 포트를 설정하고 초기 지연을 조정하고 프로브 확인 사이의 기간을 지정할 수 있습니다.

Kubernetes에서 활동성 프로브를 활용하면 컨테이너의 HTTP 오류 및 기타 문제를 감지하고 애플리케이션이 원활하게 실행되도록 자동 조치를 취할 수 있습니다.

왜 파드와 PV(퍼시스턴스볼륨)를 직접 연결하지 않는 걸까요?

Kubernetes에서 포드는 일시적으로 설계되었습니다. 즉, 언제든지 클러스터에서 생성, 파괴 또는 이동할 수 있습니다. 반면에 PersistentVolume(PV)은 포드와 독립적으로 존재하는 내구성 있는 스토리지 리소스를 나타냅니다.

Pod를 PersistentVolume(PV)에 직접 연결하는 것이 기술적으로 가능하지만 일반적으로 다음과 같은 몇 가지 이유로 권장되지 않습니다.

  • 추상화: Kubernetes는 Pod와 PV 사이의 중개자 역할을 하는 PVC(PersistentVolumeClaims)라는 추상화 계층을 제공합니다. PVC를 사용하면 Pod가 특정 PV 구현 세부 정보에 밀접하게 연결되지 않고 스토리지 리소스를 요청할 수 있습니다. 이렇게 하면 기본 스토리지 인프라에서 애플리케이션 논리가 분리되어 관리 및 확장이 더 쉬워집니다.

  • 동적 프로비저닝: PVC는 PV의 동적 프로비저닝을 가능하게 합니다. 수동으로 PV를 생성하고 포드에 연결하는 대신 PVC를 사용하면 포드 사양에서 스토리지 요구 사항(예: 스토리지 클래스, 액세스 모드 및 크기)을 정의할 수 있습니다. 그런 다음 Kubernetes는 자동으로 적절한 PV를 생성하고 포드에 바인딩합니다. 이 자동화는 특히 대규모 배포에서 스토리지 리소스 관리를 단순화합니다.

  • 이식성: PVC를 사용하면 더 나은 이식성과 유연성을 얻을 수 있습니다. 포드의 일정을 변경하거나 다른 노드 또는 클러스터로 이동해야 하는 경우에도 PVC를 사용하여 포드를 새 위치의 적절한 PV에 바인딩할 수 있습니다. 이러한 유연성을 통해 애플리케이션의 유지 관리, 확장 및 마이그레이션이 더 쉬워집니다.

  • 리소스 격리: 포드를 PV에 직접 연결하면 PVC가 제공하는 격리를 우회합니다. PVC를 사용하면 스토리지의 액세스 및 수명 주기에 대한 개별 제어를 유지하면서 여러 포드가 PV를 공유할 수 있습니다. 이러한 격리를 통해 각 Pod에 전용 스토리지 공간이 있고 충돌 또는 다른 Pod의 의도하지 않은 데이터 수정을 방지할 수 있습니다.

Pod와 PV 사이의 중간 계층으로 PVC를 사용하면 추상화, 동적 프로비저닝, 이식성 및 리소스 격리의 이점을 활용할 수 있습니다. 이 접근 방식은 Kubernetes의 설계 원칙과 일치하며 컨테이너화된 환경에서 애플리케이션을 보다 관리하기 쉽고 확장 가능하며 탄력적으로 만듭니다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

1개의 댓글

comment-user-thumbnail
2023년 5월 22일

잘 보고 갑니다~~

답글 달기