автор:Блог операций SRE
адрес блога:www.cnsre.cn/
Адрес статьи:Уухуууууууууууууууууууууууууууууууууууууууууууууууууууууууутутутки11111111
Похожие темы:www.cnsre.cn/tags/k3s/
В Double Eleven приняли участие несколько производителей облачных вычислений.Вначале я построил автономную версию k3s.Потом я задумался, смогу ли я построить кластер k3s, и тогда я сослался на этого крупного парня.статья, попробуйте использовать WireGuard для сети. Он легкий, удобный и эффективный, а данные шифруются и передаются на протяжении всего процесса — отличный выбор для построения виртуальной локальной сети с опорой на общедоступную сеть.
Введение в окружающую среду
Введение сервера
| поставщики облачных услуг | Общедоступный IP-адрес | IP-адрес интрасети | IP-адрес виртуальной сети | Операционная система | версия ядра |
|---|---|---|---|---|---|
| Тенсент Облако 1 | 42.xx.xx.12 | 10.0.16.8 | 192.168.1.1 | CentOS Linux release 7.9.2009 (Core) | 5.15.2-1 |
| Тенсент Облако 2 | 122.xx.xxx.111 | 10.0.0.6 | 192.168.1.2 | CentOS Linux release 7.9.2009 (Core) | 5.15.2-1 |
| Али Клауд | 122.xx.xx.155 | 172.17.0.3 | 192.168.1.3 | CentOS Linux release 7.9.2009 (Core) | 5.15.2-1 |
Подготовка перед строительством
построение кросс-облакаk3sПеред кластеризацией нам нужно поставитьWireGuardустановлен,WireGuardСуществуют требования к ядру, поэтому ядро необходимо обновить до5.15.2-1.el7.elrepo.x86_64
Включите переадресацию IP-адресов на всех узлах:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
Все узлы позволяют изменять имя хоста
# 腾讯云1执行
hostnamectl set-hostname k3s-master
# 腾讯云2执行
hostnamectl set-hostname k3s-node1
# 阿里云执行
hostnamectl set-hostname k3s-node2
обновить ядро
Ядром по умолчанию для нескольких серверов является3.10установкаWireGuardНужно обновить ядро до более высокой версии.
Перед обновлением ядра
Сначала обновите пакеты (не обязательно)
yum update -y
Добавьте правило iptables, чтобы разрешить встроенную трансляцию NAT:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -o eth0 -j MASQUERADE
Уведомление:
wg0: виртуальная сетевая карта, определенная для вас
192.168.1.1: для вашего сегмента виртуального IP-адреса
eth0: для вашей физической сетевой карты
обновить ядро
Все узлы должны выполняться
метод 1:
Загрузите пакет RPM непосредственно для установки.
Если вы хотите установить другие ядра, вы также можете установитьСкачать здесь
wget http://ftp.sjtu.edu.cn/sites/elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-5.15.2-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-ml-5.15.2-1.el7.elrepo.x86_64.rpm
Способ 2:
Обновление с помощью инструментов управления пакетами
# 载入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 升级安装 elrepo
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm
# 载入 elrepo-kernel 元数据
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
# 安装最新版本的内核
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-ml.x86_64 -y
# 删除旧版本工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
Способ 3:
Скомпилируйте и установите из исходного пакета.
Этот метод очень настраиваемый, но он также более сложный.При необходимости вы можете найти информацию и установить его самостоятельно.Ниже приводится только исходный пакет ядра для каждой версии системы.ссылка для скачивания
Изменить версию ядра по умолчанию
# 查看当前实际启动顺序
grub2-editenv list
# 查看内核插入顺序
grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
# 设置默认启动
grub2-set-default 'CentOS Linux (5.15.2-1.el7.elrepo.x86_64) 7 (Core)'
# 重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启服务器
reboot
# 验证当前内核版本
uname -r
Уведомление:
Версия ядра должна быть относительно высокой, иначе запуститсяWireGuardсообщит об ошибке.
[#] ip link add wg0 type wireguard
RTNETLINK answers: Operation not supported
Unable to access interface: Protocol not supported
[#] ip link delete dev wg0
Cannot find device "wg0"
Установить WireGuard
Все узлы выполняются
Процесс установки очень прост, здесь я напрямую обновляю ядро CentOS до последней версии 5.15.2, которая уже содержитWireGuardМодуль ядра, просто нужно установитьwireguard-toolsэтоyumПакет подойдет.
yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum install yum-plugin-elrepo kmod-wireguard wireguard-tools -y
Настроить WireGuard
wireguard-toolsпакет предоставляет инструменты, которые нам нужныwgиwg-quick, который можно использовать для ручного и автоматического развертывания соответственно.
Сначала сгенерируйте по форме, описанной в официальной документации腾讯云1ключ для шифрования и дешифрования
wg genkey | tee privatekey | wg pubkey > publickey
Затем он будет сгенерирован в текущем каталогеprivatekeyиpublickeyдва файла
Уведомление:
Ключ настроен на локальную машину, а открытый ключ настроен на другие машины.
cat privatekey publickey
EMWcI01iqM4zkb7xfbaaxxxxxxxxDo2GJUA=
0ay8WfGOIHndWklSIVBqrsp5LDWxxxxxxxxxxxxxxQ=
Теперь нам нужна одноранговая сеть с указанными выше хостами.腾讯云2 阿里云, его общедоступный IP-адрес (здесь необходимо указать IP-адрес, который может связываться с хостом)122.xx.xxx.111,122.xx.xx.155
Сначала мы устанавливаем в соответствии с вышеуказанным процессомWireGuardи генерировать хорошие腾讯云2 阿里云ключ.
затем написать腾讯云1полный файл конфигурации дляwg-quickиспользовать на хосте A/etc/wireguard/wg0.confнаписать в
[Interface]
PrivateKey = EMWcI01iqM4zkb7xfbaaxxxxxxxxDo2GJUA=
Address = 192.168.1.1
ListenPort = 5418
[Peer]
PublicKey = 腾讯云2 publickey
EndPoint = 122.xx.xxx.111:5418
AllowedIPs = 192.168.1.2/32
[Peer]
PublicKey = 阿里云publickey
EndPoint = 122.xx.xx.155:5418
AllowedIPs = 192.168.1.3/32
Инструкции по настройке
Interface: подраздел принадлежит腾讯云1(то есть локальная машина).
Address: присваивается腾讯云1виртуальный IP,
ListenPort: порт используется для связи между хостами, даUDPсоглашение.
Peer: Это относится к потребности в общении腾讯云2,阿里云 информацию, добавьте столько хостов, сколько вам нужно для связиPeerподраздел.
EndPoint: Да腾讯云2,阿里云Публичный IP иWireGuardмониторUDPпорт, этоIPНе обязательно сеть общего пользования,
Уведомление
Если ваш компьютер также может обмениваться данными через интрасеть, используйте интрасеть напрямую.IPМожно, конечно, обратить на это вниманиеIPВсе хосты в локальной сети должны иметь возможность обмениваться данными.
AllowedIPs: указывает, с какими IP-адресами локальный компьютер инициирует соединение, чтобы перенаправлять трафик на этот узел. Например, мы назначаем IP-адрес интрасети хосту B.192.168.1.2, затем на хосте A отправляется192.168.1.2пакеты должны быть отправлены на этотEndPointОн фактически действует как фильтр. и несколькоPeer, настроено здесьIPАдреса не могут конфликтовать.
производится каждым узломprivatekeyиpublickeyсоответственно следующим образом
# master 节点
[root@k3s-master ~]# cat privatekey publickey
EMWcI01iqM4zkb7xfbaaxxxxxxxxDo2GJUA=
0ay8WfGOIHndWklSIVBqrsp5LDWxxxxxxxxxxxxxxQ=
# node1 节点
[root@k3s-node1 ~]# cat privatekey publickey
QGdNkzpnIkuvUU+00C6XYxxxxxxxxxK0D82qJVc=
3izpVbZgPhlM+S5szOogTDTxxxxxxxxxuKuDGn4=
# node2 节点
[root@k3s-node2 ~]# cat privatekey publickey
WOOObkWINkW/hqaAME9r+xxxxxxxxxm+r2Q=
0f0dn60+tBUfYgzw7rIihKbqxxxxxxxxa6Wo=
Файлы конфигурации каждого узла следующие:
# master 节点
cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = EMWcI01iqM4zkb7xfbaaxxxxxxxxDo2GJUA=
Address = 192.168.1.1
ListenPort = 5418
[Peer]
PublicKey = 3izpVbZgPhlM+S5szOogTDTxxxxxxxxxuKuDGn4=
EndPoint = 122.xx.xxx.111:5418
AllowedIPs = 192.168.1.2/32
[Peer]
PublicKey = 0f0dn60+tBUfYgzw7rIihKbqxxxxxxxxa6Wo=
EndPoint = 122.xx.xx.155:5418
AllowedIPs = 192.168.1.3/32
# node1 节点
cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = QGdNkzpnIkuvUU+00C6XYxxxxxxxxxK0D82qJVc=
Address = 192.168.1.2
ListenPort = 5418
[Peer]
PublicKey = 0ay8WfGOIHndWklSIVBqrsp5LDWxxxxxxxxxxxxxxQ=
EndPoint = 42.xx.xx.12:5418
AllowedIPs = 192.168.1.1/32
[Peer]
PublicKey = 0f0dn60+tBUfYgzw7rIihKbqxxxxxxxxa6Wo=
EndPoint = 122.xx.xx.155:5418
AllowedIPs = 192.168.1.3/32
# node2 节点
cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = WOOObkWINkW/hqaAME9r+xxxxxxxxxm+r2Q=
Address = 192.168.1.3
ListenPort = 5418
[Peer]
PublicKey = 0ay8WfGOIHndWklSIVBqrsp5LDWxxxxxxxxxxxxxxQ=
EndPoint = 42.xx.xx.12:5418
AllowedIPs = 192.168.1.1/32
[Peer]
PublicKey = 3izpVbZgPhlM+S5szOogTDTxxxxxxxxxuKuDGn4=
EndPoint = 122.xx.xx.155:5418
AllowedIPs = 192.168.1.2/32
Запустить WireGuard
После того, как файл конфигурации написан, используйтеwg-quickинструменты для создания виртуальных сетевых карт,
wg-quick up wg0
в приведенной выше командеwg0соответствует/etc/wireguard/wg0.confЭтот файл конфигурации, автоматически созданное устройство сетевой карты, называется wg0, и соответствующие отношения не требуют пояснений.
будет腾讯云2,阿里云 После того, как устройства сетевой карты установлены и настроены, вы можете использоватьwgКоманда для наблюдения за сетевой ситуацией
[root@k3s-master ~]# wg
interface: wg0
public key: 0ay8WfGOIHndWklSIVBqrsp5LDWxxxxxxxxxxxxxxQ=
private key: (hidden)
listening port: 5418
peer: 0f0dn60+tBUfYgzw7rIihKbqxxxxxxxxa6Wo=
endpoint: 122.xx.xx.155:5418
allowed ips: 192.168.1.3/32
latest handshake: 3 minutes, 3 seconds ago
transfer: 35.40 KiB received, 47.46 KiB sent
peer: 3izpVbZgPhlM+S5szOogTDTxxxxxxxxxuKuDGn4=
endpoint: 122.xx.xxx.111:5418
allowed ips: 192.168.1.2/32
latest handshake: 5 minutes, 6 seconds ago
transfer: 24.84 KiB received, 35.21 KiB sent
Вы можете видеть, что в списке указана информация о одноранговых узлах, а также данные измерения связи. Затем вы можете проверить, нормально ли работает сетевое соединение, отправив эхо-запрос на виртуальный IP-адрес других хостов или отправив ssh-адреса на IP-адреса других хостов.
автоматизация
После перезапуска системыWireGuardСозданное устройство сетевой карты будет потеряно, есть автоматизированный скрипт
systemctl enable wg-quick@wg0
Используйте приведенную выше команду для создания сценария демона systemd, и команда up будет автоматически запускаться при загрузке.
Настроить горячую перезагрузку
wg-quick не дает инструкций, связанных с перегрузкой, но предоставляетstripдиректива для преобразования файлов conf в формат, распознаваемый директивой wg.
wg syncconf wg0 <(wg-quick strip wg0)
Возможна горячая перезагрузка.
ЗаканчиватьWireGuardПосле установки и настройки мы можем установить следующий кластер k3s.
Установить кластер K3S
установка главного узла
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --node-external-ip 42.xx.xx.12 --advertise-address 42.xx.xx.12 --node-ip 192.168.1.1 --flannel-iface wg0
Описание параметра:
-
--node-external-ip 42.xx.xx.12Чтобы установить внешний IP-адрес для узла, внешний IP-адрес Alibaba Cloud VPC не привязан напрямую к сетевой карте виртуальной машины, поэтому мне нужно установить этот параметр, чтобы предотвратить использование компонентом k3s внутреннего IP-адреса в качестве общедоступного IP-адреса при настройке балансировки нагрузки. . -
--advertise-address 42.xx.xx.12Он используется для установки адреса, используемого инструментом kubectl и подузлами для связи, который может быть IP-адресом или доменным именем.Это будет задано как действительный домен при создании сертификата apiserver. -
--node-ip 10.20.30.1Если этот параметр не установлен, будет выбран IP-адрес первой сетевой карты, поэтому этот IP-адрес обычно является IP-адресом интрасети. Но я сам настроил виртуальную локальную сеть, поэтому мне нужно указать IP виртуальной локальной сети (то есть IP WireGuard). -
--flannel-iface wg0wg0 — это устройство сетевой карты, созданное WireGuard.Мне нужно использовать виртуальную локальную сеть для связи между узлами, поэтому здесь нужно указать wg0.
Кроме того, поскольку весь трафик WireGuard шифруется и передается, через него можно обеспечить связь между узлами, поэтому нет необходимости переключаться на другие драйверы CNI, достаточно использовать установленный по умолчанию.
После того, как мастер-узел выполнит приведенную выше команду, вы увидите сценарий, предлагающий завершить установку менее чем за минуту. Проверьте рабочее состояние главного терминала управления с помощью команды
systemctl status k3s
Если он работает нормально, проверьте, нормально ли работает состояние контейнера.
kubectl get pods -A
-AПараметр используется для просмотра всех пространств имен.Если контейнер находится в рабочем состоянии, установка прошла успешно, после чего можно добавить контролируемый узел.
Установка агента
Имея вышеизложенный опыт установки главного управления, проще установить рабочий узел, и параметры необходимо в определенной степени отрегулировать.
Исполнение Tencent Cloud 2
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.1.1:6443 K3S_TOKEN=K10720eda8a278bdc7b9b6d787c9676a92119bb2cf95048d6a3cd85f15717edfbe5::server:e98b986e8202885cb54da1b7e701f67e sh -s - --node-external-ip 122.xx.xxx.111 --node-ip 192.168.1.2 --flannel-iface wg0
Облачное исполнение Alibaba
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.1.1:6443 K3S_TOKEN=K10720eda8a278bdc7b9b6d787c9676a92119bb2cf95048d6a3cd85f15717edfbe5::server:e98b986e8202885cb54da1b7e701f67e sh -s - --node-external-ip 122.xx.xx.155 --node-ip 192.168.1.3 --flannel-iface wg0
Параметры не нужно слишком много объяснять
-
K3S_TokenСогласно документации перейдите к/var/lib/rancher/k3s/server/node-tokenВозьми. -
K3S_URLПорт коммуникационного адреса мастера должен быть установлен.Порт по умолчанию — 6443, а IP-адрес — это IP-адрес домена виртуальной сети, поэтому трафик будет зашифрован и передан через WireGuard.
Излишне говорить, что два других параметра имеют ту же логику, что и основной элемент управления. Подождите некоторое время после выполнения. После успешной установки проверьте статус работы службы, как обычно.
systemctl status k3s-agent
Если есть ошибка, найдите решение, основанное на ошибке.
После установки проверьте главный узел.
kubectl get nodes -o wide
На данный момент создан мультиоблачный кластер K3S.
автор:Блог операций SRE
адрес блога:www.cnsre.cn/
Адрес статьи:Уухуууууууууууууууууууууууууууууууууууууууууууууууууууууууутутутки11111111
Похожие темы:www.cnsre.cn/tags/k3s/