2 puntos por GN⁺ 2024-08-07 | 1 comentarios | Compartir por WhatsApp

Controlador de volúmenes persistentes de Kubernetes

Resumen

  • Controlador que sincroniza los volúmenes persistentes de Kubernetes (PersistentVolume, PV) y las solicitudes de volúmenes persistentes (PersistentVolumeClaim, PVC)
  • Administra "punteros" bidireccionales entre PVC y PV para evitar la pérdida de datos
  • Funciona en modo de alta disponibilidad y admite casos donde un PVC solicita un PV específico o un PV está reservado para un PVC específico

Funciones principales

  • Sincroniza periódicamente el estado de los PVC y los PV
  • Si un PVC no solicita un PV específico, encuentra el PV más adecuado y lo vincula
  • Si un PVC solicita un PV específico, verifica que ese PV exista y cumpla las condiciones antes de vincularlo
  • Si un PVC ya está vinculado, verifica su estado y lo corrige si es necesario

Cómo funciona

  • Cuando se crea o actualiza un PVC, se llama al método syncClaim
  • Si el PVC no está vinculado, se llama al método syncUnboundClaim
  • Si el PVC está vinculado, se llama al método syncBoundClaim
  • Cuando se crea o actualiza un PV, se llama al método syncVolume

Métodos principales

syncClaim

  • Según el estado del PVC, llama a syncUnboundClaim o syncBoundClaim

syncUnboundClaim

  • Si el PVC no solicita un PV específico, intenta encontrar el PV más adecuado y vincularlo
  • Si el PVC solicita un PV específico, verifica que ese PV exista y cumpla las condiciones antes de vincularlo

syncBoundClaim

  • Si el PVC ya está vinculado, verifica su estado y lo corrige si es necesario

syncVolume

  • Realiza la acción adecuada según el estado del PV
  • Si el PV no está en uso, actualiza su estado a "Available"
  • Si el PV está vinculado a un PVC específico, verifica el estado de ese PVC y lo corrige si es necesario

Resumen de GN⁺

  • Este documento ofrece una explicación detallada del controlador de volúmenes persistentes de Kubernetes
  • Ayuda a entender la lógica de vinculación entre volúmenes persistentes y solicitudes de volúmenes persistentes
  • Cubre cómo funciona en modo de alta disponibilidad y el manejo de varias situaciones excepcionales
  • Es un material útil para desarrolladores interesados en la gestión de almacenamiento en Kubernetes
  • Otros proyectos con funciones similares incluyen OpenEBS y Rook

1 comentarios

 
GN⁺ 2024-08-07
Opinión de Hacker News
  • El software del Space Shuttle es extremadamente estable y casi no tiene errores

    • Las tres versiones más recientes tuvieron solo un error cada una en 420,000 líneas
    • Tiene muchos menos errores en comparación con programas comerciales
  • El código es genérico y, al estar escrito en Go, resulta algo verboso

    • Puede ser una impresión de alguien con mucha experiencia en software empresarial al notar la diferencia con el software de sistemas
    • Para los contribuidores del proyecto k8s puede haber demasiados comentarios innecesarios
  • La base de código de la nueva empresa está tan bien ordenada que da gusto recorrerla

    • Tiene muchos comentarios y el código está bien estructurado
    • Como es un equipo pequeño, la calidad del código es alta
  • El historial de seguridad del Space Shuttle no es bueno, por eso ya no está en operación

    • Queda la duda de si dentro de 10 años la gente seguirá recordando positivamente al Space Shuttle
  • Si se usa pattern matching estructural, se podrían simplificar los bloques if/else

    • Hay herramientas que pueden verificar en tiempo de compilación si el matching es exhaustivo
  • El código no está mal y sigue una sola regla

    • Es mucho mejor que tener código con estilos variados
  • Se comparte un enlace a una discusión de 2018

  • Fue divertido escribir un driver CSI de Kubernetes

    • Los drivers CSI de EFS o EBS de Amazon son buenos ejemplos de bases de código pequeñas
    • El driver en sí es simple, pero incluye lógica compleja
  • Que cada sentencia if tenga su else se considera una práctica segura

    • Un módulo de 2,000 líneas y un método de 200 líneas son perjudiciales
    • Los comentarios que explican lo que hace el código no son útiles
  • Se explica cómo enlazar un rango específico de líneas al compartir un archivo de GitHub