kolla from source

openstack做二次开发后需要重新打包. 本文简述使用kolla打包neutron和neutron_lib的场景.

需求:

二次开发的代码和依赖的包的打包.

项目代码打包:

配置neutron-base源:

/etc/kolla/kolla-build.conf
[neutron-base]
type = git
location = http://your-domain/openstack/neutron.git    # neutron代码项目地址
reference = stein   # 分支

依赖包打包:

依赖包的打包稍微麻烦一些, 比如要自定义neutron_lib===1.25.1, 首先要有个私有pypi仓库, 然后更改pip指向.

使用sonatype nexus做pypi proxy

创建pypi(proxy)作为上游pypi(pypi-douban). remote storage填写上游地址比如http://pypi.douban.com
创建pypi(hosted)作为自用pypi(pypi-local).
创建pypi(group)作为暴露的endpoint(pypi). group members里包含pypi-douban和pypi-local.

上传自定义的包

git tag 1.25.1
python setup.py sdist bdist_wheel
twine upload -r nexus dist/*  --repository-url http://pypi-domain:8081/repository/pypi-local/    # 这里pypi-local地址

修改kolla中pypi地址

cat base_header.j2
{% extends parent_template %}   # parent_template

{% block base_header %}         # 直接设置到base镜像里
RUN mkdir ~/.pip && echo -e "\
[global] \n\
index-url = http://<pypi-domain>:8081/repository/pypi/simple/ \n\
[install] \n\
trusted-host=<pypi-domain> \n\
" > ~/.pip/pip.conf

{% endblock %}

执行打包过程, 并上传到私有docker repo

/usr/local/bin/kolla-build --template-override /path/to/base_header.j2  neutron  -t source   --registry <docker repo>:8080 --push

可选(自定义yum.repo来加速)

配置文件中定义rpm_setup_config 私有.repo或.rpm地址

不推荐:

依赖包打包不推荐使用plugin的实现方式, 这种方式不灵活, 而且要workaround pip安装顺序的问题:

  1. 设置plugin地址
    [neutron-base-plugin-1neutron_lib] # 设置私有依赖包, 前面有个1保证优先安装
    type = local
    location = /path/to/1neutron_lib
  2. 修改config.py
    site-packages/kolla/common/config.py
  3. 代码打tag
    cd /path/to/1neutron_lib; git tag 1.25.1

Windows server migration from Xen + LVM to KVM+Ceph(virt-v2v)

旧环境:

XEN+LVM, Centos 5

新环境:

KVM+Ceph, Centos 7

转格式机:

virt-v2v

virt-v2v-copy-to-local

 

目的:把旧环境中的windows服务器迁移到新环境中。

 

工具:

virt-v2v:虚拟化磁盘文件转换工具

virt-v2v-copy-to-local: 将源虚拟化磁盘导出到本地工具,在源为lvm的时候会用到。

 

准备工作:

软件安装:

libguestfs-winsupport, virtio-win, virt-v2v

yum install kvm

systemctl start libvirtd

yum install libguestfs-winsupport

wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo

yum install virtio-win

yum install virt-v2v

 

免密登录:

转换机登录旧环境宿主机root账号做免密码(转换工具只能用这种方式)。

并在转换机上配置ssh-agent:

eval ssh-agent

ssh-add ~/.ssh/id_rsa

转化步骤:

  1. 旧环境源虚拟机(以instance-00000017为例)关机。

virt-v2v-copy-to-local -q -ic xen+ssh://root@xen.example.com instance-00000017

virt-v2v -i libvirtxml instance-00000017.xml -o local -os /data/image

  1. 新虚拟机(以instance-000007a2为例)关闭

virsh stop instance-000007a2

 

  1. 替换磁盘. ceph中旧磁盘重命名, 之后导入新镜像仍使用原磁盘名称.

获取新虚拟机的UUID如(ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e)

则第一块盘命名为ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e_disk

第二块盘命名为ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e_disk.eph0

 

ceph中重命名旧磁盘

rbd -p rbd rename ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e_disk ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e_disk.bak

rbd -p rbd rename ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e_disk.eph0 ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e_disk.eph0.bak

新镜像导入到ceph

rbd -p rbd import --image-format 2 instance-00000017-sda ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e_disk

rbd -p rbd import --image-format 2 instance-00000017-sdb ff4b7fe8-d56e-4dcc-92f1-6353ea5d977e_disk.eph0

  1. 启动实例

virsh start instance-000007a2

 

到这里已经迁移完成了。可以连接vnc查看。vnc viewer可能需要通过代理服务器。

 

备注:

dd旧版本不支持process参数,会报错,需要增加-q

参考文章:

https://docs.fedoraproject.org/quick-docs/en-US/creating-windows-virtual-machines-using-virtio-drivers.html

https://github.com/coreos/fleet/issues/1480