Kubernetes kann einem ganz schön auf die Nerven gehen!
Wenn alles gut ist, ist alles gut. Über den Sinn eines Setups macht man sich in den letzten Jahren sowieso kaum noch Gedanken. Aber Spaß an der Arbeit hat man - manchmal.
Wie dem auch sei, man schlägt sich ganz schön auf die Füße, wenn man nicht ALLES, was einem auf die Füße fallen könnte, vorher eingrenzt und deklariert. Auf einem meiner Cluster hatte ich den Fall, dass durch ein kaputtes Deployment so viele evicted Pods hinzukamen, dass keine neuen Pods mehr gestartet werden konnten.
Schnelle Abhilfe schafft hier folgendes Kommando:
kubectl delete pods --field-selector status.phase=Failed -A
Ich stehe ja total auf diesen ganzen HA Kram in "good old standard" manier. Darunter zu finden ist dann auch Pacemaker als Tooling, welches man für seine Failover oder eben HA Cluster in größeren Dimensionen nutzen kann.
In diesem Beitrag beschreibe ich, wie man sich fix ein HA Setup bauen kann, bei dem N Knoten eine (virtuelle) IP-Adresse hin und her reichen. Nutzen kann man das zum Beispiel bei identisch eingerichteten Webserver, als klassisches Failover, oder - wie in meinem Fall - um damit einen Kubernetes Cluster anzusprechen und somit die Master verfügbar zu halten.
apt install --assume-yes pacemaker corosync pcs
systemctl start pcsd pacemaker corosync
systemctl enable pacemaker corosync pcsd
Mit diesem Benutzer wird das pairing versucht. Das bedeutet, das in den nächsten Schritten die Nodes versuchen werden sich mit diesem Benutzernamen und Kennwort gegenüber den anderen Teilnehmenden Knoten zu authentifizieren.
echo "d3fcCfcjumK3zPvnVFpp" | passwd hacluster --stdin
passwd hacluster
Jetzt geht es ans eingemachte: Wir setzen den Cluster auf. Wir beginnen nach einer frischen Installation damit, das wir zunächst
pcs cluster auth -u hacluster -p d3fcCfcjumK3zPvnVFpp
pcs host auth server1 server2 server3 -u hacluster
pcs cluster setup superdupercluster server1 server2 server3
pcs cluster start --all
pcs cluster enable --all
jetzt wo wir einen funktionieren Cluster haben, werden wir die gewünschte virtuelle IP-Adresse einrichten, damit wir unserem Ziel näher kommen.
pcs resource create cluster_ip ocf:heartbeat:IPaddr2 ip=111.222.333.444 cidr_netmask=24 op monitor interval=30s
Richtig cool ist eigentlich, das wir einen rudimentären Loadbalancer haben (können). Die nun vorhandene virtuelle IP-Adresse wird im Cluster geclont und auf mehreren Knoten bereitgestellt.
pcs resource clone cluster_ip clone-max=2 clone-node-max=2 globally-unique=true
pcs resource update cluster_ip clusterip_hash=sourceip
Zu guter letzt wollen wir natürlich wissen wie es unserem Cluster geht. Das erfahren wir durch
pcs status
Quellen und Links
Wenn man mal richtig bock darauf hat sich den Tag zu versauen, dann macht man genau das: ein Upgrade von Ceph Version Luminous auf Ceph Version Nautilus mit Filestore.
PARTITION=4
for i in a b c d e f g h
do
ceph-volume simple scan /dev/sd$i$PARTITION
done
/etc/ceph/osd/0-908444d5-2b4e-48e7-8780-58c2679c4db0.json
{
"active": "ok",
"ceph_fsid": "b8f7fd3a-471a-42bc-9bdf-23694508646f",
"cluster_name": "ceph",
"data": {
"path": "/dev/sda4",
"uuid": "a47683ae-1b32-45b1-b48c-adb3ad52037e"
},
"fsid": "908444d5-2b4e-48e7-8780-58c2679c4db0",
"keyring": "AQAVX+5daGvXNBAA8QMsdjVaDwNzTmY6qbY/Fw==",
"magic": "ceph osd volume v026",
"ready": "ready",
"require_osd_release": 12,
"systemd": "",
"type": "filestore",
"whoami": 0
}
zu
{
"active": "ok",
"ceph_fsid": "b8f7fd3a-471a-42bc-9bdf-23694508646f",
"cluster_name": "ceph",
"data": {
"path": "/dev/sda4",
"uuid": "a47683ae-1b32-45b1-b48c-adb3ad52037e"
},
"journal": {
"path": "/var/lib/ceph/osd/ceph-0/journal"
},
"fsid": "908444d5-2b4e-48e7-8780-58c2679c4db0",
"keyring": "AQAVX+5daGvXNBAA8QMsdjVaDwNzTmY6qbY/Fw==",
"magic": "ceph osd volume v026",
"ready": "ready",
"require_osd_release": 12,
"systemd": "",
"type": "filestore",
"whoami": 0
}
ceph-volume simple activate --all
...
Running command: /bin/mount -v /dev/sdf4 /var/lib/ceph/osd/ceph-17
stdout: mount: /dev/sdf4 mounted on /var/lib/ceph/osd/ceph-17.
Running command: /bin/systemctl enable ceph-volume@simple-17-ed611cec-c4c2-4c8b-934c-69292305c63c
stderr: Created symlink /etc/systemd/system/multi-user.target.wants/ceph-volume@simple-17-ed611cec-c4c2-4c8b-934c-69292305c63c.service → /lib/systemd/system/ceph-volume@.service.
Running command: /bin/ln -sf /dev/null /etc/systemd/system/ceph-disk@.service
--> All ceph-disk systemd units have been disabled to prevent OSDs getting triggered by UDEV events
Running command: /bin/systemctl enable --runtime ceph-osd@17
stderr: Created symlink /run/systemd/system/ceph-osd.target.wants/ceph-osd@17.service → /lib/systemd/system/ceph-osd@.service.
Running command: /bin/systemctl start ceph-osd@17
--> Successfully activated OSD 17 with FSID ed611cec-c4c2-4c8b-934c-69292305c63c
Quellen und Links: