Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

405
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!