使用docker创建cloudstack虚拟主机

文章目录

概要

环境准备:

1.使用rockyLinux:8镜像

2.配置yum源

[3.添加vim cloudstack.repo为以下内容](#3.添加vim cloudstack.repo为以下内容)

4.前期我们已经搭好了cloudstack平台,这里需要映射几个目录到容器里面,

5.创建Dockerfile

6.构建镜像

7.使用命令创建容器

[8.创建docker网络,使用docker network ls查看](#8.创建docker网络,使用docker network ls查看)

9.在使用第七部的命令进行创建​编辑

10.物理机测试启动服务

11.容器测试

[10.更改 /etc/cloudstack/agent/agent.properties](#10.更改 /etc/cloudstack/agent/agent.properties)

小结


概要

前面我们在物理机上创建了cloudstack平台,是成功了的,现在尝试使用docker去启动多个cloudstack虚拟主机节点。前提是需要在物理机上面进行搭建,然后通过物理机进行映射到容器里面

物理机搭建cloudstack单节点:cloudstack概要及单节点安装部署_docker部署cloudstack-CSDN博客

在当前目录下创建一个目录并进入目录

环境准备:

1.使用rockyLinux:8镜像

2.配置yum源

编辑 vim epel.repo添加以下内容

epel

name=Extra Packages for Enterprise Linux 8 - $basearch

metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=basearch\&infra=infra&content=$contentdir

enabled=1

gpgcheck=1

countme=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

epel-debuginfo

name=Extra Packages for Enterprise Linux 8 - $basearch - Debug

metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-8&arch=basearch\&infra=infra&content=$contentdir

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

gpgcheck=1

epel-source

name=Extra Packages for Enterprise Linux 8 - $basearch - Source

metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-8&arch=basearch\&infra=infra&content=$contentdir

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

gpgcheck=1

3.添加vim cloudstack.repo为以下内容

cloudstack

name=cloudstack

baseurl=Index of /centos$releasever/4.19/

enabled=1

gpgcheck=0

4.前期我们已经搭好了cloudstack平台,这里需要映射几个目录到容器里面,

需要映射以下内容,可以先将所需要的目录进行cp到我们前面创建好的目录

/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

/etc/cloudstack/agent/

/etc/pki/CA

/etc/pki/libvirt/

需将以上四个目录进行cp到创建的目录

5.创建Dockerfile

内容如下:

FROM rockylinux:8

COPY epel.repo /etc/yum.repos.d/epel.repo

COPY cloudstack.repo /etc/yum.repos.d/cloudstack.repo

COPY Rocky-BaseOS.repo /etc/yum.repos.d/Rocky-BaseOS.repo

COPY RPM-GPG-KEY-EPEL-8 /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

COPY agent/ /etc/cloudstack/

COPY CA/ /etc/pki/

COPY libvirt/ /etc/pki/

RUN yum makecache \

&& yum clean packages \

&& yum install -y \

openssh-server \

epel-release \

java-11-openjdk-devel \

cloudstack-agent \

iptables

RUN mkdir -p /var/run/sshd \

&& echo 'root:root' | chpasswd \

&& sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \

&& ssh-keygen -A

CMD "/usr/sbin/sshd", "-D"

6.构建镜像

使用命令:docker build -t dockercloudstack:v1 .(镜像名可随意)

使用docker images进行查看已经构建好的镜像我这里是随意取的

7.使用命令创建容器

docker run -uroot --privileged --rm -v /etc/sysconfig/libvirtd:/etc/sysconfig/libvirtd -v /etc/libvirt/:/etc/libvirt/ -v /lib/udev/rules.d/:/lib/udev/rules.d/ -v /etc/cloudstack/agent:/etc/cloudstack/agent -v /etc/pki/:/etc/pki/ -v /run/dbus/:/run/dbus/ -e JAVA_OPTS="-Djava.io.tmpdir=/usr/share/cloudstack-agent/tmp -Xms256m -Xmx2048m" -e CLASSPATH="/usr/share/cloudstack-agent/lib/*:/usr/share/cloudstack-agent/plugins/*:/etc/cloudstack/agent:/usr/share/cloudstack-common/scripts" -e JAVA_CLASS=com.cloud.agent.AgentShell -it -d --hostname cloud --name cloud --network=my_macvlan_network --ip xxxxxxxxxxxxxxxx dockedahi:latest(替换IP地址)

使用docker run的时候发现docker创建的网络出现了以下问题,突然想到使用docker虚拟的容器,需要进行自定义bond0,然后重新设置网络。如果想了解docker网络模式可参看这篇文章:Docker不同的网络模式特点_docker网络类型 以及特点-CSDN博客

报错信息:docker: Error response from daemon: failed to create endpoint cloudworker160-2 on network my_macvlan_network: network id "9e54b8391319ab53087fea1a043c6cd0152bc5ddb1769d6cbe210732f529b240" not found.

8.创建docker网络,使用docker network ls查看

使用命令创建网络

docker network create -d macvlan --subnet=子网地址/24 --gateway=xxxxxxxxxxxxxxx -o parent=cloudbr0 my_macvlan_network

这里的subnet需要更改为所属自己的网络 ip a 的24位子网地址,以及对应网关,parent需要对应cloudbr0前面一篇cloudstack物理机搭建所讲解的,这是必要的

9.在使用第七部的命令进行创建

当我进入网页进行查看是否有这个主机时发现没有,这时候感到纳闷,就进入到容器进行查看,才发现没有启动服务,就试着去尝试systemctl status libvirtd才发现容器里面是没有systemctl这个指令,这不前功尽弃嘛,有试想这不用systemctl启动,或者尝试绕过这个命令不就可以了。尝试了很多次还是不行。就一直困恼着,后来在部门老大的的研究下,就尝试着拆解systemctl start libvirt这个命令

进入到/usr/lib/systemd/system/libvirtd.service配置信息如下

通过配置文件我们看到,他在启动时会去调用sbin下面的libvirtd进行启动,那好就回到根目录下面,确实发现有,然后使用libvirtd -h看一下指令,发现他需要的参数很少,就尝试加参数 - l 进行启动,还是失败,就去查看官方文档,发现,在进行启动libvirtd的时候,他会去调用cloudstack这个服务,那也就是意味着这个服务是不是也得开启。

然后我就去看systemctl status cloudstack-agent.server 发现确实有这个服务,然后进入到/usr/lib/systemd/system/cloudstack-agent.service

查看文件后,发现他在启动时会调用/etc/default/cloudstack-agent这个配置。

然后进入到etc/default/cloudstack-agent配置发现是调用的如下信息,也是环境变量,就export到用户的环境变量里面,然后在进行启动使用命令java JAVA_OPTS JAVA_DEBUG -cp CLASSPATH JAVA_CLASS进行启动。

10.物理机测试启动服务

这时候我们拆解了libvrited启动服务,需要启动libvirtd -l ,以及java JAVA_OPTS JAVA_DEBUG -cp CLASSPATH JAVA_CLASS这两条命令,需要加三条环境变量才能启动成功,就开始测试,启动后登录网页发现成功了。

11.容器测试

这时候我们得到了两台启动命令后在容器里面迫不及待进行尝试,发现报错,这又是什么原因呢,看看报错信息。

从报错的信息看看

No libvirt.vif.driver specified. Defaults to BridgeVifDriver

Failed to get private nic name

这时候想想,网络接口,虚拟化,那是不是容器里面起的服务也需要更改网络呢,就用ip a去查看,发现是eth0

就上网查资料,说是在vi /etc/cloudstack/agent/agent.properties下面进行更改

发现这个配置文件是我们之前从物理机上面映射过来的,这不埋下了坑,然全部更改为eth0在进行启动,没有报错,看网页成功了。算是松了一口气,就尝试搞第二台。

10.更改 /etc/cloudstack/agent/agent.properties

在进行第二台的时候,同样的配置启动,然后登录网页,发现160.2不见了只发了160.3,过一会又变回去了,发现还存在bug,就看了一下这个文件的配置,发现这两个容器的uuid是一模一样的是不是这个影响呢,就尝试更改一下,使用uuidgen生成新的修改这个配置然后在启动试试发现实成功的。

小结

以上就是在docker里面创建虚拟的cloudstack虚拟主机,但是在后续的研究中也存在一定的问题就是无法继续创建示例,需要在进行研究一下,因为这涉及到在容器里面在进行安装虚拟的,已经违背了docker的原则,但是可以进行docker里面套结docker,都需要各位大佬继续开发。提供批量创建云主机的脚本:docker批量创建cloudstack虚拟主机脚本-CSDN博客

相关推荐
bksczm2 分钟前
MySQL基础篇之事务
linux·数据库·sql·mysql
李白客4 分钟前
数据库管理工具怎么选?Navicat、DataGrip、DBeaver 六维横向对比与选型建议
运维·数据库
iPad协议个微协议6 分钟前
微信二次开发如何用 WechatApi 打通消息、客户和业务系统
运维·微信·自动化·微信开发·wechatapi·个人微信开发
蓝速科技7 分钟前
蓝速 K10 三防平板在工业恶劣工况下的选型与应用指南
大数据·运维·数据库·人工智能·科技
bksczm8 分钟前
MySQL基础篇之视图与用户管理
linux·数据库·sql·mysql
Ahtacca21 分钟前
Linux 基础实验:从终端操作到 C 语言编译
linux·运维·运维开发·虚拟机
邪修king22 分钟前
Re:Linux 系统篇(二十九):动静态库Chapter2:动态库深度辨析 —— 核心本质、制作流程、双阶段查找模型与排错指南
android·java·linux·开发语言
智能运维指南26 分钟前
持续集成平台怎么选?从Jenkins迁移、信创适配到质量门禁的全维评估
运维·devops·嘉为蓝鲸
云泽8082 小时前
从零搭建 WSL2 + Ubuntu C/C++ 开发环境:原理、实践与底层架构解析
linux·c++·windows·ubuntu·wsl2
bosins9 小时前
彻底解决 WSL 2.7+ 空闲自动关闭/内存回收导致 Docker 中断的问题
linux·docker·wsl·dashboard