W tym artykule przeprowadzę Cię przez kroki instalacji i konfiguracji k3s oraz rancher.
Oto tutorial wideo; kontynuuj czytanie, aby uzyskać listę pisemnych instrukcji.
VIDEO
Ćwiczenia do wykonania:
Odinstaluj k3s na węźle głównym i węzłach roboczych
Odinstaluj rancher
Dodaj wpisy cgroup do cmdline.txt i zrestartuj każdy węzeł z procesorem ARM
Zainstaluj bezpiecznie k3s v1.21.1+k3s1 bez traefika
Sprawdź status k3s
Skopiuj token
Skopiuj adres IP węzła głównego
Zainstaluj k3s v1.21.1+k3s1 na węzłach roboczych
Dodaj etykiety do węzłów roboczych na węźle głównym
Włącz uzupełnianie k3s
Zainstaluj nginx jako kontroler dostępu w k3s
Sprawdź status węzłów i podów
Utwórz balanser obciążenia, aby udostępnić porty kontrolera dostępu NGINX
Utwórz przestrzeń nazw test
Utwórz przykład do testowania
Przetestuj konfigurację
Sprawdź przykładową aplikację testową
Zainstaluj i skonfiguruj Rancher
Odinstalowanie k3s na węźle głównym i węzłach roboczych
Skrypt Bash dla węzła głównego:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#! /bin/ bash
# Sprawdź , czy użytkownik jest rootem
if [ "$UID" - ne 0 ]; then
echo "Nie jesteś użytkownikiem root."
exit 1
fi
echo "Jesteś użytkownikiem root."
# Sprawdź , czy k3s - killall .sh istnieje w /usr/ local /bin
if [ - f "/usr/local/bin/k3s-killall.sh" ]; then
echo "Wykonuję k3s-killall.sh..."
/usr/ local /bin/ k3s - killall .sh
else
echo "k3s-killall.sh nie istnieje w /usr/local/bin."
fi
# Sprawdź , czy k3s - uninstall .sh istnieje w /usr/ local /bin
if [ - f "/usr/local/bin/k3s-uninstall.sh" ]; then
echo "Wykonuję k3s-uninstall.sh..."
/usr/ local /bin/ k3s - uninstall .sh
else
echo "k3s-uninstall.sh nie istnieje w /usr/local/bin."
fi
apt install iptables
iptables - save | awk '/^[*]/ { print $1 } /COMMIT/ { print $0; }' | sudo iptables - restore
iptables - S
iptables - F
update - alternatives -- set iptables /usr/ sbin /iptables - legacy
update - alternatives -- set ip6tables /usr/ sbin /ip6tables - legacy
reboot
Skrypt Bash dla węzłów roboczych:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#! /bin/ bash
# Sprawdź , czy użytkownik jest rootem
if [ "$UID
" -ne 0 ]; then
echo "Nie jesteś użytkownikiem root."
exit 1
fi
echo "Jesteś użytkownikiem root."
# Sprawdź , czy k3s - killall .sh istnieje w /usr/ local /bin
if [ - f "/usr/local/bin/k3s-killall.sh" ]; then
echo "Wykonuję k3s-killall.sh..."
/usr/ local /bin/ k3s - killall .sh
else
echo "k3s-killall.sh nie istnieje w /usr/local/bin."
fi
# Sprawdź , czy k3s - agent - uninstall .sh istnieje w /usr/ local /bin
if [ - f "/usr/local/bin/k3s-agent-uninstall.sh" ]; then
echo "Wykonuję k3s-agent-uninstall.sh..."
/usr/ local /bin/ k3s - agent - uninstall .sh
else
echo "k3s-agent-uninstall.sh nie istnieje w /usr/local/bin."
fi
apt install iptables
iptables - save | awk '/^[*]/ { print $1 } /COMMIT/ { print $0; }' | sudo iptables - restore
iptables - S
iptables - F
update - alternatives -- set iptables /usr/ sbin /iptables - legacy
update - alternatives -- set ip6tables /usr/ sbin /ip6tables - legacy
reboot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#! /bin/ bash
# Sprawdź , czy użytkownik jest rootem
if [ "$UID" - ne 0 ]; then
echo "Nie jesteś użytkownikiem root."
exit 1
fi
echo "Jesteś użytkownikiem root."
# Sprawdź , czy rancherd - killall .sh istnieje w /usr/ local /bin
if [ - f "/usr/local/bin/rancherd-killall.sh" ]; then
echo "Wykonuję rancherd-killall.sh..."
/usr/ local /bin/ rancherd - killall .sh
else
echo "rancherd-killall.sh nie istnieje w /usr/local/bin."
fi
# Sprawdź , czy rancherd - uninstall .sh istnieje w /usr/ local /bin
if [ - f "/usr/local/bin/rancherd-uninstall.sh" ]; then
echo "Wykonuję rancherd-uninstall.sh..."
/usr/ local /bin/ rancherd - uninstall .sh
else
echo "rancherd-uninstall.sh nie istnieje w /usr/local/bin."
fi
apt install iptables
iptables - save | awk '/^[*]/ { print $1 } /COMMIT/ { print $0; }' | sudo iptables - restore
iptables - S
iptables - F
update - alternatives -- set iptables /usr/ sbin /iptables - legacy
update - alternatives -- set ip6tables /usr/ sbin /ip6tables - legacy
reboot
Dodanie wpisów cgroup do pliku cmdline.txt na każdym węźle działającym na procesorze ARM.
1
sudo vim /boot/cmdline.txt
Dodaj na końcu linii rozpoczynającej się od console= poniższe wpisy:
1
cgroup_memory = 1 cgroup_enable = memory
Restart serwera
Bezpieczna instalacja k3s v1.21.1+k3s1 na węźle głównym bez traefik
1
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION = "v1.21.1+k3s1" INSTALL_K3S_EXEC = "--disable traefik" K3S_KUBECONFIG_MODE = "644" sh -s -
Sprawdź status k3s
1
2
systemctl status k3s
systemctl is-enabled k3s
Skopiuj token
1
sudo cat /var/lib/rancher/k3s/server/node-token
Skopiuj adres IP węzła głównego
1
hostname -I | awk '{ print $1 }'
Instalacja k3s v1.21.1+k3s1 na węzłach roboczych
1
2
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION = "v1.21.1+k3s1" K3S_TOKEN = "<TWÓJ_TOKEN>" K3S_URL = "https://<URL_WĘZŁA_GŁÓWNEGO>:6443" K3S_NODE_NAME = "worker1" sh -
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION = "v1.21.1+k3s1" K3S_TOKEN = "<TWÓJ_TOKEN>" K3S_URL = "https://<URL_WĘZŁA_GŁÓWNEGO>:6443" K3S_NODE_NAME = "worker2" sh -
Dodawanie etykiet do węzłów roboczych na węźle głównym
1
2
kubectl label nodes worker1 kubernetes.io/role= worker
kubectl label nodes worker2 kubernetes.io/role= worker
Włączenie uzupełniania k3s
1
2
3
echo 'source <(kubectl completion bash)' >>~/.bashrc
source <( kubectl completion bash)
source .bashrc
Czym jest kontroler ingress NGINX?
roboczych
Zobacz dokumentację:
Kontroler dostępu NGINX
Zainstaluj NGINX jako kontroler ingress w k3s
1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/baremetal/deploy.yaml
Zobacz dokumentację:
Przewodnik instalacji kontrolera dostępu NGINX
Sprawdzanie statusu węzłów
Sprawdzanie podów
Utwórz load balancer, aby udostępnić porty kontrolera wejściowego NGINX
1
vim ingress-controller-load-balancer.yaml
Wprowadź poniższą zawartość do pliku
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
---
apiVersion : v1
kind : Service
metadata :
name : ingress-nginx-controller-loadbalancer
namespace : ingress-nginx
spec :
selector :
app.kubernetes.io/component : controller
app.kubernetes.io/instance : ingress-nginx
app.kubernetes.io/name : ingress-nginx
ports :
- name : http
port : 80
protocol : TCP
targetPort : 80
- name : https
port : 443
protocol : TCP
targetPort : 443
type : LoadBalancer
Uruchom plik yaml za pomocą kubectl
1
kubectl apply -f ingress-controller-load-balancer.yaml
Utwórz przestrzeń nazw test
1
kubectl create namespace test
Utwórz przykład do testowania
Poniższy przykład wykorzystuje kontroler dostępu NGINX do utworzenia wdrożenia (deployment) i jego udostępnienia. Ponieważ domyślnie będzie używany SSL i może wystąpić błąd z powodu braku certyfikatu, ważne jest zwrócenie uwagi na adnotację nginx.ingress.kubernetes.io/ssl-redirect: “false”.
Kolejnym ważnym czynnikiem jest użyta nazwa domeny. Będę używać nazwy domeny test.localhost, ale oczywiście powinieneś ją zmienić na swoją i skierować do węzła Twojej instancji k3s.
Utwórz plik o nazwie my-example.yaml i użyj poniższej składni, aby zaimplementować ten przykład do testowania Ingress:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
---
apiVersion : apps/v1
kind : Deployment
metadata :
name : test-nginx-app
namespace : test
spec :
selector :
matchLabels :
name : test-nginx-backend
template :
metadata :
labels :
name : test-nginx-backend
spec :
containers :
- name : backend
image : docker.io/nginx:alpine
imagePullPolicy : Always
ports :
- containerPort : 80
---
apiVersion : v1
kind : Service
metadata :
name : test-nginx-service
namespace : test
spec :
ports :
- name : http
port : 80
protocol : TCP
targetPort : 80
selector :
name : test-nginx-backend
---
apiVersion : networking.k8s.io/v1
kind : Ingress
metadata :
name : test-nginx-ingress
namespace : test
annotations :
nginx.ingress.kubernetes.io/ssl-redirect : "false"
spec :
rules :
- host : test.localhost
http :
paths :
- path : /
pathType : Prefix
backend :
service :
name : test-nginx-service
port :
number : 80
Zastosuj przykład do testowania
1
kubectl apply -f my-example.yaml --namespace test
Testowanie konfiguracji
1
2
3
4
5
kubectl cluster-info
kubectl get nodes
kubectl get pods -A
kubectl config get-contexts
kubectl get all --all-namespaces
Sprawdzanie usług k3s
1
kubectl get svc --all-namespaces -o wide
Sprawdź przykładową aplikację testową
1
curl http://10.43.XX.XX
Jeśli nie zadziała, wykonaj poniższe polecenie, a następnie sprawdź ponownie aplikację
1
kubectl replace -f test.yaml --namespace test --force
Instalacja Rancher
1
mkdir -p /etc/rancher/rke2
1
vim /etc/rancher/rke2/config.yaml
Dodaj poniższe wpisy do pliku config.yaml. Zmień adres IP - musi być taki sam, jak na maszynie, na której instalujesz Rancher.
1
2
3
token : Adw94lUaTgKfR93V0BZU
tls - san :
- 10 .XX .X .XXX
Instalacja Rancher v. 2.5.8
1
curl -sfL https://get.rancher.io | INSTALL_RANCHERD_VERSION = "v2.5.8" sh -
Włącz i uruchom usługę rancherd-server
1
2
systemctl enable rancherd-server.service
systemctl start rancherd-server.service
Sprawdzaj postępy z journalctl
1
journalctl -eu rancherd-server -f
Pamiętaj, aby czekać do końca. Zobacz wideo, aby zrozumieć wyjaśnienie. ctrl+c pozwoli Ci wyjść z okna journalctl.
Sprawdź wersję rancher
Zresetuj hasło rancher dla admina
Jeśli nie zadziała, spróbuj ponownie uruchomić usługę rancherd-server.
1
systemctl restart rancherd-server.service
Poczekaj chwilę i uruchom ponownie:
Powinno pokazać coś takiego:
1
2
INFO[ 0000] Server URL: https://10.10.0.120:8443
INFO[ 0000] Default admin and password created. Username: admin, Password: bk777mwr69wfgpwvbbk2d52f4mjsj4ssqxqnwstcpzvlc9wnlf59mk
Skopiuj URL i hasło.
Wklej URL do przeglądarki i zaloguj się jako admin z wygenerowanym hasłem.
Zmień hasło na to, którego chcesz używać. System poprosi o to. Pozostaw resztę bez zmian. Zaznacz, że zgadzasz się z warunkami użytkowania.
Nadpisz obraz agenta dla węzłów/klasterów z procesorami ARM. Zobacz wideo
W polu agentimageoverride
API:
dodaj
1
rancher /rancher - agent :v2 .5 .8 - linux - arm64