Běží ve vpsfree Microk8s?

Ahoj,
tak já začnu. Experimentoval jsem s microk8s, ale nějak se mi to nepodařilo rozjet (ubuntu 22.04). Nerozjel jste to někdo? Ještě jsem to úplně nevzdal. :slight_smile: Tváří se mi to tak, že kube api neposlouchá na localhost pro ostatní komponenty. Možná něco se sítěmi…

Díky za případné postřehy,
ahoj F.

Ahoj, microk8s jsem nezkoušel, ale pokud potřebuješ Kubernetes zkus k3s. To už mi nějaký rok běží.

3 Likes

Tak nevím. Po standardní instalaci k3s si to stěžuje na moduly.

root@host:/etc/rancher/node# systemctl status k3s
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
     Active: activating (start) since Tue 2023-12-19 19:22:07 CET; 245ms ago
       Docs: https://k3s.io
    Process: 30796 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/SUCCESS)
    Process: 30798 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=1/FAILURE)
    Process: 30799 ExecStartPre=/sbin/modprobe overlay (code=exited, status=1/FAILURE)
   Main PID: 30800 (k3s-server)
      Tasks: 12
     Memory: 21.0M
     CGroup: /system.slice/k3s.service
             └─30800 "/usr/local/bin/k3s " "" "" "" "" "" ""

Dec 19 19:22:07 evop systemd[1]: Starting Lightweight Kubernetes...
Dec 19 19:22:07 evop sh[30796]: + /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service
Dec 19 19:22:07 evop sh[30797]: Failed to get unit file state for nm-cloud-setup.service: No such file or directory
Dec 19 19:22:07 evop modprobe[30798]: modprobe: FATAL: Module br_netfilter not found in directory /lib/modules/6.1.44
Dec 19 19:22:07 evop modprobe[30799]: modprobe: FATAL: Module overlay not found in directory /lib/modules/6.1.44
r

Co kdyz zkusis vyrobit modprobe jako symlink na /bin/true? Treba do /usr/local/sbin/?

ln -s /bin/true /usr/local/sbin/modprobe

… tedy za predpokladu, ze echo $PATH vypise mezi tema dvojteckama i /usr/local/sbin, jinak by se musela najit nejaka jina cesta (mohl by se nahradit i modprobe samotny rovnou za ten link, ale pak to asi bude problem pri upgrade modprobe baliku nebo kontrole integrity nainstalovanych baliku)

Když nahradím původní modprobe, sice to najede, ale vzápětí to padne o kus dál. Tak už spíš pro zajímavost log. Díky za snahu, prdím na to. :slight_smile:

Dec 19 23:48:55 evop k3s[11860]: time="2023-12-19T23:48:55+01:00" level=info msg="Waiting for cloud-controller-manager privileges to become available"
Dec 19 23:48:55 evop k3s[11860]: W1219 23:48:55.070375   11860 feature_gate.go:241] Setting GA feature gate JobTrackingWithFinalizers=true. It will be removed in a future release.
Dec 19 23:48:55 evop systemd[1]: Started Lightweight Kubernetes.
Dec 19 23:48:55 evop k3s[11860]: time="2023-12-19T23:48:55+01:00" level=info msg="Creating k3s-supervisor event broadcaster"
Dec 19 23:48:55 evop k3s[11860]: E1219 23:48:55.078831   11860 nodelease.go:49] "Failed to get node when trying to set owner ref to the node lease" err="nodes \"evop\" not found" node="evop"
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.087417   11860 cpu_manager.go:214] "Starting CPU manager" policy="none"
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.087450   11860 cpu_manager.go:215] "Reconciling" reconcilePeriod="10s"
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.087480   11860 state_mem.go:36] "Initialized new in-memory state store"
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.087839   11860 state_mem.go:88] "Updated default CPUSet" cpuSet=""
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.087881   11860 state_mem.go:96] "Updated CPUSet assignments" assignments={}
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.087898   11860 policy_none.go:49] "None policy: Start"
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.088657   11860 memory_manager.go:169] "Starting memorymanager" policy="None"
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.088699   11860 state_mem.go:35] "Initializing new in-memory state store"
Dec 19 23:48:55 evop k3s[11860]: I1219 23:48:55.089077   11860 state_mem.go:75] "Updated machine memory state"
Dec 19 23:48:55 evop k3s[11860]: E1219 23:48:55.089663   11860 container_manager_linux.go:439] "Updating kernel flag failed (Hint: enable KubeletInUserNamespace feature flag to ignore the error)" err="open /p>
Dec 19 23:48:55 evop k3s[11860]: E1219 23:48:55.089822   11860 container_manager_linux.go:439] "Updating kernel flag failed (Hint: enable KubeletInUserNamespace feature flag to ignore the error)" err="open /p>
Dec 19 23:48:55 evop k3s[11860]: E1219 23:48:55.089896   11860 container_manager_linux.go:439] "Updating kernel flag failed (Hint: enable KubeletInUserNamespace feature flag to ignore the error)" err="open /p>
Dec 19 23:48:55 evop k3s[11860]: E1219 23:48:55.089994   11860 kubelet.go:1511] "Failed to start ContainerManager" err="[open /proc/sys/vm/overcommit_memory: read-only file system, open /proc/sys/kernel/panic>
Dec 19 23:48:55 evop systemd[1]: k3s.service: Main process exited, code=exited, status=1/FAILURE
Dec 19 23:48:55 evop systemd[1]: k3s.service: Failed with result 'exit-code'.
Dec 19 23:49:00 evop systemd[1]: k3s.service: Scheduled restart job, restart counter is at 77.
Dec 19 23:49:00 evop systemd[1]: Stopped Lightweight Kubernetes.
D

