一、原理

        根据kolla-ansible的资料,其部署openstack开发环境的原理是,先在本地部署all-in-one的openstack可执行环境,在其基础上将需开发的项目源码clone到本地机器上,然后mount进相对应运行的容器,这样本地修改的代码将在容器中实时被执行,从而达到开发调试的目的。

 

二、安装部署本地all-in-one环境

1、安装环境

             VMWare虚拟机4核6G 40G硬盘

              软件

              centos 7.8
              python 2.7.5
              pip 19.0.3
              ansible  2.7.18 
              kolla  7.1.1   
              kolla-ansible 7.1.1.dev68           #对应openstack Rocky版本
              docker  4.2.1

              硬件

             两块网卡
             ens33   IP 192.168.44.91  内网,openstack的VIP
             ens37    外网 不配IP

             硬盘 40G   /root 目录至少25G

 2、安装步骤

2.1.关闭selinux

vi /etc/selinux/config 

更改SELINUX选项为不可用

SELINUX=disabled

2.2.关闭防火墙

systemctl stop firewalld

systemctl disable firewalld 

# 测试环境

2.3.更改hosts

192.168.44.91 localhost 

# centos 默认主机名localhost如果更改,统一即可

3、安装docker容器

3.1.查询一下防火墙是否关闭

systemctl status firewalld

# 显示disable即为关闭,同时查看selinux=disable修改完毕

3.2.下载安装基本工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y wget vim net-tools

3.3.安装docker

# 安装docker官方yum源

wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 下载安装docker

sudo yum install -y docker-ce  

#修改docker配置使用国内仓库,推荐使用阿里的
 vi /etc/docker/daemon.json


