Kubernetes the hard way lab setup

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Настойка лаборатории для K8s

Касается всех нод

Пакеты

apt -y install mc
apt -y install iw
apt -y install i2c-tools
apt -y install python3-smbus python3-netifaces python3-willow
apt -y install python3-rpi.gpio
apt -y install net-tools
apt -y install frr
apt -y install traceroute
apt -y install jq
apt -y install sysstat
apt -y install iostat-c
apt -y install haproxy
apt -y install socat conntrack ipset bridge-utils

Перенос данных на usb sdd c MicroSD

Так как флешка уже есть, я не хочу возится с загрузкой только с диска, без флешки хотя так тоже сделать можно (но при наличии нескольких дисков работало не очень стабильно)

  • Загрузочный раздел оставляю на флешке
  • Все остальное на диске
  • исправить файл /boot/firmware/cmdline.txt (путь зависит от того куда примонтирован фат-раздел)

Скопировать данные с флешки на диск

time dd if=/dev/mmcblk0 of=/dev/sda
62333952+0 records in
62333952+0 records out
31914983424 bytes (32 GB, 30 GiB) copied, 2113.98 s, 15.1 MB/s

real	35m13.999s
user	2m34.417s
sys	17m26.756s
e2fsck -f /dev/sda2 -y

Изменить метку корневой файловой системы

e2label /dev/sda2 ROOT

Проверить что метка изменилась

blkid
/dev/mmcblk0p1: LABEL_FATBOOT="system-boot" LABEL="system-boot" UUID="D7E2-9D99" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="b0a6845e-01"
/dev/mmcblk0p2: LABEL="writable" UUID="b09bb4c8-de4d-4ce6-a93f-30c4c9241a58" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b0a6845e-02"
/dev/sda1: LABEL_FATBOOT="system-boot" LABEL="system-boot" UUID="D7E2-9D99" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="b0a6845e-01"
/dev/sda2: LABEL="ROOT" UUID="965106aa-3e0a-4e81-bff5-d8916e83092e" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b0a6845e-02"

Изменить метку файловой системы загрузочного раздела

Нужно что бы случайно не смонтировать не тот раздел (диск а не флешку при одинаковой метке) - что сломает например обновление ядра которое должно лежать на загрузочном разделе

fatlabel /dev/sda1 system-ssd
fatlabel: warning - lowercase labels might not work properly on some systems
blkid
/dev/mmcblk0p1: LABEL_FATBOOT="system-boot" LABEL="system-boot" UUID="D7E2-9D99" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="b0a6845e-01"
/dev/mmcblk0p2: LABEL="writable" UUID="b09bb4c8-de4d-4ce6-a93f-30c4c9241a58" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b0a6845e-02"
/dev/sda1: LABEL_FATBOOT="system-ssd" LABEL="system-ssd" UUID="D7E2-9D99" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="b0a6845e-01"
/dev/sda2: LABEL="ROOT" UUID="a464c3b3-826c-48ce-8477-7c1b26d2caa3" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b0a6845e-02"

Указать новые разделы

  • /boot/firmware/cmdline.txt - заменить метку корневой ФС с writable на ROOT
console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash ipv6.disable=1
console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=ROOT rootfstype=ext4 rootwait fixrtc quiet splash ipv6.disable=1
  • /etc/fstab заменить метку рутового раздела (бут - не менять, так как продолжает использоваться флешка)
LABEL=ROOT              /               ext4    discard,errors=remount-ro       0       1
LABEL=system-boot       /boot/firmware  vfat    defaults                        0       1

Проверка результатов

После перезагрузки система сама делает ресайз партиции (подозреваю что это особенность дистрибутива для raspberryPi но так как это поведение меня устраивает этот момент я не разбирал)

fdisk  -l /dev/sda
Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model:
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0xb0a6845e

Device     Boot  Start       End   Sectors   Size Id Type
/dev/sda1  *      2048    526335    524288   256M  c W95 FAT32 (LBA)
/dev/sda2       526336 976773134 976246799 465.5G 83 Linux

Заметка - как менять метки для других файловых систем

Консоль (.bashrc)

HISTSIZE=100000000
HISTFILESIZE=20000000
HISTTIMEFORMAT="%d/%m/%y %T "
alias ll='ls -lsa'
export PS1='\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]$ '
export VAULT_ADDR=http://vault.home:8200

Много где в скриптах я буду опираться на переменную AZ

export AZ=1

(для других нод соответвенно 2 и 3)

Ядро

uname -a
Linux master-az3 5.15.0-1014-raspi #16-Ubuntu SMP PREEMPT Thu Aug 25 09:50:55 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux

Температура и управление вентилятором

В моем случае ноды питаются от Poe HAT, с дополнительным экраном и охлаждением - для управления этой платой есть отдельный проект

Hashicorp Vault

Так-как в моей инсталляции используется Vault что бы упростить себе жизнь с SSL то vault (в роли клиента) понадобиться на всех нодах

wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vault
systemctl disable  vault
vault  version
Vault v1.11.4 (b47a9e72942719f217f7750df18be36ec21dfc0e), built 2022-09-23T06:01:14Z

IPv6

Что делаем: Отключаем IPv6
Зачем:

  1. Лишняя сущность.
  2. Иногда приводит к проблемам (наблюдал как приложение на node по-умолчанию слушало только IPv6)
  • создать файл /etc/sysctl.d/99-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1


RaspberryPi не использует GRUB и править параметры загрузки нужно в другом месте (в случае x86 это настройки grub).

  • файл: /boot/firmware/cmdline.txt
console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash ipv6.disable=1
reboot

Убеждаемся что IPv6 адреса отсутвуют (если они есть то присутвует строка вида inet6 fe80::e65f:1ff:fe30:eccf/64 scope link

ip a s dev eth0.101
6: eth0.101@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e4:5f:01:30:ec:a1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.11.1/30 brd 10.0.11.3 scope global eth0.101
       valid_lft forever preferred_lft forever

unattended-upgrades

dpkg-reconfigure unattended-upgrades
nano /etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
sudo apt-get -y remove unattended-upgrades 
sudo systemctl stop apt-daily.timer 
sudo systemctl disable apt-daily.timer 
sudo systemctl stop apt-daily-upgrade.timer
sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl disable apt-daily.service 
sudo systemctl daemon-reload

Time sync

Установить правильную таймзону

timedatectl set-timezone Europe/Kiev

Настройки сервера NTP получены по DHCP (в моем случае это WiFi так как на остальных интерфейсах адреса статические)

imedatectl show-timesync
LinkNTPServers=192.168.1.223
FallbackNTPServers=ntp.ubuntu.com
ServerName=192.168.1.223
ServerAddress=192.168.1.223
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=34min 8s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-21, RootDelay=6.805ms, RootDispersion=1.312ms, Reference=1F1CA144, OriginateTimestamp=Tue 2022-10-11 11:18:08 EEST, ReceiveTimestamp=Tue 2022-10-11 11:18:08 EEST, TransmitTimestamp=Tue 2022-10-11 11:18:08 EEST, DestinationTimestamp=Tue 2022-10-11 11:18:08 EEST, Ignored=no PacketCount=9, Jitter=5.212ms }
Frequency=-776472

Схема сети

      +--------------+                                                      +---------------------
      | Master 1    eth0                                                    | Catalyst 3560G
      |              |                                                      |
      |             eth0.101 -- 10.0.11.1/30------VLAN101---10.0.11.2/30 ---+
