mcpField
L
linode

linode

github.com/evolv3-ai其他140 次安装14 周前更新
代码仓库

关于 linode

用于通过 linode-cli 创建和验证 Linode 基础设施的技能,面向运维人员,涵盖服务器与防火墙配置、SSH、清理以及 LKE 自动扩缩说明。

主要功能

  1. 01先收集部署参数
  2. 02检查 CLI、API 令牌和 SSH 配置
  3. 03创建 Linode 实例与防火墙
  4. 04验证 SSH 连接
  5. 05提供 LKE 自动扩缩说明
  6. 06说明删除与清理步骤

适用场景

  1. 01为后续服务部署 Linode 实例
  2. 02选择区域和服务器配置
  3. 03规划 LKE 集群节点自动扩缩

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/evolv3-ai/vibe-skills --skill linode

安装后在 Claude Code 中输入/linode确认已加载。

附带文件assets/env-templatereferences/OPERATIONS.md

详细介绍

Linode 基础设施

严重:密钥和 .env

  • 切勿将有效的 .env 文件或凭据存放在任何技能文件夹中。
  • .env.template 文件只能放在技能中的 assets/ 目录内。
  • 将有效密钥存放在 ~/.admin/.env 中,并从那里引用。

状态:可用于生产环境 | 依赖项:linode-cli、SSH 密钥对


导航

  • 操作、故障排查、配置和成本概览:references/OPERATIONS.md

步骤 0:收集所需信息(必须)

停下。在执行任何部署命令之前,向用户收集所有参数。

复制此清单并逐项确认:

Required Parameters:
- [ ] SERVER_NAME      - Unique name for this server
- [ ] LINODE_REGION    - Region (us-east, us-central, us-west, eu-west, ap-south, etc.)
- [ ] LINODE_TYPE      - Linode type (see profiles below)
- [ ] SSH_KEY_LABEL    - Label of SSH key in Linode
- [ ] SSH_KEY_PATH     - Path to local SSH private key (default: ~/.ssh/id_rsa)

Deployment Purpose (determines recommended profile):
- [ ] Purpose: coolify / kasm / both / custom
      coolify → g6-standard-2 ($36/mo)
      kasm    → g6-standard-4 ($72/mo)
      both    → g6-standard-8 ($144/mo)
      custom  → Ask for specific type

按用途推荐的配置:

用途类型vCPURAM月费
coolifyg6-standard-224GB$36
kasmg6-standard-448GB$72
两者g6-standard-8816GB$144

在确认所有参数之前,不要继续进行先决条件检查。


先决条件

使用此技能之前,请确认以下事项:

1. 已安装 Linode CLI
linode-cli --version

如果尚未安装,请使用以下命令安装:

# Python (pip) - Recommended
pip3 install linode-cli

# macOS (Homebrew)
brew install linode-cli

# Linux (pipx)
pipx install linode-cli
2. Linode 账户和 API 令牌

如果你没有 Linode 账户:

在此注册:https://www.linode.com/?r=YOUR_REFERRAL_CODE

披露:这是一个推荐链接。你将在 60 天内获得 $100 额度;技能作者在你消费 $25 后会获得 $25 账户额度。使用此链接有助于支持这些技能的开发。

获取 API 令牌:https://cloud.linode.com/profile/tokens

创建一个对 Linodes、Firewalls、NodeBalancers 等具有读取/写入权限的 Personal Access Token。

3. 已配置 linode-cli
linode-cli account view

如果出现错误,请使用以下命令进行配置:

# Interactive setup
linode-cli configure

# Or via environment variable
export LINODE_CLI_TOKEN="your_token_here"
linode-cli account view
4. SSH 密钥对
ls ~/.ssh/id_rsa.pub

如果尚未生成,请使用以下命令生成:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
5. 已将 SSH 密钥上传到 Linode
linode-cli sshkeys list

如果为空,请使用以下命令上传:

linode-cli sshkeys create --label "my-key" --ssh_key "$(cat ~/.ssh/id_rsa.pub)"
6. 测试身份验证
linode-cli regions list

如果失败:令牌可能无效或已过期。请创建新令牌。


服务配置

Coolify/Kasm 部署
配置Linode 类型vCPURAM磁盘月费
coolifyg6-standard-224GB80GB$36
kasmg6-standard-448GB160GB$72
bothg6-standard-8816GB320GB$144
专用 CPU(性能最佳)
配置Linode 类型vCPURAM磁盘月费
dedicated-smallg6-dedicated-224GB80GB$36
dedicated-mediumg6-dedicated-448GB160GB$72
dedicated-largeg6-dedicated-8816GB320GB$144
高级套餐(更高性能)
Linode 类型vCPURAM磁盘月费
g7-premium-224GB100GB$43
g7-premium-448GB200GB$86
g7-premium-8816GB400GB$172

部署步骤

步骤 1:设置环境变量
export LINODE_REGION="us-east"             # See regions below
export LINODE_TYPE="g6-standard-2"         # See profiles above
export LINODE_IMAGE="linode/ubuntu22.04"
export SERVER_NAME="my-server"
export SSH_KEY_LABEL="my-key"
区域选项
代码位置区域
us-eastNewark, NJ美国东部
us-centralDallas, TX美国中部
us-westFremont, CA美国西部
us-southeastAtlanta, GA美国东南部
us-ordChicago, IL美国中部
us-laxLos Angeles, CA美国西部
us-miaMiami, FL美国东南部
us-seaSeattle, WA美国西北部
ca-centralToronto, Canada加拿大
eu-westLondon, UK英国
eu-centralFrankfurt, Germany德国
ap-southSingapore亚洲
ap-northeastTokyo, Japan日本
ap-westMumbai, India印度
ap-southeastSydney, Australia澳大利亚

运行 linode-cli regions list 查看完整列表。

步骤 2:获取 SSH 密钥 ID
SSH_KEY_ID=$(linode-cli sshkeys list --label "$SSH_KEY_LABEL" --format id --text --no-headers)
echo "SSH Key ID: $SSH_KEY_ID"

# Verify
if [ -z "$SSH_KEY_ID" ]; then
  echo "ERROR: SSH key '$SSH_KEY_LABEL' not found. Upload it first."
  exit 1
fi
步骤 3:创建防火墙
# Create firewall
FIREWALL_ID=$(linode-cli firewalls create \
  --label "my-firewall" \
  --rules.inbound_policy DROP \
  --rules.outbound_policy ACCEPT \
  --format id --text --no-headers)

echo "Firewall ID: $FIREWALL_ID"

# Allow SSH
linode-cli firewalls rules-update "$FIREWALL_ID" \
  --inbound '[
    {"protocol":"TCP","ports":"22","addresses":{"ipv4":["0.0.0.0/0"],"ipv6":["::/0"]},"action":"ACCEPT"},
    {"protocol":"TCP","ports":"80","addresses":{"ipv4":["0.0.0.0/0"],"ipv6":["::/0"]},"action":"ACCEPT"},
    {"protocol":"TCP","ports":"443","addresses":{"ipv4":["0.0.0.0/0"],"ipv6":["::/0"]},"action":"ACCEPT"},
    {"protocol":"TCP","ports":"8000","addresses":{"ipv4":["0.0.0.0/0"],"ipv6":["::/0"]},"action":"ACCEPT"},
    {"protocol":"TCP","ports":"6001-6002","addresses":{"ipv4":["0.0.0.0/0"],"ipv6":["::/0"]},"action":"ACCEPT"},
    {"protocol":"TCP","ports":"8443","addresses":{"ipv4":["0.0.0.0/0"],"ipv6":["::/0"]},"action":"ACCEPT"},
    {"protocol":"TCP","ports":"3389","addresses":{"ipv4":["0.0.0.0/0"],"ipv6":["::/0"]},"action":"ACCEPT"},
    {"protocol":"TCP","ports":"3000-4000","addresses":{"ipv4":["0.0.0.0/0"],"ipv6":["::/0"]},"action":"ACCEPT"}
  ]' \
  --inbound_policy DROP \
  --outbound_policy ACCEPT
