Kubernetes the hard way lab setup: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показано 36 промежуточных версий этого же участника) | |||
Строка 2: | Строка 2: | ||
[[Категория:Linux]] |
[[Категория:Linux]] |
||
[[Категория:Cisco]] |
[[Категория:Cisco]] |
||
+ | [[Категория:Kubernetes the hard way v2]] |
||
=Настойка лаборатории для K8s= |
=Настойка лаборатории для K8s= |
||
Строка 7: | Строка 8: | ||
* Hardware: RaspberryPi 4, 8GB |
* Hardware: RaspberryPi 4, 8GB |
||
* OS: Ubuntu 22.04 |
* OS: Ubuntu 22.04 |
||
+ | ** Установка: https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#1-overview (можно не читать - ничего особенного, похоже на любой другой дистрибутив на microsd для raspberry) |
||
==Пакеты== |
==Пакеты== |
||
<PRE> |
<PRE> |
||
Строка 16: | Строка 18: | ||
apt -y install net-tools |
apt -y install net-tools |
||
apt -y install frr |
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 |
||
</PRE> |
</PRE> |
||
+ | |||
+ | ==Перенос данных на usb sdd c MicroSD== |
||
+ | Так как флешка уже есть, я не хочу возится с загрузкой только с диска, без флешки хотя так тоже сделать можно (но при наличии нескольких дисков работало не очень стабильно) |
||
+ | <br> |
||
+ | * Загрузочный раздел оставляю на флешке |
||
+ | * Все остальное на диске |
||
+ | * исправить файл <code>/boot/firmware/cmdline.txt</code> (путь зависит от того куда примонтирован фат-раздел) |
||
+ | ===Скопировать данные с флешки на диск=== |
||
+ | <PRE> |
||
+ | time dd if=/dev/mmcblk0 of=/dev/sda |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | e2fsck -f /dev/sda2 -y |
||
+ | </PRE> |
||
+ | |||
+ | ===Изменить метку корневой файловой системы=== |
||
+ | <PRE> |
||
+ | e2label /dev/sda2 ROOT |
||
+ | </PRE> |
||
+ | Проверить что метка изменилась |
||
+ | <PRE> |
||
+ | blkid |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | /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" |
||
+ | </PRE> |
||
+ | ===Изменить метку файловой системы загрузочного раздела=== |
||
+ | Нужно что бы случайно не смонтировать не тот раздел (диск а не флешку при одинаковой метке) - что сломает например обновление ядра которое должно лежать на загрузочном разделе |
||
+ | <PRE> |
||
+ | fatlabel /dev/sda1 system-ssd |
||
+ | fatlabel: warning - lowercase labels might not work properly on some systems |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | blkid |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | /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" |
||
+ | </PRE> |
||
+ | ===Указать новые разделы=== |
||
+ | * <code>/boot/firmware/cmdline.txt</code> - заменить метку корневой ФС с <code> writable</code> на <code>ROOT</code> |
||
+ | <PRE> |
||
+ | console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash ipv6.disable=1 |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=ROOT rootfstype=ext4 rootwait fixrtc quiet splash ipv6.disable=1 |
||
+ | </PRE> |
||
+ | |||
+ | * <code>/etc/fstab</code> заменить метку рутового раздела (бут - не менять, так как продолжает использоваться флешка) |
||
+ | |||
+ | <PRE> |
||
+ | LABEL=ROOT / ext4 discard,errors=remount-ro 0 1 |
||
+ | LABEL=system-boot /boot/firmware vfat defaults 0 1 |
||
+ | </PRE> |
||
+ | ===Проверка результатов=== |
||
+ | После перезагрузки система сама делает ресайз партиции (подозреваю что это особенность дистрибутива для raspberryPi но так как это поведение меня устраивает этот момент я не разбирал) |
||
+ | <PRE> |
||
+ | fdisk -l /dev/sda |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | ===Заметка - как менять метки для других файловых систем=== |
||
+ | {{#spoiler:show=Примеры смены меток на разных файловы| |
||
+ | * for ext2/ext3/ext4 filesystems you use: |
||
+ | <PRE> |
||
+ | e2label /dev/XXX <label> |
||
+ | </PRE> |
||
+ | |||
+ | * for btrfs: |
||
+ | <PRE> |
||
+ | btrfs filesystem label /dev/XXX <label> |
||
+ | </PRE> |
||
+ | |||
+ | * for reiserfs: |
||
+ | <PRE> |
||
+ | reiserfstune -l <label> /dev/XXX |
||
+ | </PRE> |
||
+ | |||
+ | * for jfs: |
||
+ | <PRE> |
||
+ | jfs_tune -L <label> /dev/XXX |
||
+ | </PRE> |
||
+ | |||
+ | * for xfs: |
||
+ | <PRE> |
||
+ | xfs_admin -L <label> /dev/XXX |
||
+ | </PRE> |
||
+ | |||
+ | * for fat/vfat (using dosfstools): |
||
+ | <PRE> |
||
+ | fatlabel /dev/XXX <label> |
||
+ | </PRE> |
||
+ | OR (using mtools): |
||
+ | <PRE> |
||
+ | mlabel -i /dev/XXX ::<label> |
||
+ | </PRE> |
||
+ | |||
+ | * for exfat (you might need to install exfat-utils first): |
||
+ | <PRE> |
||
+ | exfatlabel /dev/XXX <label> |
||
+ | </PRE> |
||
+ | |||
+ | * for ntfs: |
||
+ | <PRE> |
||
+ | ntfslabel /dev/XXX <label> |
||
+ | </PRE> |
||
+ | |||
+ | * for swap (first you need to swapoff): |
||
+ | <PRE> |
||
+ | swaplabel -L <label> /dev/XXX |
||
+ | </PRE> |
||
+ | }} |
||
+ | |||
+ | ==Консоль (.bashrc) == |
||
+ | <PRE> |
||
+ | HISTSIZE=100000000 |
||
+ | HISTFILESIZE=20000000 |
||
+ | HISTTIMEFORMAT="%d/%m/%y %T " |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | alias ll='ls -lsa' |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | export PS1='\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]$ ' |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | export VAULT_ADDR=http://vault.home:8200 |
||
+ | </PRE> |
||
+ | |||
+ | Много где в скриптах я буду опираться на переменную AZ |
||
+ | <PRE> |
||
+ | export AZ=1 |
||
+ | </PRE> |
||
+ | (для других нод соответвенно 2 и 3) |
||
+ | |||
==Ядро== |
==Ядро== |
||
<PRE> |
<PRE> |
||
Строка 24: | Строка 194: | ||
==Температура и управление вентилятором== |
==Температура и управление вентилятором== |
||
+ | В моем случае ноды питаются от Poe HAT, с дополнительным экраном и охлаждением - для управления этой платой есть отдельный проект |
||
+ | |||
* https://github.com/sirmax123/waveshare_poe_hat |
* https://github.com/sirmax123/waveshare_poe_hat |
||
* systemctl enable poe-hat-screen.service |
* systemctl enable poe-hat-screen.service |
||
+ | |||
+ | ==Hashicorp Vault== |
||
+ | |||
+ | Так-как в моей инсталляции используется Vault что бы упростить себе жизнь с SSL то vault (в роли клиента) понадобиться на всех нодах |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | vault version |
||
+ | Vault v1.11.4 (b47a9e72942719f217f7750df18be36ec21dfc0e), built 2022-09-23T06:01:14Z |
||
+ | </PRE> |
||
+ | |||
+ | ==IPv6== |
||
+ | |||
+ | '''Что делаем: ''' Отключаем IPv6<BR> |
||
+ | '''Зачем:''' |
||
+ | # Лишняя сущность. |
||
+ | # Иногда приводит к проблемам (наблюдал как приложение на node по-умолчанию слушало только IPv6) |
||
+ | |||
+ | * создать файл '''/etc/sysctl.d/99-disable-ipv6.conf''' |
||
+ | |||
+ | <PRE> |
||
+ | net.ipv6.conf.all.disable_ipv6 = 1 |
||
+ | net.ipv6.conf.default.disable_ipv6 = 1 |
||
+ | </PRE> |
||
+ | <br> |
||
+ | RaspberryPi не использует GRUB и править параметры загрузки нужно в другом месте (в случае x86 это настройки grub). |
||
+ | * файл: '''/boot/firmware/cmdline.txt''' |
||
+ | <PRE> |
||
+ | console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash ipv6.disable=1 |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | reboot |
||
+ | </PRE> |
||
+ | |||
+ | Убеждаемся что IPv6 адреса отсутвуют (если они есть то присутвует строка вида '''inet6 fe80::e65f:1ff:fe30:eccf/64 scope link''' |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
==unattended-upgrades== |
==unattended-upgrades== |
||
Строка 31: | Строка 251: | ||
dpkg-reconfigure unattended-upgrades |
dpkg-reconfigure unattended-upgrades |
||
</PRE> |
</PRE> |
||
+ | |||
<PRE> |
<PRE> |
||
nano /etc/apt/apt.conf.d/20auto-upgrades |
nano /etc/apt/apt.conf.d/20auto-upgrades |
||
Строка 38: | Строка 259: | ||
APT::Periodic::Update-Package-Lists "0"; |
APT::Periodic::Update-Package-Lists "0"; |
||
APT::Periodic::Unattended-Upgrade "0"; |
APT::Periodic::Unattended-Upgrade "0"; |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | ==Time sync== |
||
+ | Установить правильную таймзону |
||
+ | <PRE> |
||
+ | timedatectl set-timezone Europe/Kiev |
||
+ | </PRE> |
||
+ | Настройки сервера NTP получены по DHCP (в моем случае это WiFi так как на остальных интерфейсах адреса статические) |
||
+ | <PRE> |
||
+ | 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 |
||
</PRE> |
</PRE> |
||
Строка 236: | Строка 487: | ||
=Worker Nodes= |
=Worker Nodes= |
||
=Catalyst 3550G= |
=Catalyst 3550G= |
||
+ | <PRE> |
||
+ | |||
+ | |||
+ | 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 |
||
+ | </PRE> |
Текущая версия на 12:51, 27 января 2024
Настойка лаборатории для K8s
Касается всех нод
- Hardware: RaspberryPi 4, 8GB
- OS: Ubuntu 22.04
- Установка: https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#1-overview (можно не читать - ничего особенного, похоже на любой другой дистрибутив на microsd для raspberry)
Пакеты
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, с дополнительным экраном и охлаждением - для управления этой платой есть отдельный проект
- https://github.com/sirmax123/waveshare_poe_hat
- systemctl enable poe-hat-screen.service
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
Зачем:
- Лишняя сущность.
- Иногда приводит к проблемам (наблюдал как приложение на 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