{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

# 启用docker服务

systemctl daemon-reload && systemctl enable docker && systemctl restart docker 

 

3.4.测试docker是够正常运行

sudo docker run hello-world

4、配置docker容器

4.1.开启共享挂载

mkdir /etc/systemd/system/docker.service.d

tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'

[Service]

MountFlags=shared

EOF

重启docker服务,使生效

systemctl daemon-reload

systemctl restart docker

5、安装kolla-ansible

5.1.下载安装基本工具

yum install -y epel-release

yum install -y python-pip

pip install -U pip==19.0.3    #版本过高不能使用~/.pip/pip.conf,原因不明

#依赖组件

yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python git openldap-devel

yum install -y ansible

#配置pip国内源
mkdir ~/.pip
vim ~/.pip/pip.conf
[global] 
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
 

5.2.下载kolla、kolla-ansible

git clone https://github.com/openstack/kolla

git clone https://github.com/openstack/kolla-ansible

5.3.切换到Train版本

cd kolla

git checkout -b train remotes/origin/stable/train  

cd ../kolla-ansible

git checkout -b train remotes/origin/stable/train

5.4.安装kolla-ansible

# 先预装版本不匹配的包

pip install -U idna

pip install -I PyYAML  

pip install Jinja2

# 安装kolla-ansible

cd kolla-ansible

pip install .

*安装过程中可能会提示各种组件版本兼容性问题,可以用pip install --ignore-installed <package>根据依赖关系强制安装

有些顽固的egg文件可以直接删除后再安装

使用 virtualenv建一个新环境会降低兼容性问题,但执行kolla-ansible时有docker moudle can't found.问题,原因可自行百度

5.5.配置kolla-ansible

vi /etc/ansible/ansible.cfg

修改一下选项

[defaults]

host_key_checking=False

pipelining=True

forks=100

6、配置OpenStack环境

6.1、复制kolla-ansible配置文件

cp -r kolla-ansible/etc/kolla /etc/kolla/

cp kolla-ansible/ansible/inventory/* .

正常部署来说,kolla-ansible的方式部署OpenStack所包含的配置文件存储路径是在/etc/kolla/文件目录下。OpenStack的服务容器启动时,会将此目录映射到容器里。

6.2.调整kolla-ansible全局配置

vi /etc/kolla/globals.yml

更改如下

kolla_install_type: "source" # 使用源码版本

openstack_release: ""  #可不填kolla-ansible会根据当前版本自动下载

 kolla_internal_vip_address: "192.168.44.91" # all-in-one部署,指定vip为管理网络网卡

network_interface: "ens33" # 管理网络、API网络的网卡

neutron_external_interface: "ens37" # 外部网络的网卡

enable_haproxy: "no" # all-in-one部署,不部署HA服务

nova_compute_virt_type: "qemu" # ---- 在物理机上部署时无需设置(默认kvm) ,仅在虚拟机中部署kolla-ansible-openstack时设置qemu

 

6.3、生成密码

kolla-genpwd

# 生成的文件在/etc/kolla/password.yml

vi /etc/kolla/password.yml

keystone_admin_password: 123 #OpenStack登录密码,原始密码哈希生成,记忆王者可以随意修改

7、部署OpenStack环境

7.1.检查

#基础环境检查

kolla-ansible -i all-in-one bootstrap-servers 

#安装预检查
kolla-ansible -i all-in-one prechecks

7.2.部署安装

#提高部署的成功率,先下拉镜像

kolla-ansible -i all-in-one pull  #用时比较长,视网络情况而定

#开始部署

kolla-ansible -i all-in-one -vvv deploy #开启详情检查方式,方便与部署过程中的排查

部署完成后,便可访问192.168.44.91访问dashboard, 这样本地all-in-one环境部署完成。

7.3.生成运行脚本

kolla-ansible post-deploy

运行脚本

source /etc/kolla/admin-openrc.sh

7.4.安装OpenStack命令行工具

# 先安装版本不匹配的组件

pip install -I ipaddress  

# 安装命令行工具

pip install python-openstackclient python-glanceclient python-neutronclient

 

三、开发调试步骤

1、开启开发调试项目

本次以horizon项目为例比较直观,在/etc/kolla/globals.yml文件最后,加入

horizon_dev_mode: true
开启所有项目为
kolla_dev_mode: true

停止原openstack环境
kolla-ansible -i all-in-one stop --yes-i-really-really-mean-it

重新部署
kolla-ansible -i all-in-one deploy -vvv

*部署过程中kolla-ansible脚本会调用git将horizon项目源码clone到本地,若网络速度较慢可能出错,可使用git代理或其他办法

 

部署成功后,kolla-ansible会将horizon源码放入本地/opt/stack目录内

[root@localhost ~]# ll /opt/stack
总用量 8
drwxr-xr-x. 16 root root 4096 6月  27 17:40 heat
drwxr-xr-x. 11 root root 4096 6月  27 19:04 horizon

2、开发过程

使用vscode打开/opt/stack/horizon文件夹,便可进行开发工作

修改静态页面,保存后便可看到运行结果

刷新浏览器页面

3、设置断点调试

在文件中引入remote_pdb

from remote_pdb import RemotePdb
在断点处设置

RemotePdb('127.0.0.1', 4444).set_trace()

本例在project/overview处设置断点

 为horizon容器安装remote_pdb组件

docker exec -it -u root horizon pip install remote_pdb

保存代码后,重启horizon容器
 

docker restart horizon

在浏览器中登录dashboard,发现日志停留在断点处

查看断点信息

 

socat readline tcp:127.0.0.1:4444

Pycharm vscode等图形编辑工具是否能直接使用容器内的断点,请参考文章
https://blog.csdn.net/wenwenxiong/article/details/51540518 
https://zhuanlan.zhihu.com/p/43656542

 

四、碰到的问题

使用queens本版时,all-in-one环境部署成功,开启dev_mode后对应的容器不断重启,原因不明。

五、参考文章

https://docs.openstack.org/kolla-ansible/latest/contributor/kolla-for-openstack-development.html

https://blog.csdn.net/napolunyishi/article/details/78821884

https://www.jianshu.com/p/6f0899d44ea1

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