Popsal bys prosím na jaké configuraci ti to běží?

toto som pouzival na rozbehanie k8s od podlahy davnejsie (Ubuntu 18.04), treba to najskor prisposobit a upravit, ale pre predstavu:

mkdir -p /opt/k8s/fake

cat > /opt/k8s/fake.sh <<EOF
#!/bin/bash 
cd /opt/k8s/fake
echo 0 > panic
mount --bind panic /proc/sys/kernel/panic
echo 0 > panic_on_oops
mount --bind panic_on_oops /proc/sys/kernel/panic_on_oops
echo 0 > overcommit_memory
mount --bind overcommit_memory /proc/sys/vm/overcommit_memory

echo "Filename            Type     Size  Used  Priority" > swaps
mount --bind swaps /proc/swaps
mkdir block
mount -o bind block/ /sys/block/
mount --make-rshared /

mkdir -p netfilter/nf_log
mount --bind netfilter /proc/sys/net/netfilter/
echo 327680 > netfilter/hashsize

echo 1310720 > netfilter/nf_conntrack_max

mkdir nf_conntrack_parameters
echo N > nf_conntrack_parameters/acct
echo 512 > nf_conntrack_parameters/expect_hashsize
echo 16384 > nf_conntrack_parameters/hashsize
echo N > nf_conntrack_parameters/nf_conntrack_helper
echo N > nf_conntrack_parameters/tstamp
chmod 666 -R nf_conntrack_parameters
chown nobody:nogroup -R nf_conntrack_parameters
mount -o bind nf_conntrack_parameters /sys/module/nf_conntrack/parameters/
EOF

chmod +x /opt/k8s/fake.sh

cat > /etc/systemd/system/fake.service <<EOF
[Unit]
Before=kubelet.service

[Service]
ExecStart=/opt/k8s/fake.sh

[Install]
WantedBy=default.target
EOF

chmod 644 /etc/systemd/system/fake.service

systemctl daemon-reload
systemctl enable fake.service
systemctl start fake.service

2 Likes
Ahoj,

taky se pokousim rozbehat Kuberenetes, konkretne k0s nebo k3s.
Zkusil jsem tedy k3s a dle ocekavani se po instalaci "k3s.service" nespusti
a konci chybou.

systemctl status k3s.service

Na zaklade rady od Tomase Srnky jsem zkusil nasledujici.
Je to jen tak narychlo spichnute, neprezije to restart,
ale zda se ze to funguje.

ln -s /bin/true /usr/local/sbin/modprobe

systemctl cat k3s.service
mcedit /etc/systemd/system/k3s.service
--- EDITOVAT CESTY K MODPROBE
ExecStartPre=-/usr/local/sbin/modprobe br_netfilter
ExecStartPre=-/usr/local/sbin/modprobe overlay
---
systemctl daemon-reload
(nejspis by stacilo ty radky ExecStartPre pouze zakomentaovat,
ale nezkousel jsem)

mkdir -p /opt/k8s/fake
cd /opt/k8s/fake
echo 0 > panic
mount --bind panic /proc/sys/kernel/panic
echo 0 > panic_on_oops
mount --bind panic_on_oops /proc/sys/kernel/panic_on_oops
echo 0 > overcommit_memory
mount --bind overcommit_memory /proc/sys/vm/overcommit_memory

systemctl start k3s.service

Tomas Srnka tam tech bindu ma vic, ale toto mi zatim stacilo.
S Kubernetes jsem totalnich zacatcich, s vpsfree taky zacinam,
tak bohuzel zatim nevim, proc je to potreba a proc to pomohlo.
Ale pro zacatek dobry, tak to mozna pomuze i Tobe.
3 Likes

Nějak jsem to sepsal do skriptu. Pokoukal jsem logy, jestli tam ještě něco nefailuje a vypadá to slušně. Potřebovalo by to ale revizi od linuxáka, co zná místní specifika. Při zastavování služby to končí failem “no leader election” (nebo tak něco), ale ten (příležitostně) vídám i na plnohodnotném virtuálu. Tady je skript, kdybyste s ním chtěl někdo pokračovat:

2 Likes

S k3s nemám zkušenosti, ale pár poznámek k tomu skriptu (jinak super práce :+1:).

Chybové hlášky výše obsahují:

Updating kernel flag failed (Hint: enable KubeletInUserNamespace feature flag to ignore the error)

Říkají tomu feature gate a možná že kdyby se to podařilo zapnout, nebude potřeba řešit ty bind mounty s k3s-fake. Nepřišel jsem ale na to, jak to s k3s udělat.

Dále není moc vhodné upravovat existující systemd service soubory, protože v tom budeš mít konflikt při aktualizaci balíčku, nebo to ten instálátor při aktualizaci znovu přepíše. Upřimně nevím, jak se k3s aktualizuje a jestli je to problém nebo ne. Každopádně, mohlo by fungovat toto:

mkdir -p /etc/systemd/system/k3s.service.d

cat <<EOF > /etc/systemd/system/k3s.service.d/override.conf
[Service]
# Vyresetuje ExecStartPre
ExecStartPre=

# Vrátíme jen to, co chceme. Možná to ani není potřeba, nevím k čemu to je.
ExecStartPre=/bin/sh -xc '! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service 2>/dev/null'
EOF

Když koukám na tu k3s.service z https://get.k3s.io, ten nefunkční modprobe by ani neměl způsobit selhání:

ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay

=- znamená, že příkaz může selhat a bude se pokračovat.

1 Like