2017-09-14 4 views
0

je pouvais créer le conteneur:le service bonjour Révéler-minikube ne parvient pas à trouver un port

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port= 
deployment "hello-minikube" created 

Et je suis maintenant essayer d'exposer un service:

$ kubectl expose deployment hello-minikube --type=NodePort 
error: couldn't find port via --port flag or introspection 

Même si je le supprimer , il revient encore de son propre:

$ kubectl delete pod hello-minikube-2138963058-2szl7 
pod "hello-minikube-2138963058-2szl7" deleted 
[[email protected] ~] 
$ kubectl get pods 
NAME        READY  STATUS RESTARTS AGE 
hello-minikube-2138963058-nhh1q 1/1  Running 0   3m 

le pod est le:

$ kubectl get pods 
NAME        READY  STATUS RESTARTS AGE 
hello-minikube-2138963058-2szl7 1/1  Running 0   16m 

Et sa description:

$ kubectl describe pod hello-minikube-2138963058-2szl7 
Name:  hello-minikube-2138963058-2szl7 
Namespace: default 
Node:  minikube/192.168.42.196 
Start Time: Thu, 14 Sep 2017 23:20:03 +0200 
Labels:  pod-template-hash=2138963058 
     run=hello-minikube 
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"hello-minikube-2138963058","uid":"2b37ca13-9968-11e7-a720-525400... 
Status:  Running 
IP:  172.17.0.3 
Created By: ReplicaSet/hello-minikube-2138963058 
Controlled By: ReplicaSet/hello-minikube-2138963058 
Containers: 
    hello-minikube: 
    Container ID: docker://5e4ba407d8869e6e843ec3d7876e953147cc01104e980c7febfea218808ab379 
    Image:  gcr.io/google_containers/echoserver:1.4 
    Image ID:  docker-pullable://gcr.io/google_containers/[email protected]:5d99aa1120524c801bc8c1a7077e8f5ec122ba16b6dda1a5d3826057f67b9bcb 
    Port:  <none> 
    State:  Running 
     Started:  Thu, 14 Sep 2017 23:20:05 +0200 
    Ready:  True 
    Restart Count: 0 
    Environment: <none> 
    Mounts: 
     /var/run/secrets/kubernetes.io/serviceaccount from default-token-t8qx7 (ro) 
Conditions: 
    Type  Status 
    Initialized True 
    Ready  True 
    PodScheduled True 
Volumes: 
    default-token-t8qx7: 
    Type: Secret (a volume populated by a Secret) 
    SecretName: default-token-t8qx7 
    Optional: false 
QoS Class: BestEffort 
Node-Selectors: <none> 
Tolerations: <none> 
Events: 
    FirstSeen LastSeen Count From   SubObjectPath   Type  Reason   Message 
    --------- -------- ----- ----   -------------   -------- ------   ------- 
    17m  17m  1 default-scheduler     Normal  Scheduled  Successfully assigned hello-minikube-2138963058-2szl7 to minikube 
    17m  17m  1 kubelet, minikube     Normal  SuccessfulMountVolume MountVolume.SetUp succeeded for volume "default-token-t8qx7" 
    17m  17m  1 kubelet, minikube spec.containers{hello-minikube} Normal  Pulled   Container image "gcr.io/google_containers/echoserver:1.4" already present on machine 
    17m  17m  1 kubelet, minikube spec.containers{hello-minikube} Normal  Created   Created container 
    17m  17m  1 kubelet, minikube spec.containers{hello-minikube} Normal  Started   Started container 

Tout cela sur un minikube hôte sous Linux.

Répondre

1

Vous obtenez cette erreur parce que vous n'avez pas défini le port de conteneurs de la commande kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port= en tant que telle la commande exposer ne sait pas quel port de conteneurs pour mapper vers un port de noeud, puis erreur

Vous devez définir le port de conteneur exact comme suit kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=80 en supposant que 80 est le numéro de port, puis relancez l'exposition.

Voir étape ci-dessous par étape de la façon dont j'ai pu répliquer votre erreur et corriger

C:\Users\innocent.anigbo\.minikube>kubectl run hello-kube --image=gcr.io/google_ 
containers/echoserver:1.4 --port= 
deployment "hello-kube" created 

