Docker machine is a great tool to easily start a Docker host on most public Cloud providers out there. Very handy as a replacement to Vagrant if all you want is a Docker host in the Cloud.
It automatically installs the Docker daemon and sets up the TLS authentication so that you can communicate with it using your local Docker client. It also has some early features to start a Swarm cluster (i.e Multiple Docker hosts).
Since I have been playing with Kubernetes lately, and that there is a single node install available, all based on Docker images...
I thought, let's hack Docker machine a bit so that in addition to installing the docker daemon it also pulls a few images and starts a few containers on boot.
The result is kmachine. The usage is exactly the same as Docker machine. It goes something like this on exoscale (did not take time to open 6443 on all providers...PR :)):
$ kmachine create -d exoscale foobar
$ kmachine env foobar
kubectl config set-cluster kmachine --server=https://185.19.29.23:6443 --insecure-skip-tls-verify=true
kubectl config set-credentials kuser --token=abcdefghijkl
kubectl config set-context kmachine --user=kuser --cluster=kmachine
kubectl config use-context kmachine
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://185.19.29.23:2376"
export DOCKER_CERT_PATH="/Users/sebastiengoasguen/.docker/machine/machines/foobar5"
export DOCKER_MACHINE_NAME="foobar5"
# Run this command to configure your shell:
# eval "$(kmachine_darwin-amd64 env foobar5)"
You see that I used kubectl, the Kubernetes client to automatically setup the endpoint created by machine. The only gotcha right now is that I hard coded the token...Easily fixed by a friendly PR. We could also setup proper certificates and TLS authentication. But I opted for the easy route for now. If you setup your env. You will have access to Kubernetes, and Docker of course, the original docker-machine functionality is not broken.
$ eval "$(kmachine env foobar)"
$ kubectl get pods
POD IP CONTAINER(S) IMAGE(S)
kubernetes-127.0.0.1 controller-manager gcr.io/google_containers/hyperkube:v0.17.0
apiserver gcr.io/google_containers/hyperkube:v0.17.0
scheduler gcr.io/google_containers/hyperkube:v0.17.0
$ kubectl get nodes
NAME LABELS STATUS
127.0.0.1 Schedulable <none> Ready
Since all Kubernetes components are started as containers, you will see all of them running from the start. etcd, the kubelet, the controller, proxy etc.
$ docker ps
CONTAINER ID IMAGE COMMAND
7e5d356d31d7 gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube controll
9cc05adf2b27 gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube schedule
7a0e490a44e1 gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube apiserve
6d2d743172c6 gcr.io/google_containers/pause:0.8.0 "/pause"
7950a0d14608 gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube proxy --
55fc22c508a9 gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube kubelet
c67496a47bf3 kubernetes/etcd:2.0.5.1 "/usr/local/bin/etcd
Have fun ! I think it is very handy to get started with Kubernetes and still have the Docker machine setup working. You get the benefit of both, easy provisioning of a Docker host in the Cloud and a fully working Kubernetes setup to experience with. If we could couple it with Weave of Flannel, we could setup a full Kubernetes cluster in the Cloud, just like Swarm.
I cannot find the following respository.repository path changed?
ReplyDeletehttps://github.com/runseb/machine
sua nha dep
ReplyDeletedich vu sua nha ha noi
bup be tinh duc
duong vat gia
Bumped into the same broken link, too. Is the project still active?
ReplyDeleteSorry guys, yes the project is active but moved to https://github.com/skippbox/kmachine
Delete