ZFS -Zbiorcze usuwanie snapshotów

Chcemy usunąć snapshoty, które w nazwie mają „test” z sierpnia 2024

Listujemy, które snapshoty zostaną usunięte:
# zfs list -t snapshot -H -o name | grep "test.*2024-08" | xargs -n1 echo
Usuwamy
# zfs list -t snapshot -H -o name | grep "test.*2024-08" | xargs -n1 zfs destroy

K3s – Wygaśnięte certyfikaty

Wygasłe certyfikaty powinny się odnowić przy ponownym uruchomieniu k3s:

# systemctl restart k3s

Jeżeli certyfikaty się nie odnowią i widzimy komunikat:

# kubectl get nodes
Unable to connect to the server: x509: certificate has expired or is not yet valid

Możemy wymusić wygenerowanie nowych.
Zabezpieczamy katalog z dotychczasowymi sekretami TLS

# tar -czvf /var/lib/rancher/k3s/server/apphost-cert.tar.gz /var/lib/rancher/k3s/server/tls

Usuwamy plik

# rm /var/lib/rancher/k3s/server/tls/dynamic-cert.json

Usuwamy zbuforowany certyfikat z sekretów kubernetes

# kubectl --insecure-skip-tls-verify=true delete secret -n kube-system k3s-serving

Uruchamiamy ponownie usługę K3s, aby odnowić certyfikaty

# systemctl restart k3s

Kubernetes – Tworzenie obiektu configmap na podstawie dowolnego pliku

Możemy stworzyć configmapę na podstawie dowolnego pliku. W naszym przypadku bedzie to plik appsettings.json.

$ kubectl create configmap ares-api-config --from-file=Configuration/appsettings.json -n test

Ta metoda nie pozwoli nam zaktualizować configmapy bez jej usunięcia z klastra. Aby rozwiązać ten problem możemy najpierw utworzyć na podstawie naszego pliku appsettings.json plik yaml, następnie go zaaplikować. Gdy będziemy chcieli zmienić obiekt configmap w klastrze to powtarzamy ten proces.

$ kubectl create configmap ares-api-config --from-file=Configuration/appsettings.json -n test --dry-run=client -o yaml > configmap.yaml
$ kubectl apply -f configmap.yaml -n test

Testowanie połączenia ssl/tls za pomocą openssl

Gdy potrzebujemy przetestować przebieg połączenie ssl z serwerem http, poczty lub innym wykorzystującym protokół ssl/tls, możemy spróbować połączyć się z serwerem używając openssl w trybie klienta.

# openssl s_client -connect google.com:443

CONNECTED(00000003)                                                                                                                                                                                                                                                                                                                                   
depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1                                                                                                                                                                                                                                                                                       
verify return:1                                                                                                                                                                                                                                                                                                                                       
depth=1 C = US, O = Google Trust Services, CN = WR2                                                                                                                                                                                                                                                                                                   
verify return:1                                                                                                                                                                                                                                                                                                                                       
depth=0 CN = *.google.com                                                                                                                                                                                                                                                                                                                             
verify return:1                                                                                                                                                                                                                                                                                                                                       
---                                                                                                                                                                                                                                                                                                                                                   
Certificate chain                                                                                                                                                                                                                                                                                                                                     
 0 s:CN = *.google.com                                                                                                                                                                                                                                                                                                                                
   i:C = US, O = Google Trust Services, CN = WR2                                                                                                                                                                                                                                                                                                      
   a:PKEY: id-ecPublicKey, 256 (bit); sigalg: RSA-SHA256                                                                                                                                                                                                                                                                                              
   v:NotBefore: Jun  3 06:35:38 2024 GMT; NotAfter: Aug 26 06:35:37 2024 GMT                                                                                                                                                                                                                                                                          
 1 s:C = US, O = Google Trust Services, CN = WR2                                                                                                                                                                                                                                                                                                      
   i:C = US, O = Google Trust Services LLC, CN = GTS Root R1                                                                                                                                                                                                                                                                                          
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256                                                                                                                                                                                                                                                                                              
   v:NotBefore: Dec 13 09:00:00 2023 GMT; NotAfter: Feb 20 14:00:00 2029 GMT                                                                                                                                                                                                                                                                          
 2 s:C = US, O = Google Trust Services LLC, CN = GTS Root R1                                                                                                                                                                                                                                                                                          
   i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA                                                                                                                                                                                                                                                                              
   a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256                                                                                                                                                                                                                                                                                              
   v:NotBefore: Jun 19 00:00:42 2020 GMT; NotAfter: Jan 28 00:00:42 2028 GMT                                                                                                                                                                                                                                                                          
---                                                                                                                                                                                                                                                                                                                                                   
Server certificate                                                                                                                                                                                                                                                                                                                                    
-----BEGIN CERTIFICATE-----                                                  
MIIOTTCCDTWgAwIBAgIQag+0Dl9hY5UKDMPiKzcGqDANBgkqhkiG9w0BAQsFADA7             
MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZpY2VzMQww
. . . . .

