автор:Блог операций 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 wg0
wg0 — это устройство сетевой карты, созданное 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/