步骤 4:创建 Linode
LINODE_ID=$(linode-cli linodes create \
  --region "$LINODE_REGION" \
  --type "$LINODE_TYPE" \
  --image "$LINODE_IMAGE" \
  --label "$SERVER_NAME" \
  --authorized_keys "$(cat ~/.ssh/id_rsa.pub)" \
  --root_pass "$(openssl rand -base64 32)" \
  --format id --text --no-headers)

echo "Linode ID: $LINODE_ID"
步骤 5:将防火墙应用到 Linode
linode-cli firewalls device-create "$FIREWALL_ID" \
  --type linode \
  --id "$LINODE_ID"
步骤 6:等待并获取 Linode IP
# Wait for Linode to be running
echo "Waiting for Linode to be running..."
while [ "$(linode-cli linodes view "$LINODE_ID" --format status --text --no-headers)" != "running" ]; do
  sleep 5
done

# Get IP address
SERVER_IP=$(linode-cli linodes view "$LINODE_ID" --format ipv4 --text --no-headers | head -1)
echo "SERVER_IP=$SERVER_IP"
步骤 7:等待服务就绪
# Wait for SSH to be available (typically 60-90 seconds)
echo "Waiting for server to be ready..."
until ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$SERVER_IP "echo connected" 2>/dev/null; do
  sleep 5
done
echo "Server is ready!"
步骤 8:验证连接
ssh root@$SERVER_IP "uname -a && free -h && df -h /"
步骤 9:为下游技能输出
# Linode only offers x86 architecture
SERVER_ARCH="amd64"

# Save to .env.local for downstream skills
echo "SERVER_IP=$SERVER_IP" >> .env.local
echo "SSH_USER=root" >> .env.local
echo "SSH_KEY_PATH=~/.ssh/id_rsa" >> .env.local
echo "SERVER_ARCH=$SERVER_ARCH" >> .env.local
echo "COOLIFY_SERVER_IP=$SERVER_IP" >> .env.local
echo "KASM_SERVER_IP=$SERVER_IP" >> .env.local

echo ""
echo "Linode deployed successfully!"
echo "  IP: $SERVER_IP"
echo "  Arch: $SERVER_ARCH"
echo "  SSH: ssh root@$SERVER_IP"

验证部署

ssh root@$SERVER_IP "echo 'Linode connected successfully'"

Kubernetes 自动扩缩

Linode Kubernetes Engine(LKE)支持 Cluster Autoscaler,可自动扩缩节点。

创建 LKE 集群
# Create cluster (via API - CLI doesn't support all options)
linode-cli lke cluster-create \
  --label "my-lke" \
  --region "$LINODE_REGION" \
  --k8s_version "1.28"
启用 Cluster Autoscaler

Cluster Autoscaler 在管理集群中运行,并根据工作负载进行扩缩:

  1. 在集群中安装 Cluster Autoscaler 插件
  2. 使用 Linode API 令牌进行配置
  3. 设置每个节点池的节点数上下限

参见:https://linode.github.io/cluster-api-provider-linode/topics/autoscaling.html


清理

警告:此操作具有破坏性,且无法撤销。

# Delete Linode
linode-cli linodes delete "$LINODE_ID"

# Delete firewall
linode-cli firewalls delete "$FIREWALL_ID"

# Optionally delete SSH key
# linode-cli sshkeys delete "$SSH_KEY_ID"

运维

故障排查、最佳实践、配置变量和成本快照见 references/OPERATIONS.md。


日志集成

执行基础设施操作时,请将日志记录到集中式系统:

# After provisioning
log_admin "SUCCESS" "operation" "Provisioned Linode" "id=$LINODE_ID provider=Linode"

# After destroying
log_admin "SUCCESS" "operation" "Deleted Linode" "id=$LINODE_ID"

# On error
log_admin "ERROR" "operation" "Linode deployment failed" "error=$ERROR_MSG"

完整的日志记录文档见 admin 技能的 references/logging.md。


参考资料

评论

支持 Markdown