Docker-Machine
Some basics to start with docker machine.
docker-machine ls #list all remote daemons docker-machine active #show active daemon #change to different VM docker-machine env default #connect your shell to the new machine eval $("docker-machine.exe" env default) #run the first container docker run ubuntu echo hello world docker run -d -p 8000:80 httpd:2.4 curl $(docker-machine ip default):8000 docker ps #get container id docker stop #stop container docker stop $(docker ps -a) #stop all container docker-machine create -d virtualbox --virtualbox-cpu-count 2 --virtualbox-memory 6144 --virtualbox-disk-size 15000 devdays #create a docker daemon in virtualbox
Kubernetes
This is a smal how-to to setup a kmaster and a knode.
With ubuntu 16.04
- just update the OS
sudo su apt-get update apt-get upgrade
- set hostname
sudo vi /etc/hostname
kmaster
- disable swap
sudo swapoff -a
- and permanently by editing fstab, only comment the line containing swap
/dev/mapper/surrogate--vg-root / ext4 errors=remount-ro 0 1 UUID=61f86b59-899d-4be7-b60f-233ee9158663 /boot ext2 defaults 0 2 #/dev/mapper/surrogate--vg-swap_1 none swap sw 0 0
- setup static ip address, first check status
ifconfig
enp0s8 Link encap:Ethernet HWaddr 08:00:27:ae:17:31 inet addr:192.168.56.201 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feae:1731/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:111852 errors:0 dropped:0 overruns:0 frame:0 TX packets:138460 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:11077514 (11.0 MB) TX bytes:130166521 (130.1 MB)
sudo vi /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto enp0s3 iface enp0s3 inet dhcp auto enp0s8 iface enp0s8 inet static address 192.168.56.201
- restart network
sudo /etc/init.d/networking restart
- update hosts
sudo vi /etc/hosts
127.0.0.1 localhost 127.0.1.1 kmaster 192.168.56.201 kmaster 192.168.56.202 knode # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
apt-get update && apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl
From here all operations should be done only on kmaster
- check cgroup driver
sudo docker info | grep cgroup
- if Cgroup Driver is cgroupfs we need to update 10-kubeadm.conf
sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- add Environment=“cgroup-driver=systemd/cgroup-driver=cgroupfs”
# Note: This dropin only works with kubeadm and kubelet v1.11+ [Service] Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" Environment="cgroup-driver=systemd/cgroup-driver=cgroupfs" # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. EnvironmentFile=-/etc/default/kubelet ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
vi /etc/hosts kubeadm init --apiserver-advertise-address=192.168.56.201 --pod-network-cidr=192.168.0.0/16
- you should see the following:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.56.201:6443 --token usymgb.c5s530zqqs89napy --discovery-token-ca-cert-hash sha256:dadb42d6961e21cba21265dc345c23e1bf33bf9dcd26c96b4dd7eb9b66522614
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- install flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
- check if everything is running
kubectl get pods -o wide --all-namespaces
- should look like
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system coredns-86c58d9df4-hpl5s 1/1 Running 0 2d2h 192.168.0.3 kmaster <none> <none> kube-system coredns-86c58d9df4-jbvxv 1/1 Running 0 2d2h 192.168.0.2 kmaster <none> <none> kube-system etcd-kmaster 1/1 Running 1 2d2h 192.168.56.201 kmaster <none> <none> kube-system kube-apiserver-kmaster 1/1 Running 1 2d2h 192.168.56.201 kmaster <none> <none> kube-system kube-controller-manager-kmaster 1/1 Running 1 2d2h 192.168.56.201 kmaster <none> <none> kube-system kube-flannel-ds-amd64-q5lgj 1/1 Running 0 44h 192.168.56.202 knode <none> <none> kube-system kube-flannel-ds-amd64-zjxh8 1/1 Running 0 46h 192.168.56.201 kmaster <none> <none> kube-system kube-proxy-dj8h7 1/1 Running 1 2d2h 192.168.56.201 kmaster <none> <none> kube-system kube-proxy-qwh2x 1/1 Running 0 44h 192.168.56.202 knode <none> <none> kube-system kube-scheduler-kmaster 1/1 Running 1 2d2h 192.168.56.201 kmaster <none> <none> kube-system kubernetes-dashboard-57df4db6b-2r4th 1/1 Running 0 45h 192.168.0.4 kmaster <none> <none>
* install the kubernetes dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml # get token to login to dashboard kubectl create serviceaccount dashboard -n default kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
- start dashboard
kubectl proxy
- now you can reach the dashbard at
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
- to reach it from the host os you can tunnel the port 8001 from kmaster to your host
So now the kmaster is running. For the knode you have to repeate all operations above until the bold message which says: From here all operations should be done only on kmaster. Just set a diffrent host knode and a new static IP 192.168.56.202
After all operations were executed successfully do the connection. To join type in the above join statement. This is exactly what you got as message after starting kubernetes on master: Refere to the output above, it is the same!
sudo kubeadm join 192.168.56.201:6443 --token usymgb.c5s530zqqs89napy --discovery-token-ca-cert-hash sha256:dadb42d6961e21cba21265dc345c23e1bf33bf9dcd26c96b4dd7eb9b66522614
Sources: