Rulez un mediu simplu de „înaltă disponibilitate” multi-master, cu 2 master și 2 lucrători, precum și un alt VM cu HAProxy care servește ca Load Balancer extern.
Întrebarea mea este: este posibil să accesez serviciile (tabloul de bord, ngnix, mysql (în special mysql), etc...) din afara clusterului, expunându-le în rețea cu această setare pe care o rulez?
Am încercat să folosesc MetalLB în acest mediu pentru a expune serviciile ca LoadBalancer, dar nu pare să funcționeze și, din moment ce sunt cam nou în Kubernetes, nu mi-am putut da seama de ce.
Editare: Am început să funcționeze acum, după sugestia @c4f4t0r, în loc de un echilibrator de încărcare HAProxy extern, aceeași VM a devenit un al treilea nod principal și, la fel ca celelalte, acum rulează fiecare o instanță internă a HAProxy și Keepalived, în timp ce VM-ul care obișnuia să fie LB extern este acum un master al punctului final pentru ca ceilalți să se alăture clusterului, MetalLB rulând în interiorul clusterului cu controlerul de intrare nginx care conduce cererile către serviciul care a fost solicitat.
>>> Mai jos sunt pașii pe care i-am urmat pentru a crea mediul, precum și toată configurația folosită în configurare.
Configurați un cluster Kubernetes foarte disponibil folosind kubeadm
Urmați această documentație pentru a configura un cluster Kubernetes foarte disponibil folosind Ubuntu 20.04 LTS.
Această documentație vă ghidează în configurarea unui cluster cu două noduri master, un nod de lucru și un nod de echilibrare a încărcăturii folosind HAProxy.
Mediu bare-metal
Rol |
FQDN |
IP |
OS |
RAM |
Procesor |
Echilibrarea greutății |
loadbalancer.example.com |
192.168.44.100 |
Ubuntu 21.04 |
1G |
1 |
Maestru |
kmaster1.example.com |
10.84.44.51 |
Ubuntu 21.04 |
2G |
2 |
Maestru |
kmaster2.example.com |
192.168.44.50 |
Ubuntu 21.04 |
2G |
2 |
Muncitor |
kworker1.example.com |
10.84.44.50 |
Ubuntu 21.04 |
2G |
2 |
Muncitor |
kworker2.example.com |
192.168.44.51 |
Ubuntu 21.04 |
2G |
2 |
- Parola pentru rădăcină cont pe toate aceste mașini virtuale este kubeadmin
- Efectuați toate comenzile ca utilizator root, dacă nu se specifică altfel
Cerințe preliminare
Dacă doriți să încercați acest lucru într-un mediu virtualizat pe stația dvs. de lucru
- Virtualbox instalat
- Mașina gazdă are cel puțin 8 nuclee
- Mașina gazdă are cel puțin 8G de memorie
Configurați nodul de echilibrare a sarcinii
Instalați Haproxy
apt update && apt install -y haproxy
Configurați haproxy
Adăugați rândurile de mai jos la /etc/haproxy/haproxy.cfg
frontend kubernetes-frontend
lega 192.168.44.100:6443
modul tcp
opțiunea tcplog
default_backend kubernetes-backend
backend kubernetes-backend
modul tcp
opțiunea tcp-check
echilibru roundrobin
server kmaster1 10.84.44.51:6443 verifica cădere 3 creștere 2
server kmaster2 192.168.44.50:6443 verifica toamna 3 ridica 2
Reporniți serviciul haproxy
systemctl reporniți haproxy
Pe toate nodurile Kubernetes (kmaster1, kmaster2, kworker1)
Dezactivați firewall
ufw dezactivare
Dezactivați schimbul
swapoff -a; sed -i '/swap/d' /etc/fstab
Actualizați setările sysctl pentru rețele Kubernetes
pisică >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
Instalați motorul docker
{
apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository „deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
apt update && apt install -y docker-ce containerd.io
}
Configurare Kubernetes
Adăugați depozitul Apt
{
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
}
Instalați componentele Kubernetes
actualizare apt && instalare apt -y kubeadm=1.19.2-00 kubelet=1.19.2-00 kubectl=1.19.2-00
Pe oricare dintre nodurile master Kubernetes (de exemplu: kmaster1)
Inițializați clusterul Kubernetes
kubeadm init --control-plane-endpoint="192.168.44.100:6443" --upload-certs
Copiați comenzile pentru a vă alătura altor noduri master și noduri de lucru.
Implementează Stambă rețea (folosesc Weave în loc de Calico)
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
Conectați alte noduri la cluster (kmaster2 și kworker1)
Utilizați comenzile respective kubeadm join pe care le-ați copiat din rezultatul comenzii kubeadm init de pe primul master.
IMPORTANT: De asemenea, trebuie să transmiteți --apiserver-advertise-address la comanda join atunci când vă alăturați celuilalt nod master.