Search code examples
network-programmingdockercluster-computingkuberneteskubectl

Cannot set up Kubernetes local cluster via Docker


I followed http://kubernetes.io/docs/getting-started-guides/docker/. Here are the commands I literally run:

export K8S_VERSION=$(curl -sS https://storage.googleapis.com/kubernetes-release/release/stable.txt)
export ARCH=amd64
docker run -d \
--volume=/:/rootfs:ro \
--volume=/sys:/sys:rw \
--volume=/var/lib/docker/:/var/lib/docker:rw \
--volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
--volume=/var/run:/var/run:rw \
--net=host \
--pid=host \
--privileged \
gcr.io/google_containers/hyperkube-${ARCH}:${K8S_VERSION} \
/hyperkube kubelet \
    --containerized \
    --hostname-override=127.0.0.1 \
    --api-servers=http://localhost:8080 \
    --config=/etc/kubernetes/manifests \
    --cluster-dns=10.0.0.10 \
    --cluster-domain=cluster.local \
    --allow-privileged --v=2
curl -sSL "http://storage.googleapis.com/kubernetes-release/release/v1.2.0/bin/linux/amd64/kubectl" > /usr/bin/kubectl
chmod +x /usr/bin/kubectl
kubectl config set-cluster test-doc --server=http://localhost:8080
kubectl config set-context test-doc --cluster=test-doc
kubectl config use-context test-doc

Then I followed https://github.com/kubernetes/kubernetes/tree/release-1.2/examples/nodesjs-mongodb:

kubectl create -f web-service.yaml
kubectl create -f web-controller.yaml
kubectl create -f mongo-service.yaml
kubectl create -f mongo-controller.yaml

I have a Python flask app, so I replace the image with my own and the args with ['export DOCKER=True && cd commandcenter/ && python app.py']

This is the reult of kubectl get services:

NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
kubernetes   10.0.0.1     <none>        443/TCP     3d
mongo        10.0.0.167   <none>        27017/TCP   14m
web          10.0.0.119                 80/TCP      6m

Reult of kubectl get pods:

NAME                     READY     STATUS    RESTARTS   AGE
k8s-etcd-127.0.0.1       1/1       Running   0          3d
k8s-master-127.0.0.1     4/4       Running   0          3d
k8s-proxy-127.0.0.1      1/1       Running   0          3d
mongo-controller-3b8q5   1/1       Running   0          5m
nginx-198147104-9w444    1/1       Running   0          25m
web-controller-6nzpn     1/1       Running   3          2m
web-controller-uot1s     1/1       Running   3          2m

Result of kubectl logs web-controller-6nzpn:

DEBUG 2016-06-09 17:57:49,279 Starting up server 
INFO 2016-06-09 17:57:49,285  * Running on http://0.0.0.0:3000/ (Press CTRL+C to quit)

Result of kubectl get nodes:

NAME        STATUS    AGE
127.0.0.1   Ready     3d

Result of docker ps:

CONTAINER ID        IMAGE                                             COMMAND                  CREATED             STATUS              PORTS                      NAMES
78330abb3cbc        gcr.io/google_containers/pause:2.0                "/pause"                 5 minutes ago       Up 5 minutes                                   k8s_POD.6079054c_web-controller-6nzpn_default_208f7237-2e65-11e6-98e4-f80f41fc0776_e72a59d6
8f41e68e0dbb        gcr.io/google_containers/pause:2.0                "/pause"                 5 minutes ago       Up 5 minutes                                   k8s_POD.6079054c_web-controller-uot1s_default_208f587f-2e65-11e6-98e4-    f80f41fc0776_6861905a
d0d8696f8757        mongo                                             "/entrypoint.sh mongo"   8 minutes ago       Up 8 minutes                                   k8s_mongo.a8042bbb_mongo-controller-3b8q5_default_b21552c0-2e64-11e6-98e4-f80f41fc0776_835c7956
83701f56b225        gcr.io/google_containers/pause:2.0                "/pause"                 9 minutes ago       Up 9 minutes        0.0.0.0:27017->27017/tcp   k8s_POD.683503f7_mongo-controller-3b8q5_default_b21552c0-2e64-11e6-98e4-f80f41fc0776_a07aaf2b
bdf64b18dbf0        nginx                                             "nginx -g 'daemon off"   29 minutes ago      Up 29 minutes                                  k8s_nginx.cd4c2839_nginx-198147104-9w444_default_dab5019f-2e61-11e6-98e4-f80f41fc0776_04c0a7dc
15cfd30b3280        gcr.io/google_containers/pause:2.0                "/pause"                 29 minutes ago      Up 29 minutes                                  k8s_POD.cf58006d_nginx-198147104-9w444_default_dab5019f-2e61-11e6-98e4-f80f41fc0776_aae25ba3
4409962a7123        gcr.io/google_containers/hyperkube:v0.21.2        "/hyperkube proxy --m"   44 minutes ago      Up 44 minutes                                  stupefied_yonath
0a8b91c41e68        gcr.io/google_containers/hyperkube-amd64:v1.2.4   "/setup-files.sh IP:1"   49 minutes ago      Up 49 minutes                                  k8s_setup.eb843218_k8s-master-127.0.0.1_default_721118f359852533089009890ac21208_22bec1b0
6a91a6e7620c        gcr.io/google_containers/hyperkube-amd64:v1.2.4   "/hyperkube scheduler"   49 minutes ago      Up 49 minutes                                  k8s_scheduler.dbfcc0_k8s-master-127.0.0.1_default_721118f359852533089009890ac21208_feeb19b7
4ca45bc03c89        gcr.io/google_containers/hyperkube-amd64:v1.2.4   "/hyperkube apiserver"   49 minutes ago      Up 49 minutes                                  k8s_apiserver.1082c1e0_k8s-master-127.0.0.1_default_721118f359852533089009890ac21208_16592f39
a5a4cf124d74        gcr.io/google_containers/hyperkube-amd64:v1.2.4   "/hyperkube controlle"   49 minutes ago      Up 49 minutes                                  k8s_controller-manager.76914b67_k8s-master-127.0.0.1_default_721118f359852533089009890ac21208_d2dffc43
3f0c3c342a12        gcr.io/google_containers/etcd:2.2.1               "/usr/local/bin/etcd "   49 minutes ago      Up 49 minutes                                  k8s_etcd.7e452b0b_k8s-etcd-127.0.0.1_default_1df6a8b4d6e129d5ed8840e370203c11_82b244e9
3bca02d310dc        gcr.io/google_containers/hyperkube-amd64:v1.2.4   "/hyperkube proxy --m"   49 minutes ago      Up 49 minutes                                  k8s_kube-proxy.a1014855_k8s-proxy-127.0.0.1_default_0cda4a663a246109121ac68b3c7e82b7_c610ef5f
cf83efe4cf4e        gcr.io/google_containers/pause:2.0                "/pause"                 49 minutes ago      Up 49 minutes                                  k8s_POD.6059dfa2_k8s-master-127.0.0.1_default_721118f359852533089009890ac21208_2864939a
51b02dab5bcd        gcr.io/google_containers/pause:2.0                "/pause"                 49 minutes ago      Up 49 minutes                                  k8s_POD.6059dfa2_k8s-etcd-127.0.0.1_default_1df6a8b4d6e129d5ed8840e370203c11_9cf2fc4d
5256fcfbd3d2        gcr.io/google_containers/pause:2.0                "/pause"                 49 minutes ago      Up 49 minutes                                  k8s_POD.6059dfa2_k8s-proxy-127.0.0.1_default_0cda4a663a246109121ac68b3c7e82b7_86be1d4f
b41dfb03d56d        gcr.io/google_containers/hyperkube-amd64:v1.2.4   "/hyperkube kubelet -"   50 minutes ago      Up 50 minutes                                  kickass_fermat

The machine has a public IP address, and my goal is to access the demo website from outside. I can access mongo via http://public_IP_address:27017 and curl 10.0.0.167:27017, because as shown above, mongo has 0.0.0.0:27017->27017/tcp.However, when I run curl 10.0.0.119:3000, it is like an infinite loop and eventually it says time out. Why is that?

Thus, my question is: how to expose web so that it also has a non-empty PORTS field?

I do not have much knowledge on networking, so any help is greatly appreciated. Thank you very much!


Solution

  • If you look at https://github.com/kubernetes/kubernetes/blob/release-1.2/examples/nodesjs-mongodb/web-service.yaml, you'll see that the service type is LoadBalancer. This is intended to work with cloud providers like AWS and GCE.

    In your case, you need to expose services using NodePorts. Specify type: NodePort and nodePort: 3xxxx (some port greater than 30000) and you can access the service at <NodeIP>:NodePort.