User Tools

Site Tools


cloud:kubernetes:installation

This is an old revision of the document!


Basic installation

On Centos7, RPMs are from Ceontos7 extras repository

1 master, 2 nodes

RPM verisons
  • On master:
    • kubernetes-master, kubernetes-client - 1.5.2-0.2.gitc55cf2b.el7
    • etc - 3.1.0-2.el7
    • flannel - 0.7.0-1.el7
  • On nodes:
    • kubernetes-client, kubernetes-node - 1.5.2-0.2.gitc55cf2b.el7
Hostnames, IP, subnets, IP ranges
  • master and node IPs
    • master: node-1(192.168.50.101/24, IP address is on eth1)
    • nodes: node2(192.168.50.102/24), node-3(192.168.50.103/24), IP Address are on eth1
  • kubernetes cluster IP range: 10.254.0.0/16
  • flannel: iface on eth1, range: 172.30.0.0/16, subnetLen:24, type: vxlan
Ports
  • etcd: 2379
  • kube-apiserver: 8080
  • kubelet: 10250
Services
  • On master:
    • etcd
    • kube-apiserver
    • kube-controller-manager
    • kube-scheduler
    • flanneld
  • On nodes:
    • kubelet
    • kube-proxy
    • flanneld
configuration files
  • /etc/etcd/etcd.conf
    ETCD_NAME=default
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://node-1:2379"
    ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379,http://node-1:2379"
  • /etc/kubernetes/config - for both master and node
    KUBE_LOGTOSTDERR="--logtostderr=true"
    KUBE_LOG_LEVEL="--v=0"
    KUBE_ALLOW_PRIV="--allow-privileged=false"
    KUBE_MASTER="--master=http://node-1:8080"
  • /etc/kubernetes/apiserver
    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
    KUBE_ETCD_SERVERS="--etcd-servers=http://node-1:2379"
    KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
    KUBE_API_ARGS=""
    KUBE_API_PORT="--port=8080"
    KUBELET_PORT="--kubelet-port=10250"
  • /etc/controller-manager
    KUBE_CONTROLLER_MANAGER_ARGS=""
  • /etc/scheduler
    KUBE_SCHEDULER_ARGS=""
  • /etc/kubernetes/kubelet
    KUBELET_ADDRESS="--address=0.0.0.0"
    KUBELET_HOSTNAME="--hostname-override=node-2"
    KUBELET_API_SERVER="--api-servers=http://node-1:8080"
    KUBELET_ARGS=""
    KUBELET_PORT="--port=10250"
  • /etc/kubernetes/proxy
    KUBE_PROXY_ARGS=""
  • /etc/sysconfig/flanneld
    FLANNEL_ETCD_ENDPOINTS="http://node-1:2379"
    FLANNEL_ETCD_PREFIX="/kube-centos/network"
    FLANNEL_OPTIONS="-iface=eth1"
  • manual step to configure flannel with etcd
    # systemctl start etcd
    # etcdctl mkdir /kube-centos/network
    # etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }"   
service processes
  • master
    /usr/bin/etcd --name=default --data-dir=/var/lib/etcd/default.etcd --listen-client-urls=http://localhost:2379,http://node-1:2379
    usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://node-1:2379 --insecure-bind-address=0.0.0.0 --port=8080 --kubelet-port=10250 --allow-privileged=false --service-cluster-ip-range=10.254.0.0/16
    /usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://node-1:8080
    /usr/bin/kube-scheduler --logtostderr=true --v=0 --master=http://node-1:8080
    /usr/bin/flanneld -etcd-endpoints=http://node-1:2379 -etcd-prefix=/kube-centos/network -iface=eth1
  • nodes
    /usr/bin/kubelet --logtostderr=true --v=0 --api-servers=http://node-1:8080 --address=0.0.0.0 --port=10250 --hostname-override=node-2 --allow-privileged=false
    /usr/bin/kube-proxy --logtostderr=true --v=0 --master=http://node-1:8080
    /usr/bin/flanneld -etcd-endpoints=http://node-1:2379 -etcd-prefix=/kube-centos/network -iface=eth1
First pod - Hello Kubernetes!
$ kubectl run node-hello --image=gcr.io/google-samples/node-hello:1.0 --port=8080

$ kubectl get deploy
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
node-hello   1         1         1            1           1h

$ kubectl get po
NAME                          READY     STATUS    RESTARTS   AGE
node-hello-3526609615-fqf4k   1/1       Running   0          1h


$ kubectl expose deploy/node-hello --type=NodePort
service "node-hello" exposed

$ kubectl get svc -l run=node-hello
NAME         CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hello-node   10.254.139.8   <nodes>       8080:30881/TCP   11s

$ kubectl get po -l run=node-hello -o wide
NAME                          READY     STATUS    RESTARTS   AGE       IP           NODE
node-hello-3526609615-fqf4k   1/1       Running   0          1h        172.30.5.2   node-3

$ curl http://node-3:30881
Hello Kubernetes!

$ curl http://node-2:30881
Hello Kubernetes!

2nd pod with replicas
$ kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
deployment "kubernetes-bootcamp" created

$ kubectl get deploy
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1         1         1            1           16s


$ kubectl get po
NAME                                   READY     STATUS    RESTARTS   AGE
kubernetes-bootcamp-2019480069-jtswf   1/1       Running   0          18s

$ kubectl expose deploy/kubernetes-bootcamp --type=NodePort
service "kubernetes-bootcamp" exposed

$ kubectl get svc
NAME                  CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes            10.254.0.1       <none>        443/TCP          1h
kubernetes-bootcamp   10.254.195.177   <nodes>       8080:32693/TCP   13s

$ kubectl get po -o wide
NAME                                   READY     STATUS    RESTARTS   AGE       IP            NODE
kubernetes-bootcamp-2019480069-jtswf   1/1       Running   0          1m        172.30.93.2   node-2

$ curl http://node-2:32693
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-2019480069-jtswf | v=1
$ curl http://node-2:32693
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-2019480069-jtswf | v=1
$ kubectl logs kubernetes-bootcamp-2019480069-jtswf
Kubernetes Bootcamp App Started At: 2017-04-04T19:45:42.811Z | Running On:  kubernetes-bootcamp-2019480069-jtswf 
Running On: kubernetes-bootcamp-2019480069-jtswf | Total Requests: 1 | App Uptime: 112.899 seconds | Log Time: 2017-04-04T19:47:35.710Z
Running On: kubernetes-bootcamp-2019480069-jtswf | Total Requests: 2 | App Uptime: 127.612 seconds | Log Time: 2017-04-04T19:47:50.423Z

$ kubectl scale deploy/kubernetes-bootcamp --replicas=4
deployment "kubernetes-bootcamp" scaled

cloud/kubernetes/installation.1491335317.txt.gz · Last modified: 2017/04/04 12:48 by frank