2P by neo 4달전 | favorite | 댓글 1개

쿠버네티스 영구 볼륨 컨트롤러

개요

  • 쿠버네티스 영구 볼륨(PersistentVolume, PV)과 영구 볼륨 클레임(PersistentVolumeClaim, PVC)을 동기화하는 컨트롤러
  • PVC와 PV 간의 양방향 "포인터"를 관리하여 데이터 손실을 방지
  • 고가용성 모드에서 작동하며, PVC가 특정 PV를 요청하거나 PV가 특정 PVC에 예약된 경우를 지원

주요 기능

  • PVC와 PV의 상태를 주기적으로 동기화
  • PVC가 특정 PV를 요청하지 않은 경우, 가장 적합한 PV를 찾아 바인딩
  • PVC가 특정 PV를 요청한 경우, 해당 PV가 존재하고 조건을 만족하는지 확인 후 바인딩
  • PVC가 이미 바인딩된 경우, 상태를 확인하고 필요 시 수정

동작 방식

  • PVC가 생성되거나 업데이트될 때 syncClaim 메서드 호출
  • PVC가 바인딩되지 않은 경우 syncUnboundClaim 메서드 호출
  • PVC가 바인딩된 경우 syncBoundClaim 메서드 호출
  • PV가 생성되거나 업데이트될 때 syncVolume 메서드 호출

주요 메서드

syncClaim

  • PVC의 상태에 따라 syncUnboundClaim 또는 syncBoundClaim 호출

syncUnboundClaim

  • PVC가 특정 PV를 요청하지 않은 경우, 가장 적합한 PV를 찾아 바인딩 시도
  • PVC가 특정 PV를 요청한 경우, 해당 PV가 존재하고 조건을 만족하는지 확인 후 바인딩

syncBoundClaim

  • PVC가 이미 바인딩된 경우, 상태를 확인하고 필요 시 수정

syncVolume

  • PV의 상태에 따라 적절한 동작 수행
  • PV가 사용되지 않은 경우, 상태를 "Available"로 업데이트
  • PV가 특정 PVC에 바인딩된 경우, 해당 PVC의 상태를 확인하고 필요 시 수정

GN⁺의 정리

  • 이 문서는 쿠버네티스의 영구 볼륨 컨트롤러에 대한 상세한 설명을 제공함
  • 영구 볼륨과 영구 볼륨 클레임 간의 바인딩 로직을 이해하는 데 도움이 됨
  • 고가용성 모드에서의 동작 방식과 다양한 예외 상황에 대한 처리를 다룸
  • 쿠버네티스의 스토리지 관리에 관심이 있는 개발자들에게 유용한 자료
  • 비슷한 기능을 제공하는 다른 프로젝트로는 OpenEBS, Rook 등이 있음
Hacker News 의견
  • Space Shuttle 소프트웨어는 매우 안정적이며, 버그가 거의 없음

    • 최근 세 버전은 각각 420,000 라인 중 단 하나의 오류만 있었음
    • 상업용 프로그램과 비교해 오류 수가 매우 적음
  • 코드가 일반적이며, Go 언어로 작성되어 있어 다소 장황함

    • 엔터프라이즈 소프트웨어 경험이 많아 시스템 소프트웨어와의 차이를 느끼는 것일 수 있음
    • k8s 프로젝트의 기여자들에게는 불필요한 주석이 많을 수 있음
  • 새 회사의 코드베이스가 잘 정리되어 있어 탐색하는 것이 즐거움

    • 주석이 많고, 코드가 잘 구조화되어 있음
    • 작은 팀이어서 코드 품질이 높음
  • Space Shuttle의 안전 기록이 좋지 않아 현재는 운영되지 않음

    • 10년 후에도 사람들이 Space Shuttle을 긍정적으로 기억할지 의문임
  • 구조적 패턴 매칭을 사용하면 if/else 블록을 단순화할 수 있을 것임

    • 컴파일 타임에 매칭이 완전한지 확인할 수 있는 도구가 있음
  • 코드가 나쁘지 않으며, 단일 규칙을 따르고 있음

    • 다양한 스타일의 코드보다 훨씬 나음
  • 2018년의 논의 링크 제공

  • Kubernetes CSI 드라이버를 작성하는 것이 즐거웠음

    • Amazon의 EFS나 EBS CSI 드라이버는 작은 코드베이스의 좋은 예시임
    • 드라이버 자체는 단순하지만, 복잡한 로직이 포함되어 있음
  • if 문마다 else 문이 있는 것이 안전 관행으로 여겨짐

    • 2,000 라인 모듈과 200 라인 메서드는 해로움
    • 코드가 하는 일을 설명하는 주석은 유용하지 않음
  • GitHub 파일 링크 시 특정 라인 범위를 링크하는 방법 제공