No puedo implementar una aplicación en kubernetes, este es el yaml de implementación.
apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - name: test image: openjdk:14 ports: - containerPort: 8080 volumeMounts: - name: testing mountPath: "/usr/src/myapp/docker.jar" workingDir: "/usr/src/myapp" command: ["java"] args: ["-jar", "docker.jar"] volumes: - hostPath: path: /home/user/docker.jar type: File name: testingEste es el error que recibo, y puedo verificar que el archivo existe y en esta carpeta. Intenté eliminar el tipo pero solo carga un directorio vacío, parece que no reconoce que el archivo existe.
MountVolume.SetUp failed for volume "testing" : hostPath type check failed: /home/user/docker.jar is not a fileCuando inicia minikube con el controlador docker predeterminado, está creando Docker VM dentro de su máquina.
Cuando está usando su VM, su terminal se ve así:
user@nameofyourhost:~$ Pero si va a ssh a su terminal Minikube VM se ve a continuación:
docker@minikube:~$En HostPath tienes información:
Un volumen hostPath monta un archivo o directorio desde el sistema de archivos del nodo host en su Pod.
En minikube , cuando usa hostPath , el nodo no se considera su machine sino la Minikube VM que se creó durante minikube start
Como no tengo exactamente sus archivos, he usado nginx . Recuerde que debe tener los permisos adecuados para los directorios que desea montar. He usado tmp como en nginx , este directorio tiene acceso completo para todos.
apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - name: test image: nginx ports: - containerPort: 8080 volumeMounts: - name: testing mountPath: "/tmp/docker.jar" #this is path to the file volumes: - hostPath: path: <path to docker.jar file> #should be on Minikube VM type: File name: testing Cuando crea docker.jar en VM.
user@nameOfMyVM:~$ pwd /home/user user@nameOfMyVM:~$ ls docker.jar Cuando hostpath.path a /home/user/docker.jar , devolverá una advertencia
Warning FailedMount 4s (x4 over 7s) kubelet MountVolume.SetUp failed for volume "testing" : hostPath type check failed: /home/sekreta/docker.jar is not a file`Como Kubernetes no encontró este archivo.
Pero cuando creará este archivo dentro de Minikube VM
$ minikube ssh docker@minikube:~$ pwd /home/docker docker@minikube:~$ ls docker.jar y se creará el cambio en la implementación hostPath.path a /home/docker/docker.jar pod.
$ kubectl get po NAME READY STATUS RESTARTS AGE test-c68d959c6-kb275 1/1 Running 0 13s El archivo se puede encontrar en el directorio establecido en YAML, que es tmp .
$ kubectl exec -ti test-c68d959c6-kb275 -- bin/bash root@test-c68d959c6-kb275:/# cd /tmp root@test-c68d959c6-kb275:/tmp# ls docker.jar Cuando utiliza HostPath en Minikube , debe recordar que el sistema de filesystem no es su Machine sino Minikube VM que se creó durante minikube start .
Si se ejecuta en un sistema de varios nodos, asegúrese de que se pueda acceder a la ruta del host en el nodo en el que se implementaron los pods.
También encontré este problema muy similar en la configuración de un nodo maestro y de un trabajador usando el gráfico de timón.
Helm implementó todos los pods en el nodo de trabajo y no se podía acceder a hostPath desde el nodo de trabajo, aunque la implementación se realiza desde el nodo principal. Copiar y verificar hostpath en el nodo trabajador resuelto es un tipo de error para mí.
Si verificó que el archivo/directorio existe en la VM de Minikube ( minikube ssh ls -la /home/user ), entonces no está implementando en el contexto de minikube k8s como esperaba .
Verifique cuál es su contexto utilizado actualmente, con kubectx --current .
Luego configure el Minikube a través kubectx minikube o kubectl use-context minikube .