使用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博客

相关推荐
omnibots1 分钟前
Ubuntu22拉取君正SDK报错
linux
xserver21 小时前
hadoop搭建
大数据·linux·hadoop
勇-子2 小时前
K8s DaemonSet的介绍
云原生·容器·kubernetes
孟里啥都有.2 小时前
12.24 k8s yaml文件类型和介绍
云原生·容器·kubernetes
花晓木2 小时前
最新版本 - 二进制安装k8s1.29.2 集群
云原生·容器·kubernetes
休耕2 小时前
kubeadm搭建k8s集群
云原生·容器·kubernetes
breaksoftware2 小时前
Windows Subsystem for Linux——设置默认登录用户名
linux·运维·服务器
梁萌5 小时前
Linux安装Docker
linux·运维·docker·helloworld·容器化部署
翱翔-蓝天5 小时前
在 CentOS 系统上安装 ClickHouse
运维·docker·容器
彩虹糖_haha6 小时前
Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器/查找替换/分屏操作/vim的配置)
linux·运维·服务器