wifi0-+              |                                                      |
      |             eth0.102 -- 10.0.12.1/30------VLAN102---10.0.12.2/30 ---+ Gi 0/43
      |              |                                                      |
      |             eth0.103 -- 10.0.13.1/30------VLAN101---10.0.13.2/30 ---+
      |              |                                                      |
      |              |                                                      |
      +--------------+                                                      | 
                                                                            |                       
      +--------------+                                                      |
      | Master 2    eth0                                                    | 
      |              |                                                      |
      |             eth0.201 -- 10.0.21.1/30------VLAN201---10.0.21.2/30 ---+
wifi0-+              |                                                      |
      |             eth0.202 -- 10.0.22.1/30------VLAN202---10.0.22.2/30 ---+ Gi 0/44
      |              |                                                      |
      |             eth0.203 -- 10.0.23.1/30------VLAN201---10.0.23.2/30 ---+
      |              |                                                      |
      |              |                                                      |
      +--------------+                                                      | 
                                                                            |                       
      +--------------+                                                      |
      | Master 3    eth0                                                    |
      |              |                                                      |
      |             eth0.301 -- 10.0.31.1/30------VLAN301---10.0.31.2/30 ---+
wifi0-+              |                                                      |
      |             eth0.302 -- 10.0.32.1/30------VLAN302---10.0.32.2/30 ---+ Gi 0/45
      |              |                                                      |
      |             eth0.303 -- 10.0.33.1/30------VLAN301---10.0.33.2/30 ---+
      |              |                                                      |
      |              |                                                      |
      +--------------+                                                      +---------------------

WiFi0 используется исключительно для настройки, в процессе работы никакой траффик через него ходить не будет

  • В номерах VLAN для каждой ноды используется номер ноды что бы проще было запомнить
  • Vlan 101, 201, 301 - используется для etcd

Master Nodes

  • Три ноды которые будут играть роль как master так и worker нод
  • Для лучшего понимания для каждого отдельного сервиса будет назначена своя сеть

master1

network:
    ethernets:
        eth0:
            dhcp4: false
            optional: true
    version: 2
    wifis:
        wlan0:
            access-points:
                ssid-name:
                    password: access-point-password
            dhcp4: true
            optional: true
    vlans:
        eth0.101:
            id: 101
            link: eth0
            addresses: [ "10.0.11.1/30"]
        eth0.102:
            id: 102
            link: eth0
            addresses: [ "10.0.12.1/30"]
        eth0.103:
            id: 103
            link: eth0
            addresses: [ "10.0.13.1/30"]

frr version 8.1
frr defaults traditional
hostname master-az1
log syslog informational
no ipv6 forwarding
service integrated-vtysh-config
!
ip route 10.0.21.0/30 10.0.11.2
ip route 10.0.22.0/30 10.0.12.2
ip route 10.0.23.0/30 10.0.13.2
ip route 10.0.31.0/30 10.0.11.2
ip route 10.0.32.0/30 10.0.12.2
ip route 10.0.33.0/30 10.0.13.2
!
end

master2

network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
        wlan0:
            access-points:
                ssid-name:
                    password: access-point-password
            dhcp4: true
            optional: true
    vlans:
        eth0.201:
            id: 201
            link: eth0
            addresses: [ "10.0.21.1/30"]
        eth0.202:
            id: 202
            link: eth0
            addresses: [ "10.0.22.1/30"]
        eth0.203:
            id: 203
            link: eth0
            addresses: [ "10.0.23.1/30"]

frr version 8.1
frr defaults traditional
hostname master-az2
log syslog informational
no ipv6 forwarding
service integrated-vtysh-config
!
ip route 10.0.11.0/30 10.0.21.2
ip route 10.0.12.0/30 10.0.22.2
ip route 10.0.13.0/30 10.0.23.2
ip route 10.0.31.0/30 10.0.21.2
ip route 10.0.32.0/30 10.0.22.2
ip route 10.0.33.0/30 10.0.23.2
!
end

master3

