Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

404
Vistas
¿Cómo cambio las etiquetas de coincidencia de una implementación de k8s sin tiempo de inactividad?

La implementación de tipo Deployment no permite cambios de parches en spec.selector.matchLabels , por lo que cualquier implementación nueva (administrada por Helm o de otro modo) que desee cambiar las etiquetas no puede usar la función RollingUpdate dentro de una implementación. ¿Cuál es la mejor manera de lograr la implementación de una nueva implementación sin causar tiempo de inactividad?

Ejemplo mínimo:

 apiVersion: apps/v1 kind: Deployment metadata: name: foo namespace: default spec: replicas: 1 selector: matchLabels: app: foo template: metadata: labels: app: foo spec: containers: - name: foo image: ubuntu:latest command: ["/bin/bash", "-ec", "sleep infinity"]

Aplique esto, luego edite las etiquetas (tanto matchLabels como metadata.labels) a foo2 . Si intenta aplicar esta nueva implementación, k8s se quejará (por diseño) La Deployment "foo" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"foo2"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable .

La única forma que se me ocurre en este momento es usar un nuevo nombre de implementación para que la nueva implementación no intente parchear la anterior y luego eliminar la anterior, con los recursos de ingreso/equilibrador de carga manejando la transición. Luego, podemos volver a implementar con el nombre anterior y eliminar el nuevo nombre, completando la migración.

¿Hay alguna manera de hacerlo con menos pasos de CLI k8s? ¿Quizás pueda editar/eliminar algo que mantenga vivos los pods antiguos mientras los nuevos pods se implementan con el mismo nombre?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Desde mi experiencia, mientras uso helm cuando uso

 helm upgrade release -f values .

No tengo tiempo de inactividad. Además, al usar helm, noté que hasta que la nueva implementación esté lista para X/X, no finaliza la implementación anterior. Puedo sugerir usarlo. De esta manera puede ser tan indoloro como se pone.

También en la sección Actualización de la implementación desde los documentos de Kubernetes, se dice que la implementación de una implementación se activa si y solo si se cambia la plantilla del pod de la implementación (es decir, .spec.template).

Por lo tanto, puede usar cambios de etiquetas con helm.

Espero haber sido un poco de ayuda.

¡Tener cuidado! método no probado: kubectl tiene un subcomando de edición que me permitió actualizar ConfigMaps, PersistentVolumeClaims, etc. Tal vez pueda usarlo para actualizar su implementación. Sintaxis:

 kubectl edit [resource] [resource-name]

Pero antes de hacerlo, elija un editor de texto adecuado, ya que trabajará con archivos con formato yaml. Hazlo usando,

 export KUBE_EDITOR=/bin/{nano,vim,yourFavEditor}
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda