No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Desplegar una aplicación Stateful Práctica

28/41
Recursos

Aportes 8

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hola a todos,
hay un par de cosas que no me quedan claras o creo que están erroneas:

Cuando ejecutas la instrucción:

kubectl exec -it mysql -- mysql -h mysql -ppassword
  • Realmente te estas conectando al pod y no al servicio que has creado ¿Qué sentido tiene entonces crear el servicio?

  • Cuando creas el servicio le pones como selector app: mysql el pod no tiene esa label por lo que nunca va a mapear el tráfico a ese pod, habría que añadir por ejemplo, el código que dejo más abajo en el pod y añadirlo a la sección de selector del servicio.

metadata:
  name: mysql
  labels:
    team: platzi

Saludos 😉

Debería utilizar nombres descriptivos para cada componente, no colocarle el mismo nombre a todo, esto genera confusiones y no es claro cuando explica como esta componiendo los comandos.

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
    - image: mysql:5.6
      name: test-conatiner
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: unodos
      ports:
        - containerPort: 3306
          name: mysql-port
      volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysql-persistence-storage
  volumes:
    - name: mysql-persistence-storage
      gcePersistentDisk:
        pdName: disk-2
        fsType: ext4
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  ports:
    - port: 3306
  selector:
      app: mysql-pod
  clusterIP: None
kubectl exec -it mysql-pod -- mysql -h mysql-service -punodos

Este fue el yaml que utilice y funcionó:

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
  - image: mysql:5.6
    name: test-container
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: password
    ports:
      - containerPort: 3306
        name: mysql
    volumeMounts:
    - mountPath: /var/lib/mysql
      name: mysql-persistent-storage
  volumes:
    - name: mysql-persistent-storage
      gcePersistentDisk:
        pdName: disk-2
        fsType: ext4
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  ports:
  - port: 3306
  selector:
    app: mysql-pod
  clusterIP: None

Luego ejecutamos este comando para conectarnos al pod:

kubectl exec -it mysql-pod -- mysql -u root -ppassword

También hay que tener en cuenta que el volumen debe estar creado en la nube.

Wow estuve muchisimo tiempo debugueando el problema y en el minuto 7.20 pide crear el disco

En mi caso, realicé la prueba, con el mismo directorio, creé el despliegue de postgres para usar la data del despliegue anterior y en este el pod no se creo porque daba error “CrashLoopBackOff”. Al revisar los logs, sale el siguiente error:
initdb: directory “/var/lib/postgresql/data” exists but is not empty
If you want to create a new database system, either remove or empty
the directory “/var/lib/postgresql/data” or run initdb
with an argument other than “/var/lib/postgresql/data”.

Se entiende que el nuevo despliegue no puede apuntar a la misma ruta porque esa no está vacía. Es claro que debe estar llena, con los datos del despliegue anterior, pero postgres en mi caso se rehusa a tomar el mismo directorio como el de datos. ¿ Qué puedo hacer en este caso ?

Tengo una inquietud sobre el tipo de despliegue utilizado para la BD mysql, si es un Stateful, el kind en ves de ser POD no debería ser kind: StatefulSet??

ya esta todo muy desactualizado, deben volver a lanzarlo