network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
        wlan0:
            access-points:
                ssid-name:
                    password: access-point-password
            dhcp4: true
            optional: true
    vlans:
        eth0.301:
            id: 301
            link: eth0
            addresses: [ "10.0.31.1/30"]
        eth0.302:
            id: 302
            link: eth0
            addresses: [ "10.0.32.1/30"]
        eth0.303:
            id: 303
            link: eth0
            addresses: [ "10.0.33.1/30"]

frr version 8.1
frr defaults traditional
hostname master-az3
log syslog informational
no ipv6 forwarding
service integrated-vtysh-config
!
ip route 10.0.11.0/30 10.0.31.2
ip route 10.0.12.0/30 10.0.32.2
ip route 10.0.13.0/30 10.0.33.2
ip route 10.0.21.0/30 10.0.31.2
ip route 10.0.22.0/30 10.0.32.2
ip route 10.0.23.0/30 10.0.33.2
!
end

Worker Nodes

Catalyst 3550G



vlan 101
 name etcd-az1-k8s-cluster0-home
 mtu 9000
 exit
!
vlan 201
 name etcd-az2-k8s-cluster0-home
 mtu 9000
 exit
!
vlan 301
 name etcd-az3-k8s-cluster0-home
 mtu 9000
 exit
!
vlan 102
 mtu 9000
!
vlan 202
 mtu 9000
!
vlan 302
 mtu 9000
!
vlan 103
 mtu 9000
!
vlan 203
 mtu 9000
!
vlan 303
 mtu 9000
!


 vrf definition k8s-cluster0
 description Cluster 0
 rd 65532:101010



no interface Vlan101
interface Vlan101
 description master-az1-etcd
 vrf forwarding k8s-cluster0
 ip address 10.0.11.2 255.255.255.252
exit
!
no interface Vlan102
interface Vlan102
 vrf forwarding k8s-cluster0
 ip address 10.0.12.2 255.255.255.252
exit

no interface Vlan103
interface Vlan103
 vrf forwarding k8s-cluster0
 ip address 10.0.13.2 255.255.255.252
exit
!
!

no interface Vlan201!
interface Vlan201
 description master-az2-etcd
 vrf forwarding k8s-cluster0
 ip address 10.0.21.2 255.255.255.252
exit
!
no interface Vlan202
interface Vlan202
 vrf forwarding k8s-cluster0
 ip address 10.0.22.2 255.255.255.252
exit
!
no interface Vlan203
interface Vlan203
 vrf forwarding k8s-cluster0
 ip address 10.0.23.2 255.255.255.252
exit
!
!
!
!
no interface Vlan301
interface Vlan301
 description master-az2-etcd
 vrf forwarding k8s-cluster0
 ip address 10.0.31.2 255.255.255.252
exit
!
no interface Vlan302
interface Vlan302
 vrf forwarding k8s-cluster0
 ip address 10.0.32.2 255.255.255.252
exit
!
no interface Vlan303
interface Vlan303
 vrf forwarding k8s-cluster0
 ip address 10.0.33.2 255.255.255.252
exit
!
!
!
!
Current configuration : 247 bytes
!
interface GigabitEthernet0/43
 description master-az1.k8s.cluster0.home
 switchport trunk encapsulation dot1q
 switchport trunk native vlan 2003
 switchport trunk allowed vlan 101-103
 switchport mode trunk
 spanning-tree bpdufilter enable
exit
!
interface GigabitEthernet0/44
 description master-az2.k8s.cluster0.home
 switchport access vlan 2002
 switchport trunk encapsulation dot1q
 switchport trunk native vlan 2002
 switchport trunk allowed vlan 201-203
 switchport mode trunk
 spanning-tree bpdufilter enable
exit
!
interface GigabitEthernet0/45
 description master-az3.k8s.cluster0.home
 switchport access vlan 2001
 switchport trunk encapsulation dot1q
 switchport trunk native vlan 2001
 switchport trunk allowed vlan 301-303
 switchport mode trunk
 spanning-tree bpdufilter enable
exit