Skip to content

Instantly share code, notes, and snippets.

@kelseyhightower
Created July 1, 2015 18:06
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kelseyhightower/ebf8aae321fda80cc7c3 to your computer and use it in GitHub Desktop.
Save kelseyhightower/ebf8aae321fda80cc7c3 to your computer and use it in GitHub Desktop.

Single Node Kubernetes Cluster

sudo docker run -d --net=host --privileged --name=kubestack \
-v /sys:/sys:ro \
-v /:/rootfs:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/run:/var/run:rw \
-v /var/lib/kubelet/:/var/lib/kubelet:rw \
-v /var/lib/docker/:/var/lib/docker:ro \
kelseyhightower/kubestack:0.20.2

Wait about 10s

docker run -t -i --net=host kelseyhightower/kubeos:0.20.2 /bin/bash
# kubectl get pods
NAME                   READY     REASON    RESTARTS   AGE
kubernetes-127.0.0.1   5/5       Running   0          11s
# kubectl get cs  
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                   nil
scheduler            Healthy   ok                   nil
etcd-0               Healthy   {"health": "true"}   nil
@kelseyhightower
Copy link
Author

The Dockerfile:

FROM kelseyhightower/kubeos:0.20.2
COPY pod.json /etc/kubernetes/manifests/pod.json 

VOLUME /var/lib/etcd
VOLUME /var/lib/kubelet
VOLUME /var/lib/kubernetes

CMD ["/usr/local/bin/kubelet", "--containerized", "--api-servers=http://127.0.0.1:8080", "--v=2", "--address=0.0.0.0", "--enable-server", "--hostname-override=127.0.0.1", "--config=/etc/kubernetes/manifests/pod.json", "--machine-id-file=/rootfs/etc/machine-id", "--allow-privileged"]

The pod manifest:

{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {"name":"kubernetes"},
  "spec":{
    "hostNetwork": true,
    "containers": [{
      "name": "etcd",
      "image": "kelseyhightower/kubeos:0.20.2",
      "command": [
        "/usr/local/bin/etcd",
        "--data-dir=/var/lib/etcd",
        "--advertise-client-urls=http://127.0.0.1:2379",
        "--listen-client-urls=http://127.0.0.1:2379",
        "--listen-peer-urls=http://127.0.0.1:2380",
        "--name=etcd"
      ]
    },
    {
      "name": "kube-apiserver",
      "image": "kelseyhightower/kubeos:0.20.2",
      "command": [
        "/usr/local/bin/kube-apiserver",
        "--allow-privileged",
        "--etcd-servers=http://127.0.0.1:2379",
        "--service-cluster-ip-range=10.200.20.0/24",
        "--v=2"
      ]
    },
    {
      "name": "kube-controller-manager",
      "image": "kelseyhightower/kubeos:0.20.2",
      "command": [
        "/usr/local/bin/kube-controller-manager",
        "--master=http://127.0.0.1:8080",
        "--v=2"
      ]
    },
    {
      "name": "kube-scheduler",
      "image": "kelseyhightower/kubeos:0.20.2",
      "command": [
        "/usr/local/bin/kube-scheduler",
        "--master=http://127.0.0.1:8080",
        "--v=2"
      ]
    },
    {
      "name": "kube-proxy",
      "image": "kelseyhightower/kubeos:0.20.2",
      "command": [
        "/usr/local/bin/kube-proxy",
        "--master=http://127.0.0.1:8080",
        "--v=2"
      ],
      "securityContext": {
        "privileged": true
      }
    }]
  }
}```

@kelseyhightower
Copy link
Author

The Dockerfile for KubeOS

FROM google/debian:wheezy

RUN apt-get update
RUN apt-get -yy -q install iptables ca-certificates

COPY etcd /usr/local/bin/etcd
COPY etcdctl /usr/local/bin/etcdctl
COPY kubectl /usr/local/bin/kubectl
COPY kubelet /usr/local/bin/kubelet
COPY kube-apiserver /usr/local/bin/kube-apiserver
COPY kube-controller-manager /usr/local/bin/kube-controller-manager
COPY kube-proxy /usr/local/bin/kube-proxy
COPY kube-scheduler /usr/local/bin/kube-scheduler
COPY nsenter /nsenter

RUN chmod 755 /nsenter
RUN chmod 755 /usr/local/bin/kube*
RUN chmod 755 /usr/local/bin/etcd*

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment