上传文件至「/」
This commit is contained in:
352
bushujb.sh
Normal file
352
bushujb.sh
Normal file
@@ -0,0 +1,352 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ===================================================
|
||||
# 脚本功能:
|
||||
# 1. 配置 systemd-networkd 网络桥接与 VLAN
|
||||
# 2. 配置 k3s agent 节点并启动服务
|
||||
# 3. 可通过配置文件 bushu.conf 管理所有参数
|
||||
# ===================================================
|
||||
set -euo pipefail
|
||||
|
||||
# -----------------------
|
||||
# 检查 root 权限
|
||||
# -----------------------
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "请使用 root 用户运行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# -----------------------
|
||||
# 引入配置文件
|
||||
# -----------------------
|
||||
CONFIG_FILE="./bushu.conf"
|
||||
if [[ -f "$CONFIG_FILE" ]]; then
|
||||
source "$CONFIG_FILE"
|
||||
else
|
||||
echo "配置文件 $CONFIG_FILE 不存在,请先创建!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# -----------------------
|
||||
# 网络配置部分
|
||||
# -----------------------
|
||||
echo "=== 开始 cloud 网桥配置 ==="
|
||||
|
||||
# 备份现有网络配置
|
||||
mkdir -p /etc/systemd/network/backup
|
||||
cp /etc/systemd/network/*.network /etc/systemd/network/backup/ 2>/dev/null || true
|
||||
cp /etc/systemd/network/*.netdev /etc/systemd/network/backup/ 2>/dev/null || true
|
||||
echo "网络配置备份已完成"
|
||||
|
||||
|
||||
# 创建 cloud bridge
|
||||
cat > /etc/systemd/network/00-cloud.netdev << EOF
|
||||
[NetDev]
|
||||
Name=cloud
|
||||
Kind=bridge
|
||||
MACAddress=$CLOUD_MAC
|
||||
|
||||
[Bridge]
|
||||
VLANFiltering=yes
|
||||
EOF
|
||||
|
||||
# 配置 cloud 网络
|
||||
cat > /etc/systemd/network/00-cloud.network << EOF
|
||||
[Match]
|
||||
Name=cloud
|
||||
|
||||
[Network]
|
||||
Address=$CLOUD_IP
|
||||
Address=$CLOUD_SECOND_IP
|
||||
Gateway=$CLOUD_GATEWAY
|
||||
DNS=$CLOUD_DNS
|
||||
ConfigureWithoutCarrier=yes
|
||||
|
||||
[Link]
|
||||
RequiredForOnline=no-carrier
|
||||
EOF
|
||||
|
||||
# cloud VLAN 子接口
|
||||
# cat > /etc/systemd/network/10-monitor.netdev << EOF
|
||||
# [NetDev]
|
||||
# Name=cloud-monitor
|
||||
# Kind=vlan
|
||||
|
||||
# [VLAN]
|
||||
# Id=$MONITOR_VLAN_ID
|
||||
# EOF
|
||||
|
||||
cat > /etc/systemd/network/00-$CLOUD_IFACE.network << EOF
|
||||
[Match]
|
||||
Name=$CLOUD_IFACE
|
||||
|
||||
[Network]
|
||||
Bridge=cloud
|
||||
DHCP=no
|
||||
# VLAN=cloud-monitor
|
||||
|
||||
[BridgeVLAN]
|
||||
VLAN=1-4094
|
||||
|
||||
[BridgeVLAN]
|
||||
VLAN=1
|
||||
PVID=1
|
||||
EgressUntagged=1
|
||||
EOF
|
||||
|
||||
# cat > /etc/systemd/network/10-monitor.network << EOF
|
||||
# # monitor
|
||||
# [Match]
|
||||
# Name=cloud-monitor
|
||||
|
||||
# [Network]
|
||||
# ConfigureWithoutCarrier=yes
|
||||
|
||||
# [Link]
|
||||
# RequiredForOnline=no-carrier
|
||||
# EOF
|
||||
|
||||
echo "cloud 网桥配置已完成"
|
||||
|
||||
# -----------------------
|
||||
echo "=== 开始 yewu 网桥配置 ==="
|
||||
|
||||
# 创建 yewu bridge
|
||||
cat > /etc/systemd/network/00-yewu.netdev << EOF
|
||||
[NetDev]
|
||||
Name=yewu
|
||||
Kind=bridge
|
||||
MACAddress=$YEWU_MAC
|
||||
|
||||
[Bridge]
|
||||
VLANFiltering=yes
|
||||
EOF
|
||||
|
||||
# 配置 yewu 网络
|
||||
cat > /etc/systemd/network/00-yewu.network << EOF
|
||||
[Match]
|
||||
Name=yewu
|
||||
|
||||
[Network]
|
||||
Address=$YEWU_IP
|
||||
Gateway=$YEWU_GATEWAY
|
||||
DNS=$YEWU_DNS
|
||||
ConfigureWithoutCarrier=yes
|
||||
|
||||
[Link]
|
||||
RequiredForOnline=no-carrier
|
||||
EOF
|
||||
|
||||
# 用户网卡接入 yewu bridge
|
||||
cat > /etc/systemd/network/00-$YEWU_IFACE.network << EOF
|
||||
[Match]
|
||||
Name=$YEWU_IFACE
|
||||
|
||||
[Network]
|
||||
Bridge=yewu
|
||||
DHCP=no
|
||||
|
||||
[BridgeVLAN]
|
||||
VLAN=1-4094
|
||||
|
||||
[BridgeVLAN]
|
||||
VLAN=1
|
||||
PVID=1
|
||||
EgressUntagged=1
|
||||
EOF
|
||||
|
||||
echo "yewu 网桥配置已完成"
|
||||
|
||||
# 使用 networkctl reload 应用配置
|
||||
echo "正在重新加载网络配置..."
|
||||
networkctl reload
|
||||
echo "网络配置已生效"
|
||||
|
||||
# -----------------------
|
||||
# k3s 配置部分
|
||||
# -----------------------
|
||||
echo "=== k3s 安装配置 ==="
|
||||
echo "=== 下载 K3s 二进制到 /usr/bin/ ==="
|
||||
curl -L -o /usr/bin/k3s "https://file.piicloud.com/f/4108d2f3b3c047be85a8/?dl=1"
|
||||
chmod +x /usr/bin/k3s
|
||||
ls -lh /usr/bin/k3s
|
||||
|
||||
|
||||
|
||||
echo "=== 检查/创建 K3s agent 镜像目录 ==="
|
||||
if [ ! -d "/var/lib/rancher/agent/images" ]; then
|
||||
mkdir -p /var/lib/rancher/agent/images
|
||||
echo "目录已创建"
|
||||
else
|
||||
echo "目录已存在,跳过创建"
|
||||
fi
|
||||
|
||||
# 下载镜像
|
||||
[ -f "/var/lib/rancher/agent/images/base.tar" ] || \
|
||||
curl -L -o /var/lib/rancher/agent/images/base.tar "https://file.piicloud.com/f/11cce6158b9e4f59ba2c/?dl=1"
|
||||
[ -f "/var/lib/rancher/agent/images/expend.tar" ] || \
|
||||
curl -L -o /var/lib/rancher/agent/images/expend.tar "https://file.piicloud.com/f/414c2646352945b282c0/?dl=1"
|
||||
|
||||
chown root:root /var/lib/rancher/agent/images/*.tar
|
||||
chmod 644 /var/lib/rancher/agent/images/*.tar
|
||||
ls -lh /var/lib/rancher/agent/images/
|
||||
|
||||
# 创建 systemd 服务文件
|
||||
cat > /etc/systemd/system/k3s.service << EOF
|
||||
[Unit]
|
||||
Description=Lightweight Kubernetes
|
||||
Documentation=https://k3s.io
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
EnvironmentFile=-/etc/default/%N
|
||||
EnvironmentFile=-/etc/sysconfig/%N
|
||||
EnvironmentFile=-/etc/systemd/system/k3s.service.env
|
||||
KillMode=process
|
||||
Delegate=yes
|
||||
User=root
|
||||
LimitNOFILE=1048576
|
||||
LimitNPROC=infinity
|
||||
LimitCORE=infinity
|
||||
TasksMax=infinity
|
||||
TimeoutStartSec=0
|
||||
Restart=always
|
||||
RestartSec=5s
|
||||
ExecStartPre=-/sbin/modprobe br_netfilter
|
||||
ExecStartPre=-/sbin/modprobe overlay
|
||||
ExecStart=/usr/bin/k3s server
|
||||
EOF
|
||||
|
||||
|
||||
# 创建 override 配置
|
||||
mkdir -p /etc/systemd/system/k3s.service.d
|
||||
cat > /etc/systemd/system/k3s.service.d/override.conf << EOF
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=/usr/bin/k3s agent \
|
||||
--server https://$MASTER_IP:6443 \
|
||||
--token $K3S_TOKEN \
|
||||
--node-name $NODE_NAME \
|
||||
--node-ip $NODE_IP \
|
||||
--node-external-ip $NODE_EXT_IP \
|
||||
--kubelet-arg max-pods=120
|
||||
EOF
|
||||
|
||||
# 创建 registries.yaml
|
||||
mkdir -p /etc/rancher/k3s/
|
||||
cat > /etc/rancher/k3s/registries.yaml << EOF
|
||||
configs:
|
||||
harbor.tdology.com:
|
||||
auth:
|
||||
password: Y_TSq6qDJBZC}538
|
||||
username: admin
|
||||
mirrors:
|
||||
docker.io:
|
||||
endpoint:
|
||||
- http://localhost:30500
|
||||
- https://harbor.tdology.com
|
||||
EOF
|
||||
|
||||
# -----------------------
|
||||
# NVMe 初始化
|
||||
# -----------------------
|
||||
|
||||
# -----------------------
|
||||
# NVMe 挂载与绑定挂载
|
||||
# -----------------------
|
||||
|
||||
# 确保主挂载点存在
|
||||
mkdir -p /mnt/nvme
|
||||
|
||||
# 挂载 /mnt/nvme
|
||||
if ! mountpoint -q /mnt/nvme; then
|
||||
echo "挂载 /dev/nvme0n1p1 到 /mnt/nvme ..."
|
||||
mount /dev/nvme0n1p1 /mnt/nvme
|
||||
else
|
||||
echo "/mnt/nvme 已经挂载,跳过挂载"
|
||||
fi
|
||||
|
||||
# 确保绑定挂载目标目录存在
|
||||
mkdir -p /var/lib/rancher
|
||||
mkdir -p /var/lib/longhorn
|
||||
|
||||
# 挂载 /var/lib/rancher
|
||||
if ! mountpoint -q /var/lib/rancher; then
|
||||
echo "绑定挂载 /mnt/nvme/rancher 到 /var/lib/rancher ..."
|
||||
mount --bind /mnt/nvme/rancher /var/lib/rancher
|
||||
else
|
||||
echo "/var/lib/rancher 已经挂载,跳过绑定挂载"
|
||||
fi
|
||||
|
||||
# 挂载 /var/lib/longhorn
|
||||
if ! mountpoint -q /var/lib/longhorn; then
|
||||
echo "绑定挂载 /mnt/nvme/longhorn 到 /var/lib/longhorn ..."
|
||||
mount --bind /mnt/nvme/longhorn /var/lib/longhorn
|
||||
else
|
||||
echo "/var/lib/longhorn 已经挂载,跳过绑定挂载"
|
||||
fi
|
||||
|
||||
# 更新 /etc/fstab,保证开机自动挂载
|
||||
NVME_UUID=$(blkid -s UUID -o value /dev/nvme0n1p1)
|
||||
|
||||
grep -qE "[[:space:]]/mnt/nvme[[:space:]]" /etc/fstab || \
|
||||
echo "UUID=${NVME_UUID} /mnt/nvme ext4 defaults,nofail 0 2" >> /etc/fstab
|
||||
|
||||
grep -qE "^/mnt/nvme/rancher[[:space:]]+/var/lib/rancher[[:space:]]+none[[:space:]]+bind" /etc/fstab || \
|
||||
echo "/mnt/nvme/rancher /var/lib/rancher none bind 0 0" >> /etc/fstab
|
||||
|
||||
grep -qE "^/mnt/nvme/longhorn[[:space:]]+/var/lib/longhorn[[:space:]]+none[[:space:]]+bind" /etc/fstab || \
|
||||
echo "/mnt/nvme/longhorn /var/lib/longhorn none bind 0 0" >> /etc/fstab
|
||||
|
||||
# 显示挂载状态
|
||||
findmnt /mnt/nvme
|
||||
findmnt /var/lib/rancher
|
||||
findmnt /var/lib/longhorn
|
||||
|
||||
|
||||
# -----------------------
|
||||
# 时间同步
|
||||
# -----------------------
|
||||
echo "=== 安装并配置 chrony ==="
|
||||
apt update
|
||||
apt install -y chrony linuxptp
|
||||
cp /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak 2>/dev/null
|
||||
cat > /etc/chrony/chrony.conf << EOF
|
||||
server 10.250.0.1 iburst prefer
|
||||
server 10.250.0.2 iburst
|
||||
server 10.250.0.3 iburst
|
||||
|
||||
driftfile /var/lib/chrony/chrony.drift
|
||||
makestep 1.0 3
|
||||
rtcsync
|
||||
logdir /var/log/chrony
|
||||
EOF
|
||||
systemctl enable chrony
|
||||
systemctl restart chrony
|
||||
chronyc sources
|
||||
chronyc tracking
|
||||
|
||||
echo "=== 启动 PTP 同步 ==="
|
||||
ptp4l -i $CLOUD_IFACE -m &
|
||||
phc2sys -s $CLOUD_IFACE -c CLOCK_REALTIME -m &
|
||||
|
||||
# -----------------------
|
||||
# 域名解析
|
||||
# -----------------------
|
||||
echo "=== 配置 /etc/hosts ==="
|
||||
for entry in "${HOSTS_ENTRIES[@]}"; do
|
||||
grep -qF "$entry" /etc/hosts || echo "$entry" >> /etc/hosts
|
||||
done
|
||||
|
||||
# -----------------------
|
||||
# 启动 k3s 服务
|
||||
# -----------------------
|
||||
systemctl daemon-reload
|
||||
systemctl enable k3s
|
||||
systemctl start k3s
|
||||
echo "k3s 配置完成"
|
||||
Reference in New Issue
Block a user