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-docThen 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.yamlI 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 6mReult 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 2mResult 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 3dResult 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_fermatThe 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!
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.