问题描述
该笔记将记录:如何向 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