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

244
Views
¿Es correcto adjuntar código a través del volumen en kubernetes?

Para facilitar el desarrollo en Docker, el código se adjunta a los contenedores a través de volúmenes. De esa forma, no hay necesidad de reconstruir las imágenes cada vez que se cambia el código.

Entonces, ¿es correcto pensar en usar la misma idea en Kubernetes?

PD: Sé que los conceptos PersistentVolume y PersistentVolumeClaim permiten adjuntar volumen, pero están destinados a datos.


Actualizar

Para facilitar el desarrollo, necesito usar el volumen tanto para el código como para los datos. Esto me evitará reconstruir las imágenes en cada cambio de código.

A continuación, esto es lo que estoy tratando de hacer en minikube:

El despliegue

 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: php-hostpath spec: replicas: 1 template: metadata: labels: app: php-hostpath spec: containers: - name: php-hostpath image: php:7.0-apache ports: - containerPort: 80 volumeMounts: - name: vol-php-hostpath mountPath: /var/www/html volumes: - name: vol-php-hostpath hostPath: path: '/home/amine/DockerProjects/gcloud-kubernetes/application/06-hostPath-volume-example-minikube/src/'

el servicio

 apiVersion: v1 kind: Service metadata: name: php-hostpath namespace: default labels: app: php-hostpath spec: selector: app: php-hostpath ports: - port: 80 targetPort: 80 type: "LoadBalancer"

El servicio y la implementación están bien creados en minikube:

 $ kubectl get pods -l app=php-hostpath NAME READY STATUS RESTARTS AGE php-hostpath-3796606162-bt94w 1/1 Running 0 19m $ kubectl get service -l app=php-hostpath NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE php-hostpath 10.0.0.110 <pending> 80:30135/TCP 27m

La carpeta src y el archivo src/index.php también están bien creados.

 <?php echo "This is my first docker project";

Ahora quiero comprobar que todo se está ejecutando:

 $ kubectl exec -ti php-hostpath-3796606162-bt94w bash root@php-hostpath-3796606162-bt94w:/var/www/html# ls root@php-hostpath-3796606162-bt94w:/var/www/html# exit exit

¡La carpeta src y el archivo index.php no están en /var/www/html !

¿Me he perdido algo?

PD: si estuviera en producción env, no pondré mi código en un volumen. Gracias,

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Según este documento , el uso compartido de carpetas de host aún no está implementado en el controlador KVM. Este es el controlador que estoy usando en realidad.

Para superar esto, hay 2 soluciones:

  • Use el controlador de virtualbox para que pueda montar su volumen hostPath cambiando la ruta en su /home/THE_USR/... a /hosthome/THE_USR/...

  • Monte su volumen en la VM de minikube según el comando $ minikube mount /home/THE_USR/... . El comando le devolverá la ruta de su volumen montado en la máquina virtual minikube. Se da ejemplo.

Ejemplo

(a) montar un volumen en la máquina virtual minikube

el minikube mount devolvió esa ruta /mount-9p

 $ minikube mount -v 3 /home/amine/DockerProjects/gcloud-kubernetes/application/06-hostPath-volume-example-minikube Mounting /home/amine/DockerProjects/gcloud-kubernetes/application/06-hostPath-volume-example-minikube into /mount-9p on the minikubeVM This daemon process needs to stay alive for the mount to still be accessible... 2017/03/31 06:42:27 connected 2017/03/31 06:42:27 >>> 192.168.42.241:34012 Tversion tag 65535 msize 8192 version '9P2000.L' 2017/03/31 06:42:27 <<< 192.168.42.241:34012 Rversion tag 65535 msize 8192 version '9P2000'

(b) Especificación de la ruta en el despliegue

 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: php-hostpath spec: replicas: 1 template: metadata: labels: app: php-hostpath spec: containers: - name: php-hostpath image: php:7.0-apache ports: - containerPort: 80 volumeMounts: - name: vol-php-hostpath mountPath: /var/www/html volumes: - name: vol-php-hostpath hostPath: path: /mount-9p

(c) Comprobar si el montaje del volumen funcionó bien

 amine@amine-Inspiron-N5110:~/DockerProjects/gcloud-kubernetes/application/06-hostPath-volume-example-minikube$ kubectl exec -ti php-hostpath-3498998593-6mxsn bash root@php-hostpath-3498998593-6mxsn:/var/www/html# cat index.php <?php echo "This is my first docker project"; root@php-hostpath-3498998593-6mxsn:/var/www/html# cat index.php <?php echo 'This is my first hostPath on kubernetes'; root@php-hostpath-3498998593-6mxsn:/var/www/html# cat index.php <?php echo 'This is my first hostPath on kubernetes'; root@php-hostpath-3498998593-6mxsn:/var/www/html#

PD: este tipo de montaje de volumen es solo un entorno de desarrollo. Si estuviera en entorno de producción, el código no se montará: estará en la imagen.

PD: recomiendo el virtualbox en lugar de KVM.

Espero que ayude a otros.

about 4 years ago · Santiago Trujillo Report

0

Hay hostPath que le permite vincular el montaje de un directorio en el nodo en un contenedor.

En un clúster de varios nodos, querrá restringir su módulo de desarrollo a un nodo en particular con nodeSelector (use la etiqueta kubernetes.io/hostname: mydevhost ).

Con minikube , mire la sección Carpetas de host montadas.

about 4 years ago · Santiago Trujillo Report

0

En mi honesta opinión, puedes hacerlo, pero no deberías. Una de las características de usar contenedores es que puedes tener artefactos (contenedores) con siempre el mismo comportamiento. Una nueva versión de su código debería generar un nuevo contenedor. De esta manera, puede estar seguro, al realizar pruebas, de que cualquier problema nuevo detectado estará directamente relacionado con el nuevo código.

Un enfoque híbrido (que tampoco me gusta pero creo que es mejor) es crear una ventana acoplable que descargue su código (seleccionando la versión correcta con envs) y lo ejecute.

Usar hostPaths no es una mala idea, pero puede ser un desastre si tiene un clúster no tan pequeño. Por supuesto, puede usar PV, después de todo, su código son datos. Puede usar un sistema de archivos de almacenamiento distribuido como NFS para hacerlo.

about 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!