...
Create create-vm.sh:
Code Block |
---|
|
#!/bin/sh
dist='bionic'
if [ -z "$1" ] ;
then
echo Specify a virtual-machine name.
exit 1
fi
sudo virt-install \
--name $1 \
--ram 4096 \
--disk path=/mnt/A/images/$1.img,size=30 \
--vcpus 2 \
--os-type linux \
--os-variant ubuntu18.04 \
--network bridge:br0,model=virtio \
--location "http://gb.archive.ubuntu.com/ubuntu/dists/${dist}/main/installer-amd64/" \
--graphics vnc,listen=192.168.2.13 \
--noautoconsole \
--extra-args "ip=192.168.2.30::192.168.2.1:255.255.255.0:${1}.internal.stroila.net:eth0:none" |
...
Run create-vm.sh
Code Block |
---|
|
./create-vm.sh k8s-master |
...
Get the vnc display
Code Block |
---|
|
virsh vncdisplay k8s-master |
...
Turn off swap (edit /etc/fstab) and comment out the line that says swap.
and...
Set static ip
Code Block |
---|
|
$ cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: no
dhcp6: no
addresses: [192.168.2.30/24, '2001:1::1/64']
gateway4: 192.168.2.1
nameservers:
addresses: [192.168.2.1] |
...
Configure the nodes
Code Block |
---|
|
#!/bin/sh
sudo apt update \
&& sudo apt install -qy docker.io
systemctl enable docker.service
sudo apt install gnupg2 -y
sudo apt update \
&& sudo apt install -y apt-transport-https \
&& curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" \
| sudo tee -a /etc/apt/sources.list.d/kubernetes.list \
&& sudo apt update
sudo apt update \
&& sudo apt-get install -y \
kubelet \
kubeadm \
kubernetes-cni |
Clone the vm
Code Block |
---|
|
virt-clone --original k8s-master --name k8s-w1 --auto-clone
virt-clone --original k8s-master --name k8s-w2 --auto-clone
virt-clone --original k8s-master --name k8s-w3 --auto-clone
... |
...
Set the static ip and hostname on the clones
Code Block |
---|
|
hostnamectl set-hostname k8s-w1.internal.stroila.net
... |
...
Create the cluster. On the master node:
Code Block |
---|
|
sudo kubeadm init |
Copy of the Kube config:
Code Block |
---|
|
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config |
...
Install networking
Code Block |
---|
|
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" |
...
To alter the private subnet that Weavenet uses for allocating IP addresses to Pods (containers):
Code Block |
---|
|
curl -SL "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&env.IPALLOC_RANGE=172.16.8.64/27" \
| kubectl apply -f - |
...
To join the workers run on each worker:
Code Block |
---|
|
kubeadm join 192.168.2.30:6443 --token jwm5ss.drp2ohpl53anl8r2 \
--discovery-token-ca-cert-hash sha256:39196d23b782299298b374ef8ec9637a2a1a29be286d98b820c34a30d073d2a3 |
...
Now you can list the nodes:
Code Block |
---|
|
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master.internal.stroila.net Ready master 21m v1.15.2
k8s-w1.internal.stroila.net Ready <none> 4m v1.15.2
k8s-w2.internal.stroila.net Ready <none> 2m26s v1.15.2
k8s-w3.internal.stroila.net Ready <none> 95s v1.15.2 |
Reference
https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/