创建虚拟机实例
基础创建命令
openstack --os-cloud=kolla-admin server create \
--image cirros \
--flavor m1.tiny \
--key-name mykey \
--network demo-net \
demo1
参数说明:
--os-cloud=kolla-admin: 使用 kolla-admin 云配置--image cirros: 使用 CirrOS 测试镜像--flavor m1.tiny: 使用 tiny 规格(1 vCPU, 512MB RAM, 1GB 磁盘)--key-name mykey: 指定 SSH 密钥对(需提前创建)--network demo-net: 连接到 demo-net 网络demo1: 实例名称
查看和管理实例
查看所有实例
# 通过 OpenStack CLI 查看
openstack --os-cloud=kolla-admin server list
# 通过 virsh 查看(KVM 层面)
virsh list --all
查看实例详情
# 查看实例详细信息
openstack --os-cloud=kolla-admin server show demo1
# 查看实例 IP 地址
openstack --os-cloud=kolla-admin server show demo1 -f value -c addresses
实例生命周期管理
# 重启实例
openstack --os-cloud=kolla-admin server reboot demo1
# 停止实例
openstack --os-cloud=kolla-admin server stop demo1
# 启动实例
openstack --os-cloud=kolla-admin server start demo1
通过 Virsh Console 连接
基本连接
# 通过实例 ID 连接
virsh console 1
# 通过实例名称连接
virsh console instance-00000001
默认登录凭据
- 用户名:
cirros - 密码:
gocubsgo - Root 权限: 使用
sudo su -
退出 Console
按 Ctrl + ] 断开连接(虚拟机继续运行)
配置 Console 免密登录
步骤 1:登录虚拟机
virsh console 1
输入用户名 cirros 和密码 gocubsgo
步骤 2:修改 inittab 配置
快速修改命令:
sudo sed -i 's|ttyS0::respawn:/sbin/getty -L 115200 ttyS0 vt100|ttyS0::respawn:/bin/login -f cirros|' /etc/inittab
或手动编辑:
sudo vi /etc/inittab
将以下行:
ttyS0::respawn:/sbin/getty -L 115200 ttyS0 vt100 # GENERIC_SERIAL
修改为:
ttyS0::respawn:/bin/login -f cirros
步骤 3:重启虚拟机
# 从虚拟机内部重启
sudo reboot
# 或从宿主机重启(先退出 console: Ctrl + ])
virsh reboot 1
步骤 4:验证自动登录
virsh console 1
现在应该直接进入系统,不再需要输入用户名和密码!
SSH 密钥登录配置
使用已注入的 SSH Key(推荐)
创建实例时指定了 --key-name mykey,SSH 密钥已自动注入。
步骤:
- 获取实例 IP 地址
openstack --os-cloud=kolla-admin server show demo1 -f value -c addresses
# 输出示例: demo-net=10.0.0.10
- 使用 SSH Key 连接
ssh -i ~/.ssh/mykey cirros@10.0.0.10
如果密钥权限不正确,先修复:
chmod 600 ~/.ssh/mykey
删除实例
推荐方式:使用 OpenStack CLI
# 删除单个实例
openstack --os-cloud=kolla-admin server delete demo1
# 删除多个实例
openstack --os-cloud=kolla-admin server delete demo2 demo3
方式 2:直接使用 Virsh(不推荐)
⚠️ 警告:直接使用 virsh 会导致 OpenStack 数据库状态不一致!
# 强制停止并删除虚拟机
virsh destroy 2 && virsh undefine 2
virsh destroy 3 && virsh undefine 3
验证删除
# 检查 OpenStack 实例列表
openstack --os-cloud=kolla-admin server list
# 检查 virsh 虚拟机列表
virsh list --all
常见问题
Q1: 无法通过 SSH 连接实例
检查安全组规则:
openstack --os-cloud=kolla-admin security group rule list default
# 确保允许 SSH(端口 22)
openstack --os-cloud=kolla-admin security group rule create \
--protocol tcp --dst-port 22 default
Q2: virsh console 连接后无响应
解决方案:
- 按 Enter 键几次唤醒终端
- 检查实例状态:
openstack --os-cloud=kolla-admin server show demo1 | grep status
Q3: 修改 inittab 后仍需要登录
验证配置:
cat /etc/inittab | grep ttyS0
# 应该显示: ttyS0::respawn:/bin/login -f cirros
确保修改的是 ttyS0 行(串口控制台),不是 tty1。
Q4: 获取实例元数据
从实例内部:
# 获取实例 ID
curl http://169.254.169.254/latest/meta-data/instance-id
# 获取公钥
curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
# 查看所有元数据
curl http://169.254.169.254/latest/meta-data/
快速参考
常用命令速查表
| 操作 | 命令 |
|---|---|
| 创建实例 | openstack server create --image <image> --flavor <flavor> --network <net> <name> |
| 列出实例 | openstack server list |
| 查看实例详情 | openstack server show <name> |
| 删除实例 | openstack server delete <name> |
| 重启实例 | openstack server reboot <name> |
| 连接 console | virsh console <id> |
| 列出虚拟机 | virsh list --all |
| SSH 连接 | ssh -i ~/.ssh/key cirros@<ip> |
CirrOS 默认凭据
用户名: cirros
密码: gocubsgo
Root: sudo su -
进阶操作
创建浮动 IP 并关联
# 创建浮动 IP
openstack --os-cloud=kolla-admin floating ip create public
# 关联到实例
openstack --os-cloud=kolla-admin server add floating ip demo1 <floating-ip>
创建快照
# 创建实例快照
openstack --os-cloud=kolla-admin server image create \
--name demo1-snapshot demo1
# 从快照创建新实例
openstack --os-cloud=kolla-admin server create \
--image demo1-snapshot \
--flavor m1.tiny \
--network demo-net \
demo1-clone
附加卷(Volume)
# 创建卷
openstack --os-cloud=kolla-admin volume create --size 10 my-volume
# 附加到实例
openstack --os-cloud=kolla-admin server add volume demo1 my-volume
# 在实例内挂载
sudo mkfs.ext4 /dev/vdb
sudo mkdir /mnt/volume
sudo mount /dev/vdb /mnt/volume
最佳实践:
- ✅ 优先使用 OpenStack CLI 而非直接操作 virsh
- ✅ 生产环境使用 SSH 密钥而非密码认证
- ✅ 定期创建快照备份重要实例
- ✅ 通过安全组控制网络访问