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.
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
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>