「OpenNebula」- 添加 KVM 节点

  CREATED BY JENKINSBOT

问题描述

该笔记将记录:如何向 OpenNebula 中添加 KVM 节点,以及相关问题的解决方案。

解决方案

系统环境

Ubuntu 20.04 LTS
CentOS Linux release 7.9.2009 (Core)

第一步、添加仓库

Ubuntu:

apt-get update
apt-get -y install gnupg wget apt-transport-https
wget -q -O- https://downloads.opennebula.io/repo/repo.key | apt-key add -

## Ubuntu 20.04

echo "deb https://downloads.opennebula.io/repo/6.0/Ubuntu/20.04 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
apt-get update

## Ubuntu 18.04

echo "deb https://downloads.opennebula.io/repo/6.0/Ubuntu/18.04 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
apt-get update

CentOS:

## CentOS/RHEL 7

cat << "EOT" > /etc/yum.repos.d/opennebula.repo
[opennebula]
name=OpenNebula Community Edition
baseurl=https://downloads.opennebula.io/repo/6.0/CentOS/7/$basearch
enabled=1
gpgkey=https://downloads.opennebula.io/repo/repo.key
gpgcheck=1
repo_gpgcheck=1
EOT

yum makecache fast

第二步、安装软件

Ubuntu:

apt-get update
apt-get -y install opennebula-node-kvm

systemctl restart libvirtd

CentOS:

yum -y install opennebula-node-kvm
systemctl restart libvirtd

第三步、禁用 SELinux 模块

CentOS:

SELINUX=disabled

第四步、免密 SSH 登录

根据官方文档的描述,节点之间需要相互连接:
1)from Front-end to Front-end,
2)from Front-end to hypervisor Node,
3)from Front-end to hypervisor Node with another connection within to another Node (for migration operations),
4)from Front-end to hypervisor Node with another connection within back to Front-end (for data copy back).

因此,需要 Front-end 节点的 oneadmin 用户其他节点的 oneadmin 用户 分发 SSH 公钥:

su - oneadmin

ssh-copy-id -i /var/lib/one/.ssh/id_rsa.pub <oneadmin@node1>
ssh-copy-id -i /var/lib/one/.ssh/id_rsa.pub <oneadmin@node2>
ssh-copy-id -i /var/lib/one/.ssh/id_rsa.pub <oneadmin@node3>

# 注意事项
# 我们通常不知道 oneadmin 用户的密码
# 因此需要手动复制到 /var/lib/one/.ssh/authorized_keys 文件;

而 Hypervisor Node 之间的 SSH 连接是通过 SSH Agent Forwarding 实现的,因此无需在节点之间分发私钥。但是,需要在 Front-end 增加 ForwardAgent 配置:

# vim /var/lib/one/.ssh/config
...
HOST *
  ...
  ForwardAgent yes
  ...

由于默认 /var/lib/one/.ssh/config 使用 StrictHostKeyChecking accept-new 配置,因此无需创建和分发 known_hosts 文件。

测试 SSH 连接……略(由于 SSH_AUTH_SOCK 未在环境变量中,因此验证步骤需要传递 SSH Agent 地址:SSH_AUTH_SOCK=/var/run/one/ssh-agent.sock ssh)。

第五步、网络配置

该步骤的目的是建立隔离的网络,用于 Front-end 管理主机、传输镜像等等。虽然官方未说该步骤是可选择的,但是我们也没有配置。

第六步、添加存储(可选)

默认使用本地存储,如果有需要使用 Ceph, NFS, LVM 等等,参考 Datastore Types 文档。

第七部、添加主机

在 Sunstone 中(http://<hostname>:9869/):
1)Infrastructure → Hosts → +,添加主机;
2)然后,查看 Status 字段是否为 On 状态;

在命令行中,我们也能够添加节点:

$ onehost create <node01> -i kvm -v kvm

$ onehost list
  ID NAME            CLUSTER   RVM      ALLOCATED_CPU      ALLOCATED_MEM STAT
   1 localhost       default     0                  -                  - init

# After some time (up to 1 minute)

$ onehost list
  ID NAME            CLUSTER   RVM      ALLOCATED_CPU      ALLOCATED_MEM STAT
   0 node01          default     0       0 / 400 (0%)     0K / 7.7G (0%) on

导入已有 VM 实例

参考 Importing Wild VMs 文档,将已有的 VM 导入 OpenNebula 进行管理。

参考文献

OpenNebula Repositories — OpenNebula 6.0.2 documentation
Advanced SSH Usage — OpenNebula 6.0.2 documentation