Мультиоблако для создания кластера K3S

Kubernetes

автор:Блог операций 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

sre运维|Linux运维|自动化运维|关键词

sre运维|Linux运维|自动化运维|关键词

Вы можете видеть, что в списке указана информация о одноранговых узлах, а также данные измерения связи. Затем вы можете проверить, нормально ли работает сетевое соединение, отправив эхо-запрос на виртуальный 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

sre运维|Linux运维|自动化运维|关键词

-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 

sre运维|Linux运维|自动化运维|关键词

На данный момент создан мультиоблачный кластер K3S.


автор:Блог операций SRE

адрес блога:www.cnsre.cn/

Адрес статьи:Уухуууууууууууууууууууууууууууууууууууууууууууууууууууууууутутутки11111111

Похожие темы:www.cnsre.cn/tags/k3s/