介绍
Vultr提供的CLI命令行工具采用Golang语言编写,提供的命令行可以完成绝大部分操作,包括:vps的创建、删除、重装等,甚至你可以修改修改账号的用户名、密码等。
安装命令行
安装 Vultr-CLI 命令行有多种方法:
github安装
前往 github releases 下载安装对应操作系统的文件。
源码安装
安装前确保你已经安装好了Golang。
go get -u github.com/vultr/vultr-cli
配置api key
首先登陆 Vultr 后台,右上角获取你的 api key,然后在下方白名单允许所有 ipv4, ipv6 可以访问。
将 api key 添加到系统环境变量里,vultr-cli 工具在使用时会自动查找 VULTR_API_KEY 变量并使用。
export VULTR_API_KEY=your_api_key
export只对当前 bash 环境有效,下次使用再重新导入比较麻烦。我们可以变量添加到 /etc/profile 文件里,或者使用 Vultr-CLI 提供的配置文件里。默认的配置文件路径 ~/.vultr-cli.yaml
。
api-key: your-api-key
创建sshkey
现在最新版的 Vultr CLI 创建 vps 不再返回root密码,也不能使用参数添加root密码,官方的意思很明确,就是推荐使用sshkey,所以我们需要先创建 sshkey。如果不创建sshkey,那么创建 vps 后的root密码只能登陆 Vultr 后台查看了。
vultr-cli ssh create --name ssh-cli --key SSH public key
- name:ssh名,自定义
- key:公钥内容,非路径
返回示例:
{
"ssh_key": {
"id": "cb676a46-66fd-4dfb-b839-443f2e6c0b60",
"date_created": "2020-10-10T01:56:20+00:00",
"name": "ssh-cli",
"ssh_key": "ssh-rsa AA... user@example.com"
}
}
创建 ssh 后,记住此 ssh 的 id,之后创建 vps 需要通过 id 来指定 ssh。
创建密码
官方虽然明确表示 password 无法查看,相比较而言密钥登陆是安全的更多,但他们是不是忽略了一个问题:Windows系统。当你创建 Windows系统 就知道有多难受,password看不到、密钥还没用!密码要去控制台查看是不是“有悖” CLI?这里提供一个“绕过”它的方法。 Vultr 提供 Startup Scripts 方法,一段创建后运行的脚本,通过修改密码来达到获取密码。
vultr-cli script -n script-name -s script-string -t script-type
- 参数n:脚本名
- 参数s:脚本内容以base64加密
- 参数t:可选值 pxe 和 boot,默认boot
如果我们要修改 root 密码为 Abcd1234,那么我们的shell脚本可以这么写:
echo root:Abcd1234 | chpasswd root
然后我们将其转换成base64加密
echo "echo root:Abcd1234 | chpasswd root" | base64
得到结果:
ZWNobyByb290OkFiY2QxMjM0Cg==
那么这段 Startup Script 可以写成:
vultr-cli script -n setpasswd -s ZWNobyByb290OkFiY2QxMjM0Cg== -t boot
创建后返回这条脚本的一些基本信息,记住脚本的 id。现在添加 script-id 参数通过添加脚本来创建一台实例
vultr-cli instance create --region region-id --plan plan-id --os os-id --ssh-keys ssh-id --script-id script-id --label label
上面命令的各项参数参考下方介绍。创建后我们使用 ssh 命令快速验证一下 root 密码是否生效。
ssh -p 22 root@ip
创建vps
基本命令如下:
vultr-cli instance create --region region-id --plan plan-id --os os-id --ssh-keys ssh-id --label label
- region:指定地区
- plan:指定套餐,套餐对应配置
- os:操作系统
- ssh-keys:ssh的id
- label:标签
通过如上参数,我们就可以正常创建一台 vps 了,非常方便。创建vps后的返回里不带 ip 地址,我们需要下面的命令查看:
vultr-cli instance list
如果我们创建了比较多的 vps,那么我们指定 label 就可以派上用场了,通过 label 即可快速找到刚创建的 vps。
地区
Vultr 一共有17个数据中心,美国数据中心就占了8个。地区及其对应的 id 只能通过 api 获取,这里我获取整理了一下,方便使用(地址:id):
- 荷兰阿姆斯特丹:ams
- 法国巴黎:cdg
- 德国法兰克福:fra
- 韩国首尔:icn
- 英国伦敦:lhr
- 日本东京:nrt
- 美国硅谷:sjc
- 美国芝加哥:ord
- 美国迈亚密:mia
- 美国洛杉矶:lax
- 美国达拉斯:dfw
- 美国新泽西:ewr
- 美国亚特兰大:atl
- 美国西雅图:Seattle
- 新加坡:sgp
- 澳洲悉尼:syd
- 加拿大多伦多:yto
套餐
plan 指的是价格,在这里它更多意味“配置”,因为不同套餐价格对应不同配置。整理如下(id:配置):
- vc2-1c-1gb:1G内存、1vCPU、25G SSD、1T流量,价格 $5
- vc2-1c-2gb:2G内存、1vCPU、55G SSD、2T流量,价格 $10
- vc2-2c-4gb:4G内存、2vCPU、80G SSD、3T流量,价格 $20
- vc2-4c-8gb:8G内存、4vCPU、160G SSD、4T流量,价格 $40
- vc2-8c-32gb:32G内存、8vCPU、640G SSD、6T流量,价格 $160
- ……
- ……
- ……
操作系统
os参数指定的操作系统,跟 os 相近的是 iso 参数,它指定的是镜像。下面是我整理的操作系统及其对应id(id:操作系统):
- 124:Windows 2012 R2 x64
- 240:Windows 2016 x64
- 371:Windows 2019 x64
- 167:CentOS 7 x64
- 381:CentOS 7 SELinux x64
- 194:Debian 8 i386 (jessie)
- 352:Debian 10 x64 (buster)
- 244:Debian 9 x64 (stretch)
- 216:Ubuntu 16.04 i386
- 270:Ubuntu 18.04 x64
- 387:Ubuntu 20.04 x64
- 413:Ubuntu 20.10 x64
- 445:Ubuntu 21.04 x64
- 230:FreeBSD 11 x6
- 327:FreeBSD 12 x64
- 401:CentOS 8 Stream x64
- 362:CentOS 8 x64
- 389:Fedora 32 x6
- 391:Fedora CoreOS
- 415:Fedora 33 x64
- 446:Fedora 34 x64
- 412:OpenBSD 6.8 x64
- 450:OpenBSD 6.9 x64
更换ip地址
Vultr 提供一项名为 保留ip(Reserved IP)的功能。当我们销毁一台 vps ,跟随这台 vps 的 ip 地址也将一同“丢失”,保留 ip 可以允许我们销毁 vps 而保留 ip。借助 保留ip 和 备份 功能,我们可以实现同地区 vps 的迁移而不丢失数据(备份)和ip(保留ip)。 除了它常规的用法,保留ip 其实也可以充当动态ip的功能,实现更换 ip地址 目的。接触过 aws 和阿里云 的用户应该对 动态IP 不陌生,动态ip 并不是完全意义上的 “更换ip”。 举个例子:现在创建一台 vps A,创建的同时会自带一个 ip地址,我们将其自带的ip地址称为固定ip。创建一个 保留ip,因为它没有依附任何实例,那么保留ip可以看作是动态ip。我们可以将动态ip绑定到 vps A上作为其第二个ip地址,也可以解绑然后删除。虽然 vps A 自带的固定ip可以转换成动态ip,但是它还是属于 vps A,只有当 vps A 被销毁后,这种 “隐形绑定” 关系才被解除。
创建一个新的保留ip
vultr-cli reserved-ip create -r region-id -l label -t v4
- 参数r:地区id
- 参数l:标签
- 参数t:ip类型,只能是v4或者v6
需要注意的是ip地址有 “区域限制”,你必需指定要创建哪个地址的ip,ip也只能绑定在同地区的vps上。创建之后返回保留ip的信息,包括id、地区、ip地址等。
绑定到实例
vultr-cli reserved-id attach <reservedIPID> -i instance-id
- reservedIPID:保留ip的id
- instance-id:实例id
绑定之后我们需要重启这台实例。必需要用 Vultr-CLI 命令行工具重启,在实例里 reboot
是无效的。
配置多ip
重启后还需要手动配置网卡,才能使绑定的ip可用。不同的系统配置方式不同,具体方法参见 单网卡多ip 的配置方式,或者参考 Vultr 给出的教程: /docs/add-secondary-ipv4-address
下面是我写的,仅供参考。系统是 debian 10,默认的网卡配置:
auto lo
iface lo inet loopback
allow-hotplug ens3
iface ens3 inet dhcp
iface ens3 inet6 auto
可以看到 Vultr 默认使用 DHCP 自动配置网络,我们要将其改成手动配置。先将网卡配置文件备份,备份是个好习惯。
cp /etc/network/interfaces /etc/network/interfaces.bak
修改 /etc/network/interfaces
配置文件:
auto lo
iface lo inet loopback
auto ens3
iface ens3 inet static
address ipv4
netmask xx.xx.xx.xx
gateway xx.xx.xx.xx
dns-nameservers 108.61.10.10
post-up ip route add 169.254.0.0/16 dev ens3
auto ens3:1
iface ens3:1 inet static
address 保留ip
netmask 255.255.255.255
上面的 ipv4 就是 vps A 的固定ip,使用 instance get
命令不仅可以看到 ipv4,还能看到子网掩码(netmask)和网关(gateway)信息。
vultr-cli instance get instance-id
然后重启网络。
systemctl restart networking.service
使用 ip a
命令,可以看到 ens3 网卡下面两个ip都在了,现在 ping 绑定到保留地址,发现通了。
解绑
vultr-cli reserved-id detach <reservedIPID>
解绑之后 保留ip 可以绑定到任何其他同地区实例上,实例需要恢复网卡配置文件然后使用命令行重启。
mv /etc/network/interfaces.bak /etc/network/interfaces
价格
保留ip 的价格为每小时$0.0003,或者每月$2,现在很多博客说是$3/月的该更新了。如果不想要,解绑后删除就可以停止收费。
vultr-cli reserved-ip delete <reservedIPID>
其他操作
列出所有创建的vps
vultr-cli instance list
这里可以看到 vps 的一些重要信息,除了 ip 外,我们还可以看到 id,这个 id 就是 instance-id。如果要对某个 vps 进行操作,就要用到这个 id。
删除vps
vultr-cli instance delete instance-id
重启vps
vultr-cli instance restart instance-id
开机
vultr-cli instance start instance-id
关机
vultr-cli instance stop instance-id
重装
vultr-cli instance reinstall instance-id
获取具体信息
vultr-cli instance get instance-id
添加标签
vultr-cli instance label instance-id -l label-name
升级套餐
vultr-cli instance plan upgrade instance-id -p plan-id
更改操作系统
vultr-cli instance os change instance-id -o os-id
通过 CLI 命令行无法更换 ip 地址,还是需要先创建一个 vps,再删除原来的 vps 来达到目的。
Install
apt-get install apache2-utils
Use
./ab -c 100 -n 10000 http://127.0.0.1/index.php
#-c 100 即:每次并发100个
#-n 10000 即: 共发送10000个请求
#用ab测试时,最大并发不能超过1024,其实ab本身没有做这个限制,而是系统限制每个进程打开的最大的文件数为1024
#ulimit -a
#ulimit -n 1020
#-n 可以指定最大请求数,但是也不能超过50000
#-v n 当n>=2 时,可以显示发送的http请求头,和响应的http头及内容; 压力测试时不要这么做