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

423
Views
¿Cómo usar un contenedor de inicio para verificar si MySQL está listo para las conexiones?

Amigos, estoy aprendiendo aquí y tratando de implementar un contenedor de inicio que verifique si MySQL está listo para las conexiones. Tengo un pod que ejecuta MySQL y otro pod con una aplicación que se conectará al pod de MySQL cuando esté listo.

Ningún éxito hasta ahora. El error que recibo es el siguiente: sh: mysql: not found . Así es como estoy intentando:

 initContainers: - name: {{ .Values.initContainers.name }} image: {{ .Values.initContainers.image }} command: - "sh" - "-c" - "until mysql --host=mysql.default.svc.cluster.local --user={MYSQL_USER} --password={MYSQL_PASSWORD} --execute=\"SELECT 1;\"; do echo waiting for mysql; sleep 2; done;"

¿Alguna idea de cómo podría hacer que esto funcione?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

No hagas absolutamente nada; incluso elimine los initContainers: tiene ahora.

Digamos que su aplicación se inicia antes de que la base de datos esté lista. Intenta conectarse, falla y sale. Kubernetes se da cuenta de esto, por lo que intentará iniciar la aplicación nuevamente; si falla repetidamente, comenzará a esperar progresivamente más tiempo entre reintentos (verá el estado CrashLoopBackOff). Eventualmente, el clúster habrá esperado lo suficiente para que la base de datos esté lista y el próximo reintento será exitoso.

Tenga en cuenta que esto es probablemente lo mismo que sucederá si la base de datos se reinicia después de que la aplicación ya se está ejecutando; "en el momento del inicio" no necesita ser un caso especial.

over 4 years ago · Santiago Trujillo Report

0

Intenta usar esto.

contenedores de inicio:

 - name: init-cont image: busybox:1.31 command: ['sh', '-c', 'echo -e "Checking for the availability of MySQL Server deployment"; while ! nc -z mysql 3306; do sleep 1; printf "-"; done; echo -e " >> MySQL DB Server has started";']
over 4 years ago · Santiago Trujillo Report

0

A su initContainer le falta el binario del cliente mysql .

Hay algunas maneras de resolver esto:

  1. Use una imagen oficial de mysql docker y use lo que tiene como comando.
  2. Cree su propia imagen acoplable a partir de una imagen base (por ejemplo, Alpine), instale mysql-client y luego modifique su initContainer para que funcione con Alpine.

Suponiendo que Alpine sea su imagen base, tendría un dockerfile como este:

 FROM alpine:3.14 RUN apk add mysql-client

Entonces su comando initContainer sería:

 command: - "/bin/ash" - "-c" - "until mysql --host=mysql.default.svc.cluster.local --user={MYSQL_USER} --password={MYSQL_PASSWORD} --execute=\"SELECT 1;\"; do echo waiting for mysql; sleep 2; done;"

Mi recomendación, use la imagen oficial de mysql docker

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!