将infrastructure文件夹中的核心文件整合到tofu文件夹中,并删除infrastructure文件夹
This commit is contained in:
parent
bc529a25fa
commit
8d45dec614
|
|
@ -1,52 +0,0 @@
|
|||
# 开发环境主配置文件
|
||||
|
||||
# 版本和提供商配置
|
||||
terraform {
|
||||
required_version = ">= 1.6"
|
||||
|
||||
required_providers {
|
||||
# Oracle Cloud Infrastructure
|
||||
oci = {
|
||||
source = "oracle/oci"
|
||||
version = "~> 5.0"
|
||||
}
|
||||
}
|
||||
|
||||
# 后端配置
|
||||
backend "local" {
|
||||
path = "terraform.tfstate"
|
||||
}
|
||||
}
|
||||
|
||||
# Oracle Cloud 提供商配置
|
||||
provider "oci" {
|
||||
tenancy_ocid = var.oci_config.tenancy_ocid
|
||||
user_ocid = var.oci_config.user_ocid
|
||||
fingerprint = var.oci_config.fingerprint
|
||||
private_key_path = var.oci_config.private_key_path
|
||||
region = var.oci_config.region
|
||||
}
|
||||
|
||||
# Oracle Cloud 基础设施
|
||||
module "oracle_cloud" {
|
||||
source = "../../providers/oracle-cloud"
|
||||
|
||||
# 传递变量
|
||||
environment = var.environment
|
||||
project_name = var.project_name
|
||||
owner = var.owner
|
||||
vpc_cidr = var.vpc_cidr
|
||||
availability_zones = var.availability_zones
|
||||
common_tags = var.common_tags
|
||||
oci_config = var.oci_config
|
||||
|
||||
# 开发环境特定配置
|
||||
instance_count = 1
|
||||
instance_size = "VM.Standard.E2.1.Micro" # 免费层
|
||||
}
|
||||
|
||||
# 输出
|
||||
output "oracle_cloud_outputs" {
|
||||
description = "Oracle Cloud 基础设施输出"
|
||||
value = module.oracle_cloud
|
||||
}
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Nomad集群NFS配置部署脚本
|
||||
# 根据容器类型和地理位置进行分情况处理
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 开始部署Nomad集群NFS配置..."
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 函数:打印带颜色的消息
|
||||
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
|
||||
# 检查当前目录
|
||||
if [ ! -f "configuration/inventories/production/inventory.ini" ]; then
|
||||
log_error "请在mgmt项目根目录运行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 1. 为所有节点配置NFS挂载
|
||||
log_info "步骤1: 为所有节点配置NFS挂载 (根据容器类型和地理位置)"
|
||||
ansible-playbook -i configuration/inventories/production/inventory.ini \
|
||||
playbooks/setup-nfs-by-container-type.yml
|
||||
|
||||
# 2. 为Nomad客户端配置NFS卷支持
|
||||
log_info "步骤2: 配置Nomad客户端支持NFS卷"
|
||||
ansible-playbook -i configuration/inventories/production/nomad-cluster.ini \
|
||||
playbooks/setup-nomad-nfs-client.yml
|
||||
|
||||
# 3. 验证NFS挂载状态
|
||||
log_info "步骤3: 验证所有节点的NFS挂载状态"
|
||||
ansible all -i configuration/inventories/production/inventory.ini \
|
||||
-m shell -a "df -h /mnt/fnsync 2>/dev/null || echo 'NFS未挂载'" \
|
||||
--limit '!snail'
|
||||
|
||||
# 4. 验证Nomad客户端配置
|
||||
log_info "步骤4: 验证Nomad客户端配置"
|
||||
ansible nomad_clients -i configuration/inventories/production/nomad-cluster.ini \
|
||||
-m shell -a "nomad node status -self 2>/dev/null || echo 'Nomad未运行'"
|
||||
|
||||
# 5. 部署示例NFS任务(可选)
|
||||
read -p "是否部署示例NFS任务?(y/n): " deploy_example
|
||||
if [ "$deploy_example" = "y" ] || [ "$deploy_example" = "Y" ]; then
|
||||
log_info "部署示例NFS任务..."
|
||||
nomad run jobs/nomad-nfs-multi-type.nomad
|
||||
echo "等待任务启动..."
|
||||
sleep 10
|
||||
nomad job status nfs-multi-type-example
|
||||
fi
|
||||
|
||||
log_info "✅ NFS配置部署完成!"
|
||||
echo ""
|
||||
echo "📋 使用说明:"
|
||||
echo "1. NFS挂载点: /mnt/fnsync"
|
||||
echo "2. 本地LXC容器: 直接使用挂载目录"
|
||||
echo "3. 海外PVE容器: 使用优化参数挂载"
|
||||
echo "4. Nomad作业: 使用host volume 'nfs-shared'"
|
||||
echo ""
|
||||
echo "🔧 手动验证命令:"
|
||||
echo " - 检查NFS挂载: df -h /mnt/fnsync"
|
||||
echo " - 检查Nomad状态: nomad node status"
|
||||
echo " - 运行NFS任务: nomad run jobs/nomad-nfs-multi-type.nomad"
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# 分发SSH公钥到所有Nomad节点
|
||||
echo "分发SSH公钥到Nomad节点..."
|
||||
|
||||
# 节点列表
|
||||
NODES=(
|
||||
"100.81.26.3" # ash1d.global
|
||||
"100.103.147.94" # ash2e.global
|
||||
"100.90.159.68" # ch2.global
|
||||
"100.86.141.112" # ch3.global
|
||||
"100.117.106.136" # master
|
||||
"100.116.80.94" # ash3c
|
||||
)
|
||||
|
||||
PUB_KEY=$(cat /home/ben/.ssh/id_ed25519.pub)
|
||||
|
||||
for NODE in "${NODES[@]}"; do
|
||||
echo "正在配置节点: $NODE"
|
||||
|
||||
# 尝试使用现有密钥连接并添加新密钥
|
||||
ssh-keyscan -H $NODE >> ~/.ssh/known_hosts 2>/dev/null
|
||||
|
||||
# 使用现有认证方式添加密钥
|
||||
ssh root@$NODE "echo '$PUB_KEY' >> /root/.ssh/authorized_keys" 2>/dev/null && \
|
||||
echo "✓ $NODE 配置成功" || echo "✗ $NODE 配置失败"
|
||||
done
|
||||
|
||||
echo "密钥分发完成"
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
---
|
||||
- name: 设置Nomad节点SSH密钥认证
|
||||
hosts: nomad_nodes
|
||||
become: yes
|
||||
vars:
|
||||
ssh_public_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIIddJVPEvFRtzhWwYjr21lKTar+d7R5Kn/6bhd2s231 ben@ch2"
|
||||
|
||||
tasks:
|
||||
- name: 确保.ssh目录存在
|
||||
file:
|
||||
path: /root/.ssh
|
||||
state: directory
|
||||
mode: '0700'
|
||||
|
||||
- name: 添加SSH公钥到authorized_keys
|
||||
authorized_key:
|
||||
user: root
|
||||
state: present
|
||||
key: "{{ ssh_public_key }}"
|
||||
|
||||
- name: 测试SSH连接
|
||||
ping:
|
||||
|
|
@ -1,230 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Nomad 笔记本设置脚本 - Mac/Linux 版本
|
||||
# 用于将 Mac 或 Linux 笔记本加入 Nomad 集群作为 server
|
||||
|
||||
set -e
|
||||
|
||||
# 配置变量
|
||||
NOMAD_VERSION="1.10.5"
|
||||
NOMAD_DATACENTER="dc1"
|
||||
NOMAD_ENCRYPT_KEY="NVOMDvXblgWfhtzFzOUIHnKEOrbXOkPrkIPbRGGf1YQ="
|
||||
|
||||
# 检测操作系统
|
||||
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||||
ARCH=$(uname -m)
|
||||
|
||||
case $ARCH in
|
||||
x86_64) ARCH="amd64" ;;
|
||||
arm64|aarch64) ARCH="arm64" ;;
|
||||
*) echo "不支持的架构: $ARCH"; exit 1 ;;
|
||||
esac
|
||||
|
||||
echo "🚀 开始设置 Nomad ($OS-$ARCH)..."
|
||||
|
||||
# 1. 检查 Tailscale
|
||||
echo "📡 检查 Tailscale 连接..."
|
||||
if ! command -v tailscale &> /dev/null; then
|
||||
echo "❌ 请先安装 Tailscale"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TAILSCALE_IP=$(tailscale ip | head -1)
|
||||
if [ -z "$TAILSCALE_IP" ]; then
|
||||
echo "❌ Tailscale 未连接,请先运行: tailscale up"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Tailscale IP: $TAILSCALE_IP"
|
||||
|
||||
# 2. 安装 Nomad(如果需要)
|
||||
if ! command -v nomad &> /dev/null; then
|
||||
echo "📦 安装 Nomad $NOMAD_VERSION..."
|
||||
|
||||
if [[ "$OS" == "darwin" ]]; then
|
||||
# macOS
|
||||
if command -v brew &> /dev/null; then
|
||||
brew install nomad
|
||||
else
|
||||
echo "❌ 请先安装 Homebrew 或手动安装 Nomad"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# Linux
|
||||
NOMAD_URL="https://releases.hashicorp.com/nomad/${NOMAD_VERSION}/nomad_${NOMAD_VERSION}_${OS}_${ARCH}.zip"
|
||||
curl -L "$NOMAD_URL" -o nomad.zip
|
||||
unzip nomad.zip
|
||||
sudo mv nomad /usr/local/bin/
|
||||
rm nomad.zip
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "✅ Nomad 版本: $(nomad version)"
|
||||
|
||||
# 3. 创建配置目录
|
||||
echo "📁 创建配置目录..."
|
||||
sudo mkdir -p /etc/nomad.d /opt/nomad/data
|
||||
sudo chown -R $(whoami):$(id -gn) /etc/nomad.d /opt/nomad/data
|
||||
|
||||
# 4. 生成 Nomad 配置
|
||||
echo "⚙️ 生成 Nomad 配置..."
|
||||
cat > /etc/nomad.d/nomad.hcl << EOF
|
||||
datacenter = "$NOMAD_DATACENTER"
|
||||
data_dir = "/opt/nomad/data"
|
||||
log_level = "INFO"
|
||||
|
||||
bind_addr = "$TAILSCALE_IP"
|
||||
|
||||
addresses {
|
||||
http = "0.0.0.0"
|
||||
rpc = "$TAILSCALE_IP"
|
||||
serf = "$TAILSCALE_IP"
|
||||
}
|
||||
|
||||
ports {
|
||||
http = 4646
|
||||
rpc = 4647
|
||||
serf = 4648
|
||||
}
|
||||
|
||||
server {
|
||||
enabled = true
|
||||
bootstrap_expect = 6
|
||||
|
||||
retry_join = [
|
||||
"100.116.158.95", # semaphore
|
||||
"100.117.106.136", # master (现在是 client)
|
||||
"100.116.80.94" # ash3c (现在是 client)
|
||||
]
|
||||
|
||||
encrypt = "$NOMAD_ENCRYPT_KEY"
|
||||
}
|
||||
|
||||
client {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
# 如果是 macOS,可能需要 Docker 插件
|
||||
plugin "podman" {
|
||||
config {
|
||||
volumes {
|
||||
enabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
consul {
|
||||
address = "$TAILSCALE_IP:8500"
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "✅ 配置文件已生成: /etc/nomad.d/nomad.hcl"
|
||||
|
||||
# 5. 创建启动脚本(macOS 不使用 systemd)
|
||||
if [[ "$OS" == "darwin" ]]; then
|
||||
# macOS - 创建 LaunchDaemon
|
||||
echo "🍎 创建 macOS LaunchDaemon..."
|
||||
sudo tee /Library/LaunchDaemons/io.nomadproject.nomad.plist > /dev/null << EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>io.nomadproject.nomad</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/usr/local/bin/nomad</string>
|
||||
<string>agent</string>
|
||||
<string>-config=/etc/nomad.d/nomad.hcl</string>
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
<key>KeepAlive</key>
|
||||
<true/>
|
||||
<key>StandardOutPath</key>
|
||||
<string>/var/log/nomad.log</string>
|
||||
<key>StandardErrorPath</key>
|
||||
<string>/var/log/nomad.log</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# 加载并启动服务
|
||||
sudo launchctl load /Library/LaunchDaemons/io.nomadproject.nomad.plist
|
||||
sudo launchctl start io.nomadproject.nomad
|
||||
|
||||
else
|
||||
# Linux - 创建 systemd 服务
|
||||
echo "🐧 创建 systemd 服务..."
|
||||
sudo tee /etc/systemd/system/nomad.service > /dev/null << EOF
|
||||
[Unit]
|
||||
Description=Nomad
|
||||
Documentation=https://www.nomadproject.io/
|
||||
Requires=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
User=$(whoami)
|
||||
Group=$(id -gn)
|
||||
ExecStart=/usr/local/bin/nomad agent -config=/etc/nomad.d/nomad.hcl
|
||||
ExecReload=/bin/kill -HUP \$MAINPID
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
LimitNOFILE=65536
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# 启动服务
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable nomad
|
||||
sudo systemctl start nomad
|
||||
fi
|
||||
|
||||
# 6. 验证安装
|
||||
echo "🔍 验证 Nomad 服务..."
|
||||
sleep 5
|
||||
|
||||
if [[ "$OS" == "darwin" ]]; then
|
||||
if sudo launchctl list | grep -q nomad; then
|
||||
echo "✅ Nomad 服务已启动"
|
||||
else
|
||||
echo "❌ Nomad 服务启动失败"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if systemctl is-active --quiet nomad; then
|
||||
echo "✅ Nomad 服务已启动"
|
||||
else
|
||||
echo "❌ Nomad 服务启动失败"
|
||||
sudo systemctl status nomad
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 7. 检查集群状态
|
||||
echo "🌐 检查集群连接..."
|
||||
sleep 10
|
||||
|
||||
if nomad server members 2>/dev/null | grep -q alive; then
|
||||
echo "✅ 成功加入 Nomad 集群!"
|
||||
nomad server members
|
||||
else
|
||||
echo "⚠️ 正在连接集群,请稍等..."
|
||||
echo "可以运行以下命令检查状态:"
|
||||
echo " nomad server members"
|
||||
echo " nomad node status"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 设置完成!"
|
||||
echo "📊 Web UI: http://$TAILSCALE_IP:4646"
|
||||
echo "🔧 配置文件: /etc/nomad.d/nomad.hcl"
|
||||
echo "📝 日志查看:"
|
||||
if [[ "$OS" == "darwin" ]]; then
|
||||
echo " tail -f /var/log/nomad.log"
|
||||
else
|
||||
echo " sudo journalctl -u nomad -f"
|
||||
fi
|
||||
|
|
@ -1,212 +0,0 @@
|
|||
# Nomad Windows 设置脚本
|
||||
# 用于将 Windows 笔记本加入 Nomad 集群作为 server
|
||||
|
||||
param(
|
||||
[string]$NomadVersion = "1.10.5",
|
||||
[string]$DataCenter = "dc1",
|
||||
[string]$EncryptKey = "NVOMDvXblgWfhtzFzOUIHnKEOrbXOkPrkIPbRGGf1YQ="
|
||||
)
|
||||
|
||||
# 需要管理员权限
|
||||
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
||||
Write-Host "❌ 此脚本需要管理员权限运行" -ForegroundColor Red
|
||||
Write-Host "请以管理员身份运行 PowerShell" -ForegroundColor Yellow
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "🚀 开始设置 Windows Nomad Server..." -ForegroundColor Green
|
||||
|
||||
# 1. 检查 Tailscale
|
||||
Write-Host "📡 检查 Tailscale 连接..." -ForegroundColor Cyan
|
||||
try {
|
||||
$tailscaleIP = (tailscale ip) | Select-Object -First 1
|
||||
if ([string]::IsNullOrEmpty($tailscaleIP)) {
|
||||
throw "Tailscale IP 为空"
|
||||
}
|
||||
Write-Host "✅ Tailscale IP: $tailscaleIP" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "❌ Tailscale 未安装或未连接" -ForegroundColor Red
|
||||
Write-Host "请先安装 Tailscale 并运行: tailscale up" -ForegroundColor Yellow
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 2. 创建目录
|
||||
Write-Host "📁 创建 Nomad 目录..." -ForegroundColor Cyan
|
||||
$nomadDir = "C:\nomad"
|
||||
$configDir = "$nomadDir\config"
|
||||
$dataDir = "$nomadDir\data"
|
||||
$binDir = "$nomadDir\bin"
|
||||
|
||||
New-Item -ItemType Directory -Force -Path $configDir | Out-Null
|
||||
New-Item -ItemType Directory -Force -Path $dataDir | Out-Null
|
||||
New-Item -ItemType Directory -Force -Path $binDir | Out-Null
|
||||
|
||||
# 3. 下载 Nomad(如果需要)
|
||||
$nomadExe = "$binDir\nomad.exe"
|
||||
if (-not (Test-Path $nomadExe)) {
|
||||
Write-Host "📦 下载 Nomad $NomadVersion..." -ForegroundColor Cyan
|
||||
$nomadUrl = "https://releases.hashicorp.com/nomad/$NomadVersion/nomad_${NomadVersion}_windows_amd64.zip"
|
||||
$zipPath = "$env:TEMP\nomad.zip"
|
||||
|
||||
try {
|
||||
Invoke-WebRequest -Uri $nomadUrl -OutFile $zipPath
|
||||
Expand-Archive -Path $zipPath -DestinationPath $binDir -Force
|
||||
Remove-Item $zipPath
|
||||
Write-Host "✅ Nomad 下载完成" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "❌ 下载 Nomad 失败: $_" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# 4. 添加到 PATH(如果需要)
|
||||
$currentPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
|
||||
if ($currentPath -notlike "*$binDir*") {
|
||||
Write-Host "🔧 添加 Nomad 到系统 PATH..." -ForegroundColor Cyan
|
||||
[Environment]::SetEnvironmentVariable("PATH", "$currentPath;$binDir", "Machine")
|
||||
$env:PATH += ";$binDir"
|
||||
}
|
||||
|
||||
# 5. 生成配置文件
|
||||
Write-Host "⚙️ 生成 Nomad 配置..." -ForegroundColor Cyan
|
||||
$configContent = @"
|
||||
datacenter = "$DataCenter"
|
||||
data_dir = "$($dataDir -replace '\\', '/')"
|
||||
log_level = "INFO"
|
||||
|
||||
bind_addr = "$tailscaleIP"
|
||||
|
||||
addresses {
|
||||
http = "0.0.0.0"
|
||||
rpc = "$tailscaleIP"
|
||||
serf = "$tailscaleIP"
|
||||
}
|
||||
|
||||
ports {
|
||||
http = 4646
|
||||
rpc = 4647
|
||||
serf = 4648
|
||||
}
|
||||
|
||||
server {
|
||||
enabled = true
|
||||
bootstrap_expect = 6
|
||||
|
||||
retry_join = [
|
||||
"100.116.158.95", # semaphore
|
||||
"100.117.106.136", # master
|
||||
"100.116.80.94" # ash3c
|
||||
]
|
||||
|
||||
encrypt = "$EncryptKey"
|
||||
}
|
||||
|
||||
client {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
plugin "podman" {
|
||||
config {
|
||||
volumes {
|
||||
enabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
consul {
|
||||
address = "$tailscaleIP:8500"
|
||||
}
|
||||
"@
|
||||
|
||||
$configFile = "$configDir\nomad.hcl"
|
||||
$configContent | Out-File -FilePath $configFile -Encoding UTF8
|
||||
Write-Host "✅ 配置文件已生成: $configFile" -ForegroundColor Green
|
||||
|
||||
# 6. 创建 Windows 服务
|
||||
Write-Host "🔧 创建 Windows 服务..." -ForegroundColor Cyan
|
||||
|
||||
# 先停止并删除现有服务(如果存在)
|
||||
try {
|
||||
Stop-Service -Name "Nomad" -ErrorAction SilentlyContinue
|
||||
& sc.exe delete "Nomad" 2>$null
|
||||
} catch {}
|
||||
|
||||
# 创建新服务
|
||||
$serviceName = "Nomad"
|
||||
$serviceDisplayName = "HashiCorp Nomad"
|
||||
$serviceDescription = "HashiCorp Nomad Agent"
|
||||
$serviceCommand = "`"$nomadExe`" agent -config=`"$configFile`""
|
||||
|
||||
try {
|
||||
& sc.exe create $serviceName binPath= $serviceCommand DisplayName= $serviceDisplayName start= auto
|
||||
& sc.exe description $serviceName $serviceDescription
|
||||
|
||||
# 配置服务恢复选项
|
||||
& sc.exe failure $serviceName reset= 30 actions= restart/5000/restart/5000/restart/5000
|
||||
|
||||
Write-Host "✅ Windows 服务已创建" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "❌ 创建服务失败: $_" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 7. 启动服务
|
||||
Write-Host "🚀 启动 Nomad 服务..." -ForegroundColor Cyan
|
||||
try {
|
||||
Start-Service -Name $serviceName
|
||||
Write-Host "✅ Nomad 服务已启动" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "❌ 启动服务失败: $_" -ForegroundColor Red
|
||||
Write-Host "检查服务状态: Get-Service Nomad" -ForegroundColor Yellow
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 8. 验证安装
|
||||
Write-Host "🔍 验证 Nomad 服务..." -ForegroundColor Cyan
|
||||
Start-Sleep -Seconds 10
|
||||
|
||||
try {
|
||||
$serviceStatus = Get-Service -Name $serviceName
|
||||
if ($serviceStatus.Status -eq "Running") {
|
||||
Write-Host "✅ Nomad 服务运行正常" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "❌ Nomad 服务状态异常: $($serviceStatus.Status)" -ForegroundColor Red
|
||||
}
|
||||
} catch {
|
||||
Write-Host "❌ 检查服务状态失败: $_" -ForegroundColor Red
|
||||
}
|
||||
|
||||
# 9. 检查集群连接
|
||||
Write-Host "🌐 检查集群连接..." -ForegroundColor Cyan
|
||||
Start-Sleep -Seconds 15
|
||||
|
||||
try {
|
||||
& $nomadExe server members
|
||||
Write-Host "✅ 成功加入 Nomad 集群!" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "⚠️ 正在连接集群,请稍等..." -ForegroundColor Yellow
|
||||
Write-Host "可以运行以下命令检查状态:" -ForegroundColor Cyan
|
||||
Write-Host " nomad server members" -ForegroundColor White
|
||||
Write-Host " nomad node status" -ForegroundColor White
|
||||
}
|
||||
|
||||
# 10. 防火墙规则
|
||||
Write-Host "🔥 配置防火墙规则..." -ForegroundColor Cyan
|
||||
try {
|
||||
New-NetFirewallRule -DisplayName "Nomad HTTP" -Direction Inbound -Protocol TCP -LocalPort 4646 -Action Allow -ErrorAction SilentlyContinue
|
||||
New-NetFirewallRule -DisplayName "Nomad RPC" -Direction Inbound -Protocol TCP -LocalPort 4647 -Action Allow -ErrorAction SilentlyContinue
|
||||
New-NetFirewallRule -DisplayName "Nomad Serf" -Direction Inbound -Protocol TCP -LocalPort 4648 -Action Allow -ErrorAction SilentlyContinue
|
||||
Write-Host "✅ 防火墙规则已配置" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "⚠️ 防火墙规则配置可能失败,请手动检查" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "🎉 Windows Nomad Server 设置完成!" -ForegroundColor Green
|
||||
Write-Host "📊 Web UI: http://$tailscaleIP:4646" -ForegroundColor Cyan
|
||||
Write-Host "🔧 配置文件: $configFile" -ForegroundColor Cyan
|
||||
Write-Host "📝 服务管理:" -ForegroundColor Cyan
|
||||
Write-Host " 启动: Start-Service Nomad" -ForegroundColor White
|
||||
Write-Host " 停止: Stop-Service Nomad" -ForegroundColor White
|
||||
Write-Host " 状态: Get-Service Nomad" -ForegroundColor White
|
||||
Write-Host " 日志: Get-EventLog -LogName Application -Source Nomad" -ForegroundColor White
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "=== Nomad 集群状态检查 ==="
|
||||
|
||||
# 检查所有节点的服务状态
|
||||
echo "1. 检查服务状态..."
|
||||
ansible nomad_cluster -i /root/mgmt/configuration/inventories/production/nomad-cluster.ini -m shell -a "systemctl is-active nomad" 2>/dev/null
|
||||
|
||||
echo -e "\n2. 检查网络连通性..."
|
||||
# 检查网络连通性
|
||||
for ip in 100.116.158.95 100.117.106.136 100.116.80.94; do
|
||||
echo "检查到 $ip 的连接..."
|
||||
timeout 5 nc -zv $ip 4646 2>&1 | grep -E "(succeeded|open)"
|
||||
timeout 5 nc -zv $ip 4647 2>&1 | grep -E "(succeeded|open)"
|
||||
timeout 5 nc -zv $ip 4648 2>&1 | grep -E "(succeeded|open)"
|
||||
done
|
||||
|
||||
echo -e "\n3. 检查 Nomad 集群成员..."
|
||||
# 尝试查询集群成员
|
||||
if nomad server members 2>/dev/null; then
|
||||
echo "集群成员查询成功"
|
||||
else
|
||||
echo "无法查询集群成员 - 可能没有 leader"
|
||||
fi
|
||||
|
||||
echo -e "\n4. 检查节点状态..."
|
||||
if nomad node status 2>/dev/null; then
|
||||
echo "节点状态查询成功"
|
||||
else
|
||||
echo "无法查询节点状态"
|
||||
fi
|
||||
|
||||
echo -e "\n5. 检查最近的日志..."
|
||||
echo "=== Semaphore 节点日志 ==="
|
||||
journalctl -u nomad -n 5 --no-pager 2>/dev/null | tail -5
|
||||
|
||||
echo -e "\n=== 检查完成 ==="
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
#!/bin/bash
|
||||
# 清理退役节点脚本
|
||||
# 创建日期: 2025-09-27
|
||||
# 执行日期: 2025-10-27 (一个月后)
|
||||
|
||||
set -e
|
||||
|
||||
NOMAD_ADDR=${NOMAD_ADDR:-"http://100.116.158.95:4646"}
|
||||
|
||||
echo "=== 清理退役节点脚本 ==="
|
||||
echo "执行时间: $(date)"
|
||||
echo "Nomad 地址: $NOMAD_ADDR"
|
||||
echo ""
|
||||
|
||||
# 退役节点列表
|
||||
RETIRED_NODES=(
|
||||
"583f1b77:semaphore:已转为纯server"
|
||||
"06bb8a3a:hcs:华为云节点退役"
|
||||
)
|
||||
|
||||
echo "准备清理以下退役节点:"
|
||||
for node_info in "${RETIRED_NODES[@]}"; do
|
||||
IFS=':' read -r node_id node_name reason <<< "$node_info"
|
||||
echo " - $node_name ($node_id): $reason"
|
||||
done
|
||||
echo ""
|
||||
|
||||
read -p "确认要清理这些节点吗? (y/N): " confirm
|
||||
if [[ $confirm != [yY] ]]; then
|
||||
echo "操作已取消"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "开始清理退役节点..."
|
||||
|
||||
for node_info in "${RETIRED_NODES[@]}"; do
|
||||
IFS=':' read -r node_id node_name reason <<< "$node_info"
|
||||
|
||||
echo "处理节点: $node_name ($node_id)"
|
||||
|
||||
# 检查节点状态
|
||||
if nomad node status "$node_id" >/dev/null 2>&1; then
|
||||
echo " - 节点存在,开始清理..."
|
||||
|
||||
# 确保节点已 drain
|
||||
echo " - 确保节点已 drain..."
|
||||
nomad node drain -enable -yes "$node_id" || true
|
||||
|
||||
# 禁用调度
|
||||
echo " - 禁用调度资格..."
|
||||
nomad node eligibility -disable "$node_id" || true
|
||||
|
||||
# 等待一段时间确保所有任务已迁移
|
||||
echo " - 等待任务迁移完成..."
|
||||
sleep 10
|
||||
|
||||
echo " - 节点 $node_name 已成功清理"
|
||||
else
|
||||
echo " - 节点不存在或已被清理"
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo "=== 清理完成 ==="
|
||||
echo "请手动验证集群状态:"
|
||||
echo " nomad node status"
|
||||
echo " nomad server members"
|
||||
echo ""
|
||||
echo "如需彻底删除节点记录,请联系管理员"
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# 磁盘监控脚本
|
||||
# 使用方法: ./disk-monitor.sh [threshold]
|
||||
|
||||
THRESHOLD=${1:-85} # 默认阈值 85%
|
||||
INVENTORY_FILE="configuration/inventories/production/nomad-cluster.ini"
|
||||
|
||||
echo "🔍 开始磁盘空间监控 (阈值: ${THRESHOLD}%)"
|
||||
echo "=================================="
|
||||
|
||||
# 运行磁盘分析
|
||||
echo "📊 运行磁盘分析..."
|
||||
ansible-playbook -i "$INVENTORY_FILE" configuration/playbooks/disk-analysis-ncdu.yml
|
||||
|
||||
echo ""
|
||||
echo "⚠️ 检查高磁盘使用率节点..."
|
||||
|
||||
# 检查所有节点的磁盘使用情况
|
||||
ansible all -i "$INVENTORY_FILE" -m shell -a "df -h | awk 'NR>1 {gsub(/%/, \"\", \$5); if(\$5 > $THRESHOLD) print \$0}'" | while read line; do
|
||||
if [[ $line == *"=>"* ]]; then
|
||||
echo "🚨 节点: $line"
|
||||
elif [[ $line =~ ^/dev ]]; then
|
||||
echo " 高使用率磁盘: $line"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "💡 如需清理,运行:"
|
||||
echo " ansible-playbook -i $INVENTORY_FILE configuration/playbooks/disk-cleanup.yml"
|
||||
echo ""
|
||||
echo "📁 详细报告位置: /tmp/disk-analysis/"
|
||||
echo " 使用 ncdu -f /tmp/disk-analysis/ncdu-root-<hostname>.json 查看详细信息"
|
||||
|
|
@ -1,227 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# 🚀 Nomad 集群管理脚本
|
||||
# Nomad Cluster Management Script
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
PURPLE='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
log_header() {
|
||||
echo -e "${PURPLE}=== $1 ===${NC}"
|
||||
}
|
||||
|
||||
# 显示集群状态
|
||||
show_cluster_status() {
|
||||
log_header "Nomad 集群状态概览"
|
||||
|
||||
# 检查 Leader
|
||||
echo -e "${CYAN}Leader 状态:${NC}"
|
||||
LEADER=$(curl -s http://localhost:4646/v1/status/leader 2>/dev/null || echo "无法连接")
|
||||
if [[ "$LEADER" =~ ^\".*\"$ ]]; then
|
||||
echo " ✅ Leader: $(echo $LEADER | tr -d '\"')"
|
||||
else
|
||||
echo " ❌ 无 Leader 或连接失败"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 节点状态
|
||||
echo -e "${CYAN}节点状态:${NC}"
|
||||
curl -s http://localhost:4646/v1/nodes 2>/dev/null | jq -r '.[] | " \(.Status == "ready" and "✅" or "❌") \(.Name) (\(.Address)) - \(.Status)"' 2>/dev/null || {
|
||||
log_warning "无法获取节点状态详情"
|
||||
nomad node status 2>/dev/null || echo " ❌ 命令执行失败"
|
||||
}
|
||||
|
||||
echo ""
|
||||
|
||||
# 驱动状态
|
||||
echo -e "${CYAN}驱动程序状态:${NC}"
|
||||
curl -s http://localhost:4646/v1/nodes 2>/dev/null | jq -r '
|
||||
.[] |
|
||||
" 节点: \(.Name)" as $node |
|
||||
.Drivers |
|
||||
to_entries[] |
|
||||
" \(.value.Healthy and "✅" or "❌") \(.key): \(.value.HealthDescription // "未知")"
|
||||
' 2>/dev/null || {
|
||||
log_warning "无法获取驱动状态详情"
|
||||
}
|
||||
}
|
||||
|
||||
# 显示作业状态
|
||||
show_jobs_status() {
|
||||
log_header "作业状态"
|
||||
|
||||
JOBS=$(curl -s http://localhost:4646/v1/jobs 2>/dev/null)
|
||||
if [[ "$?" -eq 0 ]] && [[ "$JOBS" != "[]" ]] && [[ "$JOBS" != "null" ]]; then
|
||||
echo "$JOBS" | jq -r '.[] | " \(.Status == "running" and "✅" or "❌") \(.Name) - \(.Status)"' 2>/dev/null
|
||||
else
|
||||
echo " 📝 当前没有运行的作业"
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示访问信息
|
||||
show_access_info() {
|
||||
log_header "访问信息"
|
||||
|
||||
echo -e "${CYAN}Web UI:${NC}"
|
||||
echo " 🌐 http://100.116.158.95:4646"
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}API 端点:${NC}"
|
||||
echo " 🔗 http://100.116.158.95:4646/v1/"
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}常用命令:${NC}"
|
||||
echo " 📊 nomad status # 查看集群概览"
|
||||
echo " 🖥️ nomad node status # 查看节点状态"
|
||||
echo " 🔧 nomad server members # 查看服务器成员"
|
||||
echo " 📋 nomad job status <job-name> # 查看作业状态"
|
||||
echo " 🚀 nomad job run <job-file> # 运行作业"
|
||||
echo " 📜 journalctl -u nomad -f # 查看日志"
|
||||
}
|
||||
|
||||
# 运行诊断
|
||||
run_diagnosis() {
|
||||
log_header "运行完整诊断"
|
||||
|
||||
if [[ -f "$PROJECT_ROOT/scripts/utilities/nomad-diagnosis.sh" ]]; then
|
||||
bash "$PROJECT_ROOT/scripts/utilities/nomad-diagnosis.sh"
|
||||
else
|
||||
log_error "诊断脚本未找到"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 配置 Podman 驱动
|
||||
configure_podman() {
|
||||
log_header "配置所有节点使用 Podman 驱动"
|
||||
|
||||
local playbook="$PROJECT_ROOT/configuration/playbooks/configure-nomad-podman-cluster.yml"
|
||||
local inventory="$PROJECT_ROOT/configuration/inventories/production/nomad-cluster.ini"
|
||||
|
||||
if [[ ! -f "$playbook" ]]; then
|
||||
log_error "Playbook 文件不存在: $playbook"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$inventory" ]]; then
|
||||
log_error "Inventory 文件不存在: $inventory"
|
||||
return 1
|
||||
fi
|
||||
|
||||
cd "$PROJECT_ROOT/configuration"
|
||||
python3 -m ansible playbook -i "$inventory" "$playbook" -v
|
||||
}
|
||||
|
||||
# 重启集群
|
||||
restart_cluster() {
|
||||
log_header "重启 Nomad 集群"
|
||||
|
||||
log_warning "这将重启整个 Nomad 集群"
|
||||
read -p "确认继续? (y/N): " -n 1 -r
|
||||
echo ""
|
||||
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
local inventory="$PROJECT_ROOT/configuration/inventories/production/nomad-cluster.ini"
|
||||
cd "$PROJECT_ROOT/configuration"
|
||||
python3 -m ansible adhoc -i "$inventory" nomad_cluster -m systemd -a "name=nomad state=restarted" --become
|
||||
|
||||
log_info "等待集群启动..."
|
||||
sleep 15
|
||||
show_cluster_status
|
||||
else
|
||||
log_info "操作已取消"
|
||||
fi
|
||||
}
|
||||
|
||||
# 主菜单
|
||||
show_menu() {
|
||||
echo ""
|
||||
log_header "Nomad 集群管理菜单"
|
||||
echo ""
|
||||
echo "1) 📊 显示集群状态"
|
||||
echo "2) 📋 显示作业状态"
|
||||
echo "3) 🔍 运行完整诊断"
|
||||
echo "4) 🐳 配置 Podman 驱动"
|
||||
echo "5) 🔄 重启集群"
|
||||
echo "6) ℹ️ 显示访问信息"
|
||||
echo "0) ❌ 退出"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo ""
|
||||
echo "🚀 Nomad 集群管理工具"
|
||||
echo "==================="
|
||||
|
||||
while true; do
|
||||
show_menu
|
||||
read -p "请选择操作 (0-6): " choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
show_cluster_status
|
||||
;;
|
||||
2)
|
||||
show_jobs_status
|
||||
;;
|
||||
3)
|
||||
run_diagnosis
|
||||
;;
|
||||
4)
|
||||
configure_podman
|
||||
;;
|
||||
5)
|
||||
restart_cluster
|
||||
;;
|
||||
6)
|
||||
show_access_info
|
||||
;;
|
||||
0)
|
||||
log_info "再见!"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
log_error "无效选择,请重试"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
read -p "按回车键继续..." -r
|
||||
done
|
||||
}
|
||||
|
||||
# 如果直接运行脚本
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main "$@"
|
||||
fi
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
ADDR="http://100.81.26.3:4646"
|
||||
# 检查 NOMAD_TOKEN 是否设置,如果设置了,则准备好 Header
|
||||
HDR=""
|
||||
if [ -n "${NOMAD_TOKEN:-}" ]; then
|
||||
HDR="-H "X-Nomad-Token: $NOMAD_TOKEN""
|
||||
fi
|
||||
|
||||
echo "--- 节点列表 (Before) ---"
|
||||
nomad node status -address="$ADDR"
|
||||
|
||||
echo
|
||||
echo "--- 开始查找需要清理的旧节点 ---"
|
||||
|
||||
# 使用 jq 从 nomad node status 的 json 输出中精确查找
|
||||
# 条件: 状态为 "down" 且 名称匹配列表
|
||||
IDS_TO_PURGE=$(nomad node status -address="$ADDR" -json | jq -r '.[] | select(.Status == "down" and (.Name | test("^(ch3|ch2|ash1d|ash2e|semaphore)$"))) | .ID')
|
||||
|
||||
if [[ -z "$IDS_TO_PURGE" ]]; then
|
||||
echo "✅ 未找到符合条件的 'down' 状态节点,无需清理。"
|
||||
else
|
||||
echo "以下是待清理的节点 ID:"
|
||||
echo "$IDS_TO_PURGE"
|
||||
echo
|
||||
|
||||
# 循环遍历 ID,使用 curl 调用 HTTP API 进行 purge
|
||||
for NODE_ID in $IDS_TO_PURGE; do
|
||||
echo "===> 正在清理节点: $NODE_ID"
|
||||
# 构造 curl 命令,并使用 eval 来正确处理可能为空的 $HDR
|
||||
cmd="curl -sS -XPOST $HDR -w ' -> HTTP %{http_code}\n' '$ADDR/v1/node/$NODE_ID/purge'"
|
||||
eval $cmd
|
||||
done
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "--- 节点列表 (After) ---"
|
||||
nomad node status -address="$ADDR"
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# NFS配置验证脚本
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 验证NFS配置状态..."
|
||||
|
||||
# 颜色定义
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m'
|
||||
|
||||
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
|
||||
# 1. 检查本地NFS挂载
|
||||
log_info "1. 检查本地NFS挂载状态"
|
||||
if df -h | grep -q "/mnt/fnsync"; then
|
||||
log_info "✅ 本地NFS挂载正常"
|
||||
df -h | grep "/mnt/fnsync"
|
||||
else
|
||||
log_error "❌ 本地NFS未挂载"
|
||||
fi
|
||||
|
||||
# 2. 检查配置文件存在
|
||||
log_info "2. 检查配置文件"
|
||||
config_files=(
|
||||
"playbooks/setup-nfs-by-container-type.yml"
|
||||
"playbooks/setup-nomad-nfs-client.yml"
|
||||
"jobs/nomad-nfs-multi-type.nomad"
|
||||
"scripts/deploy-nfs-for-nomad.sh"
|
||||
"docs/nomad-nfs-setup.md"
|
||||
)
|
||||
|
||||
for file in "${config_files[@]}"; do
|
||||
if [ -f "$file" ]; then
|
||||
log_info "✅ $file 存在"
|
||||
else
|
||||
log_error "❌ $file 不存在"
|
||||
fi
|
||||
done
|
||||
|
||||
# 3. 检查Ansible inventory
|
||||
log_info "3. 检查Ansible配置"
|
||||
if [ -f "configuration/inventories/production/inventory.ini" ]; then
|
||||
log_info "✅ inventory.ini 存在"
|
||||
echo "节点分类:"
|
||||
grep -E "\[.*\]" configuration/inventories/production/inventory.ini | head -10
|
||||
else
|
||||
log_error "❌ inventory.ini 不存在"
|
||||
fi
|
||||
|
||||
# 4. 检查Nomad服务状态
|
||||
log_info "4. 检查Nomad服务"
|
||||
if command -v nomad &> /dev/null; then
|
||||
if nomad node status &> /dev/null; then
|
||||
log_info "✅ Nomad服务运行正常"
|
||||
nomad node status -self | grep -E "(Name|Status|Datacenter)"
|
||||
else
|
||||
log_warn "⚠️ Nomad服务未运行或无法连接"
|
||||
fi
|
||||
else
|
||||
log_warn "⚠️ Nomad命令未安装"
|
||||
fi
|
||||
|
||||
# 5. 检查NFS服务器连通性
|
||||
log_info "5. 检查NFS服务器连通性"
|
||||
if ping -c 1 -W 3 snail &> /dev/null; then
|
||||
log_info "✅ NFS服务器 snail 可达"
|
||||
if command -v showmount &> /dev/null; then
|
||||
showmount -e snail 2>/dev/null || log_warn "⚠️ 无法获取NFS导出列表"
|
||||
fi
|
||||
else
|
||||
log_error "❌ NFS服务器 snail 不可达"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "📊 验证完成!"
|
||||
echo ""
|
||||
echo "🚀 下一步操作:"
|
||||
echo "1. 运行部署脚本: ./scripts/deploy-nfs-for-nomad.sh"
|
||||
echo "2. 查看详细文档: cat docs/nomad-nfs-setup.md"
|
||||
echo "3. 测试NFS功能: nomad run jobs/nomad-nfs-multi-type.nomad"
|
||||
Loading…
Reference in New Issue