====== Kubernetes via K3s mit etcd installieren ======
Gestest wurde das ganze auf vier virtuellen Ubuntu 20.04 Nodes mit K3s v1.19.0\\
* Node0 -> Loadbalancer für die Master (NGINX)
* Node1 -> Master & Worker
* Node2 -> Master & Worker
* Node3 -> Master & Worker
* Node4 -> Worker
\\
===== Update OS =====
Das OS sollte aktuell sein
Auf alle Nodes:
apt update
apt dist-upgrade -y
reboot
\\
===== Installation NGINX Loadbalancer =====
Dieser NGINX wird verwendet damit der Traffic nicht auf einen Master kommt sondern auf alle Master aufgeteilt wird. \\
Nur so sind die Master Nodes auch wirklich HA. \\
Daher muss dieser NGINX ausserhalb vom Kubernetes Cluster laufen.
apt-get install nginx
rm -f /etc/nginx/sites-enabled/default
vim /etc/nginx/nginx.conf
stream {
upstream k3s_master {
server 192.168.88.121:6443;
server 192.168.88.122:6443;
server 192.168.88.123:6443;
}
server {
listen 6443;
proxy_pass k3s_master;
}
}
systemctl restart nginx
\\
===== Installation Master 1 =====
Master 1 - Node 1
export INSTALL_K3S_EXEC="--disable servicelb --disable traefik --cluster-init"
curl -sfL https://get.k3s.io | sh -
kubectl get nodes
\\
Token für die anderen Master und den Worker
root@kube01:~# cat /var/lib/rancher/k3s/server/node-token
K10dbb79453251d4adcf6048bda1b08ae8abf1d9d54ea5b342d91bd7a6ac7a55778::server:SuperGeilerTest
\\
===== Installation Master 2 =====
Master 2 - Node 2
export INSTALL_K3S_EXEC="--disable servicelb --disable traefik --cluster-init --server https://192.168.88.120:6443"
curl -sfL https://get.k3s.io | K3S_TOKEN=K10dbb79453251d4adcf6048bda1b08ae8abf1d9d54ea5b342d91bd7a6ac7a55778::server:SuperGeilerTest sh -s -
\\
===== Installation Master 3 =====
Master 3 - Node 3
export INSTALL_K3S_EXEC="--disable servicelb --disable traefik --cluster-init --server https://192.168.88.120:6443"
curl -sfL https://get.k3s.io | K3S_TOKEN=K10dbb79453251d4adcf6048bda1b08ae8abf1d9d54ea5b342d91bd7a6ac7a55778::server:SuperGeilerTest sh -s -
\\
===== Worker hinzufügen 1 =====
Worker 1 - Node 4
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.88.120:6443 K3S_TOKEN=K10dbb79453251d4adcf6048bda1b08ae8abf1d9d54ea5b342d91bd7a6ac7a55778::server:SuperGeilerTest sh -s -
\\
===== Bash Autocomplete kubectl =====
Auf der Master Node:
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source .bashrc
\\
===== Kontrolle des Clusters =====
kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube01 Ready etcd,master 4h40m v1.19.5+k3s2
kube02 Ready etcd,master 4h24m v1.19.5+k3s2
kube03 Ready etcd,master 4h21m v1.19.5+k3s2
kube04 Ready 3h6m v1.19.5+k3s2
root@kube01:~# kubectl cluster-info
Kubernetes master is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
\\
Danach kann mit weiteren Punten fortgesetzt werden.
* [[https://dwiki.heisl.org/doku.php?id=container:kubernetes:metallb|Metallb - Load Balancer]]
* [[https://dwiki.heisl.org/doku.php?id=container:kubernetes:nfs_provisioner|NFS - Storage Provider]]
* [[https://dwiki.heisl.org/doku.php?id=container:kubernetes:helm|Helm]]
\\
==== Kubectl auf dem NGINX (Optional) ====
Natürlich ist es möglich via kubectl über den Loadbalancer den Cluster zu steuern. Zum Beispiel über den NGINX Server. \\
Installation Kubectl
snap install kubectl --classic
\\
K3s Config holen
Auf einer Master Node:
cat /etc/rancher/k3s/k3s.yaml
Auf dem NGINX Server
mkdir -p ~/.kube
vim ~/.kube/config
Einfügen der Config vom Master und ändern der "server" IP auf die IP vom NGINX Loadbalancer.
\\
root@kubenginx:~# kubectl cluster-info
Kubernetes control plane is running at https://192.168.88.120:6443
CoreDNS is running at https://192.168.88.120:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://192.168.88.120:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
\\
Bachrc Setup
vim ~/.bashrc
export KUBECONFIG=~/.kube/config