OpenStack Kolla 环境使用教程

7 阅读4分钟

创建虚拟机实例

基础创建命令

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 密钥已自动注入。

步骤:

  1. 获取实例 IP 地址
openstack --os-cloud=kolla-admin server show demo1 -f value -c addresses
# 输出示例: demo-net=10.0.0.10
  1. 使用 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 连接后无响应

解决方案:

  1. 按 Enter 键几次唤醒终端
  2. 检查实例状态:
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>
连接 consolevirsh 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 密钥而非密码认证
  • ✅ 定期创建快照备份重要实例
  • ✅ 通过安全组控制网络访问