W wyniku polecenia zobaczymy cały przebieg połączenia który może ułątwić nam identyfikację problemów z certyfikatami

Gdy chemy sprawdzić start tls smtp do do polecenia dodajemy parametr -starttls smtp lub -starttls ftp

Kubernetes – rke2 upgrade

Najpierw aktualizujemy nody Master następnie workery. Aktualizujemy do najnowszej wersji pomocniczej (minor) następnie do najnowszej następnej wersji minor
1.27.7 -> 1.27.11 -> 1.28.11 -> 1.29.5
Dostępne wersje możemy sprawdzić na stronie https://github.com/rancher/rke2/releases

Automatyczna aktualizacja

Na podstawie https://docs.rke2.io/upgrade/automated_upgrade

Przygotowanie komponentów

Instalacja system-upgrade-controller. (Sprawdzić czy nie ma nowej wersji) https://github.com/rancher/system-upgrade-controller/releases

W url podmieniamy xxxxxxx na aktualny numer wersji np” v0.13.4

# kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/download/xxxxxxx/system-upgrade-controller.yaml

Przygotować plan aktualizacji osobno dla nodów master i worker

# cd /opt/kubernetes/auto-upgarde
# nano upgrade_plan.yaml

# Server plan
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
  name: server-plan
  namespace: system-upgrade
  labels:
    rke2-upgrade: server
spec:
  concurrency: 1
  nodeSelector:
    matchExpressions:
       - {key: rke2-upgrade, operator: Exists}
       - {key: rke2-upgrade, operator: NotIn, values: ["disabled", "false"]}
       # When using k8s version 1.19 or older, swap control-plane with master
       - {key: node-role.kubernetes.io/control-plane, operator: In, values: ["true"]}
  tolerations:
  - key: "CriticalAddonsOnly"
    operator: "Equal"
    value: "true"
    effect: "NoExecute"
  serviceAccountName: system-upgrade
  cordon: true
#  drain:
#    force: true
  upgrade:
    image: rancher/rke2-upgrade
  version: v1.27.7-rke2r2
---
# Agent plan
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
  name: agent-plan
  namespace: system-upgrade
  labels:
    rke2-upgrade: agent
spec:
  concurrency: 1
  nodeSelector:
    matchExpressions:
      - {key: rke2-upgrade, operator: Exists}
      - {key: rke2-upgrade, operator: NotIn, values: ["disabled", "false"]}
      # When using k8s version 1.19 or older, swap control-plane with master
      - {key: node-role.kubernetes.io/control-plane, operator: NotIn, values: ["true"]}
  prepare:
    args:
    - prepare
    - server-plan
    image: rancher/rke2-upgrade
  serviceAccountName: system-upgrade
  cordon: true
  drain:
    force: true
  upgrade:
    image: rancher/rke2-upgrade
  version: v1.27.7-rke2r2

Dodajemy etykiety do wszystkich nodów

# kubectl label node --all rke2-upgrade=true

Upgrade klastra

Sprawdzamy aktualną wersję

# kubectl get nodes

Zmieniamy w upgrade_plan.yaml version pilnując ścieżki upgrade i aplikujemy nowy plan

# kubectl apply -f upgrade_plan.yaml

Zaraz po aplikacji nowego plany rozpocznie sie upgrade klastra

Możemy sprawdzić działanie

# kubectl -n system-upgrade get plans -o yaml
# kubectl -n system-upgrade get jobs -o yaml
# kubectl get nodes

Mialem przypadek, że jeden z nodów nie chał się zaktualizować automatycznie. Aby rozwiązać problem skasowałem plan i wykonałem aktualizacje ręczną tego noda.

# kubectl delete -f upgrade_plan.yaml

Zdarzyło mi się, że po aktualizacji ręcznej system nadal cały czas próbuje go zaktualizować blokując noda. Aby usunąć problem odczytałem z innego noda label „plan.upgrade.cattle.io/agent-plan” i nadpisałem label w problematycznym nodzie.

# kubectl get node NODE-NAME-OK -o yaml
...
metadata:
  labels:
    plan.upgrade.cattle.io/agent-plan: xxxxxxxx
...

# kubectl label node NODE-NAME-PROBLEM plan.upgrade.cattle.io/server-plan=xxxxxxxx --overwrite

lub w przypadku workera

# kubectl label node NODE-NAME-PROBLEM plan.upgrade.cattle.io/agent-plan=xxxxxxxx --overwrite

# kubectl uncordon k8s-worker02

Ręczna aktualizacja

Na każdym nodzie MASTER uruchamiamy

# kubectl cordon NODE-NAME -  zapobiega uruchomieniu nowych podów
# kubectl drain --ignore-daemonsets NODE-NAME - migruje pody zwalniając noda
# curl -sfL https://get.rke2.io/ | INSTALL_RKE2_VERSION=v1.27.12+rke2r1 sh -
# systemctl restart rke2-server
# kubectl uncordon NODE-NAME