C:\Users\innocent.anigbo\.minikube>kubectl get pods 
NAME        READY  STATUS RESTARTS AGE 
hello-kube-1448409582-c9sm5  1/1  Running 0   1m 
hello-minikube-938614450-417hj 1/1  Running 1   8d 
hello-nginx-3322088713-c4rp4  1/1  Running 0   6m 

C:\Users\innocent.anigbo\.minikube>kubectl get deployment 
NAME    DESIRED CURRENT UP-TO-DATE AVAILABLE AGE 
hello-kube  1   1   1   1   2m 
hello-minikube 1   1   1   1   8d 
hello-nginx  1   1   1   1   7m 

C:\Users\innocent.anigbo\.minikube>kubectl get service 
NAME   CLUSTER-IP EXTERNAL-IP PORT(S)  AGE 
hello-nginx 10.0.0.136 <nodes>  80:32155/TCP 4m 
kubernetes 10.0.0.1  <none>  443/TCP  20d 

C:\Users\innocent.anigbo\.minikube>kubectl expose deployment hello-kube --type=N 
odePort 
error: couldn't find port via --port flag or introspection 
See 'kubectl expose -h' for help and examples. 

C:\Users\innocent.anigbo\.minikube>kubectl delete deployment hello-kube 
deployment "hello-kube" deleted 

C:\Users\innocent.anigbo\.minikube>kubectl get pods 
NAME        READY  STATUS RESTARTS AGE 
hello-minikube-938614450-417hj 1/1  Running 1   8d 
hello-nginx-3322088713-c4rp4  1/1  Running 0   11m 

C:\Users\innocent.anigbo\.minikube>kubectl run hello-kube --image=gcr.io/google_ 
containers/echoserver:1.4 --port=80 
deployment "hello-kube" created 

C:\Users\innocent.anigbo\.minikube>kubectl get pods 
NAME        READY  STATUS RESTARTS AGE 
hello-kube-2715294448-0rxf2  1/1  Running 0   3s 
hello-minikube-938614450-417hj 1/1  Running 1   8d 
hello-nginx-3322088713-c4rp4  1/1  Running 0   11m 

C:\Users\innocent.anigbo\.minikube>kubectl expose deployment hello-kube --type=N 
odePort 
service "hello-kube" exposed 

C:\Users\innocent.anigbo\.minikube>kubectl get service 
NAME   CLUSTER-IP EXTERNAL-IP PORT(S)  AGE 
hello-kube 10.0.0.137 <nodes>  80:30004/TCP 3s 
hello-nginx 10.0.0.136 <nodes>  80:32155/TCP 9m 
kubernetes 10.0.0.1  <none>  443/TCP  20d 
+0

Je pourrais exposer le service 'kubectl exécuter bonjour-minikube - image = gcr.io/google_containers/echoserver: 1.4 --port = 82' et' kubectl exposer déploiement bonjour-minikube --type = NodePort' qui montre le service ' $ kubectl get services NOM CLUSTER-IP PORT (S) IP EXTERNE (S) AGE hello-minikube 10.0.0.81 82: 32515/TCP 4h' mais essayer de se connecter échoue '$ curl $ (minikube service hello-minikube --url curl: (7) Impossible de se connecter à 192.168.42.196 port 32515: Connexion refusée'' – Stephane

+0

Mais si au lieu d'utiliser le port 82 j'utilise le port 8080 il fonctionne alors. Je pensais pouvoir choisir mon propre port ici. Ce n'est pas le cas ? – Stephane

+1

Non, vous ne pouvez pas utiliser votre propre port ou un port aléatoire d'ailleurs. Cela doit être le port écouté par le conteneur pour le trafic tel qu'il est dans l'image 'echoserver: 1.4'. Vous obtiendrez ce numéro de port à partir du repo où l'image est documentée. 8080 ne fonctionne que parce que vous avez eu la chance d'avoir deviné le bon port. La prochaine fois, mieux vaut vérifier cela dans la documentation de l'image pour vous faciliter la tâche. –

1

Votre pod réapparaît car le déploiement crée un jeu de réplicas pour le conteneur qui en crée un nouveau si le pod actuel se termine.

Exécutez ceci pour vérifier si un ensemble de réplicas est déployé.

kubectl get rs 

Vous devez idéalement supprimer tout le déploiement

kubectl delete deployment <name> 
+0

Comme un noob K8S Je ne savais pas assez sur l'environnement et pod supprimer le bon. Votre réponse, plus celle d'Innocent Anigbo, a résolu mon problème. – Stephane