Exposing the hello-minikube service fails to find a port

9/14/2017

I could create the container:

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

And I'm now trying to expose a service:

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

Even if I delete it, it still comes back of its own:

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

The is the pod:

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

And its 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/echoserver@sha256: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

All of this on a host minikube on Linux.

-- Stephane
kubernetes
linux
minikube
ubuntu-16.04

2 Answers

9/16/2017

You get this error because you didn't set the container port from the command kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port= as such the expose command doesn't know which container port to map to a node port and then error

You have to set exact container port as follow kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=80 assuming 80 is the port number and then run the expose again.

See bellow step by step of how I was able to replicate your error and then fix

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
-- Innocent Anigbo
Source: StackOverflow

9/16/2017

Your pod is reappearing because deployment creates a replica set for the container which creates a new one if the current pod terminates.

Run this to check if there is a replica set deployed.

kubectl get rs

You should ideally delete the entire deployment

kubectl delete deployment <name>
-- Tejas Pandit
Source: StackOverflow