Na każdym workerze

# kubectl cordon NODE-NAME
# kubectl drain --ignore-daemonsets NODE-NAME
# curl -sfL https://get.rke2.io/ | INSTALL_RKE2_TYPE="agent" INSTALL_RKE2_VERSION=v1.27.12+rke2r1 sh -
# systemctl restart rke2-agent
# kubectl uncordon NODE-NAME

Samba – zarządzanie użytkownikami i polityką haseł

Sprawdzenie domyślnej polityki haseł

# samba-tool domain passwordsettings show

Ustawienie domyślnej polityki haseł

# samba-tool domain passwordsettings set --complexity=on --store-plaintext=off --history-length=12 --min-pwd-length=8 --min-pwd-age=0 --max-pwd-age=30 --account-lockout-duration=30 --account-lockout-threshold=10 --reset-account-lockout-after=15

Lista użytkowników

# samba-tool user list

Informacje o użytkowniku

# samba-tool user show <username>

Dziedziczenie w linuxie grupy i uprawnień z katalogu nadrzędnego

Aby w linuxie nowo utworzony plik lub folder dziedziczył przynależność do grupy z katalogu nadrzędnego wydajemy polecenie:

# chmod g+s /katalog_nadrzedny

lub na całym drzewie katalogów

# find /katalog_nadrzedny -type d -exec chmod g+s {} \;

Aby nowo utworzony plik lub katalog dziedziczył uprawnienia do grupy wydajemy polecenie

# setfacl -R -d -m g::rwx /katalog_nadrzedny

tmux – polecenia

Sesje

tmux ls – lista sesji
tmux a -t 0..9 – (attach to session terminal 0) podłączenie do sesji o podanym numerze
tmux kill-ses -t 0..9 – zamknięcie sesji o podanym numerze
ctrl + b d – (detach) odłączenie od sesji
ctrl + b s – lista sesji

Okna

ctrl + b c – dodanie nowego okna
ctrl + b n – przełączenie do następnego okna
ctrl + b p – przełączenie do poprzedniego okna
ctrl + b 0..9 – przełączenie do okna o podanym numerze
ctrl + b w – lista okien
ctrl + b & – zamknięcie okna

Szyby

ctrl + b % – dodanie do okna pionowej szyby
ctrl + b „ – dodanie do okna poziomej szyby
ctrl + d – zamknięcie aktywnej szyby . Jeżeli to ostatna szyba to całe okno lub sesja zostanie zamknięta.
ctrl + b ctrl + strzałki – zmiana wielkości aktywnej szyby
ctrl + b q – wyświetla numery szyb
ctrl + b q 0..9 – przełączenie do szyby numer
ctrl + b strzałki – przełączenie między szybami
ctrl + b x – zamknięcie aktualnej szyby

Copy mode

ctrl + b ] – Wejście w tryb Copy
ctrl + b PgUp – Wejście w tryb Copy i przesunięcie ekranu o jedną stronę do góry
strzałki, PgUp, PgDown – Przesunięcie ekranu
ctrl +b q – Wyjście z trybu Copy
ctrl + b : set mouse on – Włączenie obsługi myszy

Zapis zawartości szyby do pliku

ctrl + b : capture-pane -S -3000 – stworzenie bufora z ostanich 3000 linijek
ctrl + b : save-buffer buf.txt – zapisanie całego buffora w pliku buff.txt w katalogu domowym.

Jeżeli damy ctrl + b : i zaczniemy pisać komędę, to klawiszem tab mamy podpowiedzi

ctrl + b ? – pomoc

Linux – restart urządzenie pci

Linux udostępnia funkcję wyłączenia urządzenia pci na poziomie funkcji w postaci plików.

Identyfikujemy urządzenie:

# lspci -D | grep -i network
0000:01:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
0000:01:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
0000:09:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
0000:09:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)

Teraz wyłączamy urządzenie o wybranym adresie np „01:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network” :

# echo "1" > /sys/bus/pci/devices/0000\:01:00.0/remove

Po przerwie mini 1s robimy rescan aby włączyć:

# echo "1" > /sys/bus/pci/rescan

Drugą metodą jest wykonanie resetu

# echo "1" > /sys/bus/pci/devices/0000\:01:00.0/reset

Linux – Network Manager – dodanie tls-cipher do konfiguracji VPN

Aplet GUI do Network Managere nie obsługuje właściwości tls-cipher. Dodamy go narzędziem lini poleceń nmcli.

Wyszukujemy interesującą nas nazwę profilu vpn.

$ nmcli connection show

. . . . 
POLACZENIE1            xxxxx-xxxxxx  vpn       
. . . .

Dodajemy tls-cipher.

$ nmcli connection edit POLACZENIE1

nmcli> set vpn.data tls-cipher = DEFAULT:@SECLEVEL=0
nmcli> save
nmcli> quit

Jeżeli później będziemy edytować ten profil za pomocą narzędzia w GUI to musimy powtórzyć tą operację, gdyż właściwość ta zostanie usunięta.