Set up your Open Stack

There are several ways to deploy openstack, Devstack is easily for developer to deploy Open Stack.

Please follow this URL to set up your Open Stack.

http://docs.openstack.org/developer/devstack/

nested KVM support:

  • Kernel

    • First check if your system has already configured nested kvm:
root@minicloud-allinone-controller0-i7bnc6baumzl:~# dpkg -S /etc/modprobe.d/qemu-system-x86.conf
qemu-system-x86: /etc/modprobe.d/qemu-system-x86.conf
root@minicloud-allinone-controller0-i7bnc6baumzl:~# cat /etc/modprobe.d/qemu-system-x86.conf
options kvm_intel nested=1
  • If not, run:
echo “options kvm-intel nested=1″ | sudo tee /etc/modprobe.d/kvm-intel.conf
  • then reload kvm_intel.ko
rmmod kvm_intel
modprobe kvm_intel
  • Nova

    • Optional: Modify nova.conf and add host-passthrough. Please note it may impact migration.
libvirt_cpu_mode = host-passthrough
  • Restart nova services.

PCI PassThrough Support

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Virtualization/chap-Virtualization-PCI_passthrough.html

There are two ways to support PCI PassThrough.

  1. legacy UIO framework(PCI Assign);
  2. VFIO, it is recommended http://lwn.net/Articles/509153/

For PCI SR-IOV device we have a specially way to setup.

Preparation for PCI PassThrough

(1) Enable the Intel VT-d extensions http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM

Setup in your bios. Check you have enable it.

$sudo dmesg | grep -e DMAR -e IOMMU

(2) Activate Intel VT-d in the kernel http://www.zerg.sc/technote/?p=241

$ sudo echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

update the the kernel cmdline.

https://www.gnu.org/software/grub/manual/html_node/Simple-configuration.html

$ sudo su
$ sudo sed -i -e 's/\(^GRUB_CMDLINE_LINUX_DEFAULT.*\)"$/\1 intel_iommu=on"/' /etc/default/grub
$ sudo update-grub
$ sudo grep intel_iommu=on /boot/grub/grub.cfg
Use legacy UIO framework instead of VFIO

Why we still need the legacy UIO framework, for there are some thing wrong with vfio and igb in some PC.

http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM

Set parameter KVM allow_unsafe_assigned_interrupts

Transient configure (take effect Immediately)

$ sudo echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

Or persistent

$ sudo echo "options kvm allow_unsafe_assigned_interrupts=1" >>  /etc/modprobe.d/kvm_iommu.conf

Search the PCI device

$ lspci -n
01:00.0 0200: 8086:10fb (rev 01)
01:00.1 0200: 8086:10fb (rev 01)
$ lspci
01:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
01:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)

Bind pci_stub driver to PCI device

$ sudo modprobe pci_stub
$ sudo su(take effect Immediately)
$ echo "8086 10fb" > /sys/bus/pci/drivers/pci-stub/new_id
$ echo 0000:01:00.0 > /sys/bus/pci/devices/0000\:01\:00.0/driver/unbind
$ echo 0000:01:00.0 > /sys/bus/pci/drivers/pci-stub/bind
$ echo 0000:01:00.1 > /sys/bus/pci/devices/0000\:01\:00.1/driver/unbind
$ echo 0000:01:00.1 > /sys/bus/pci/drivers/pci-stub/bind

Start attach PCI device to guest and start

  1. in this way, if you want to use virsh to start your guest, you must assign the driver name, or you will failed for libvirt will use vfio driver as default.
  2. name='kvm' means: the legacy pci device assignment handled directly by the KVM kernel module
$ echo "
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='kvm'/>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
</source>
</hostdev>" > new-pci.xml
$ virsh attach-device guest-name --config new-pci.xml
$ virsh start guest-name
Use VFIO

There are tons of tutorials on how to get VT-d working with KVM/libvirt/Qemu/etc. It’s still a fairly new and unused feature, which means that it is getting updated pretty frequently. Unfortunately, the Internet doesn’t update as quickly, so most of the documentation out there is not accurate or the best approach. readlink You can refer this when any trouble.

http://hinish.com/?p=338

We need this command to load the kernel modules at boot time

$ sudo echo "vfio
vfio_iommu_type1
vfio_pci" >> /etc/modules

Set vfio_iommu_type1 allow_unsafe_interrupts parameters If you're overriding the ivrs table to enable intremap you dont need this line Persistent (need reboot.)

$ echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/vfio_iommu_type1.conf

Or transient (take effect Immediately)

$ sudo echo 1 >  /sys/module/vfio_iommu_type1/parameters/allow_unsafe_interrupts

Disable AppArmor for libvirtd

Actually, we do not need to disable Apparmor, this is a bug on ubuntu, we need to work around it. (It may can not works)

https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1276719

http://libvirt.org/drvqemu.html#securitysvirtaa

$ apt-get install apparmor-utils
$ sudo aa-complain /usr/sbin/libvirtd
$ sudo su
$ for x in /etc/apparmor.d/libvirt/libvirt-*[0-9a-b];do aa-complain $x; done

Or (It may can not works)

$ sudo ln -s  /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
$ sudo ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper /etc/apparmor.d/disable/
$ sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd
$ sudo apparmor_parser -R /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper
$ sudo service libvirt-bin restart

Or remove it (the best way)

http://www.techytalk.info/disable-and-remove-apparmor-on-ubuntu-based-linux-distributions/

$ sudo /etc/init.d/apparmor stop
$ sudo update-rc.d -f apparmor remove
$ sudo apt-get --purge remove apparmor apparmor-utils libapparmor-perl libapparmor1

It may cause the ubuntu-desktop crash, please reinstall it.

$ sudo apt-get install ubuntu-desktop

Find the all the pci devices in sam iommu group

We must binding all devices in same group to the vfio-pci driver creates.

$ readlink /sys/bus/pci/devices/0000\:01\:00.0/iommu_group
../../../../kernel/iommu_groups/1
$ ls -l /sys/bus/pci/devices/0000\:01\:00.0/iommu_group/devices

Bind vfio driver to PCI device

$ sudo su
$ echo "8086 10fb" > /sys/bus/pci/drivers/vfio-pci/new_id
$ echo "0000:01:00.1" > /sys/bus/pci/devices/0000\:01\:00.1/driver/unbind
$ echo "0000:01:00.1" > /sys/bus/pci/drivers/vfio-pci/bind
$ echo "0000:01:00.0" > /sys/bus/pci/devices/0000\:01\:00.0/driver/unbind
$ echo "0000:01:00.0" > /sys/bus/pci/drivers/vfio-pci/bind

Start attach PCI device to guest and start

$ echo "
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
</source>
</hostdev>" > new-pci.xml
$ virsh attach-device guest-name --config new-pci.xml
$ virsh start guest-name
Configure for igb module for SR-IOV support.

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/sect-Virtualization_Host_Configuration_and_Guest_Installation_Guide-SR_IOV-How_SR_IOV_Libvirt_Works.html

Persistent configure for igb module.

https://communities.intel.com/community/wired/blog/2011/08/31/using-sr-iov-with-intel-ethernet-and-red-hat-enterprise-linux

$ sudo echo 'options igb max_vfs=7' > /etc/modprobe.d/igb.conf
$ sudo echo "igb" >> /etc/modules
$ sudo update-initramfs -k all -t -u

Transient configure for igb module.

$ sudo su
$ sudo rmmod igb && sudo modprobe igb max_vfs=7

It maill failed as follow on PC:

Jan 10 04:42:18 localhost kernel: [ 8441.914658] ixgbe 0000:01:00.1: SR-IOV: bus number out of range
Jan 10 04:42:18 localhost kernel: [ 8441.914662] ixgbe 0000:01:00.1 0000:01:00.1 (uninitialized): Failed to enable PCI sriov: -12

This is intel official document, it is some different from the above.

http://www.intel.com/content/www/us/en/network-adapters/10-gigabit-network-adapters/ethernet-x520-sr-iov-red-hat-tech-brief.html

Work around if pci-passthrough can not work.
Upgrade your kernel.

Download the latest stable kernel. https://www.kernel.org/

$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.1.tar.xz
$ tar -xvf linux-3.18.1.tar.xz
$ cd linux-3.18.1
$ cp /boot/config-3.13.0-43-generic ./.config
$ echo "" | make oldconfig

Please enable CONFIG_IP_NF_NAT the config, kernel 3.17 change the macro define for nat.

$ sed -i -e "s/# CONFIG_IP_NF_NAT.*/CONFIG_IP_NF_NAT=m/" ./.config
$ make -j8
$ make modules_install
$ make install
$ sudo reboot
compile your owen qemu
$ git clone git://git.qemu.org/qemu.git
$ apt-get install libglib2.0-dev zlib1g-dev libspice-server-dev libspice-protocol-dev
$ ./configure '--target-list=x86_64-softmmu' '--enable-debug' '--enable-kvm' '--enable-spice' '--prefix=/home/shhfeng/qemu/'
$ make
re make you initrd
$ gunzip # uncompress your initrd-*.img file
$ mkdir tmp
$ cd tmp/
$ cpio -i --make-directories < "your uncompress initrd direction."
$ tree -C .

# tree: option -C color show,-n shutdown color show.

or

$ cd tmp/
$ gzip -dc ../sth.gz |cpio -id

# edit your initrd,

$ cd tmp/

# add or remove *.ko

$ find ./ | cpio -H newc -o > /boot/initrd-2.6.22.6.img-ahci
$ gzip /boot/initrd-2.6.22.6.img-ahci
$ mv initrd-2.6.22.6.img-ahci.gz /boot/initrd-2.6.22.6.img-ahci

Build up your skills to develop Open stack

Doc In Repository

Please read the docs in /opt/stack/nova/doc/source/devref first. Then you will get some ideas about Open Stack. Read up these files, you can ignore them if you already know them.

http://docs.openstack.org/api/quick-start/content/index.html#Compute_API_Quick_Start

  • gerrit.rst

It introduce the gerrit work flow.

  • development.environment.rst

It introduce how to set up development environment.

  • architecture.rst

Introduce the profile of the Open Stack.

  • rpc.rst

Open Stack rpc is different with the traditional SUN IPC, it base on a AMQP broker. http://www.rabbitmq.com/getstarted.html

Learn more about implementation of rpc. Please seen the Open Stack Common Library.

$ git clone git://git.openstack.org/openstack/oslo.git

Also learn more about kombu:

http://kombu.readthedocs.org/en/latest/

  • threading.rst

All OpenStack services use *green thread* model of threading, If your know coroutine, you will learn greenthread quickly.

All the above files also can be access by this url link.

http://docs.openstack.org/developer/nova/devref/rpc.html

import component

You had better do some exercise about some technologies that Open Stack uses. This is helpful for you to know Open Stack.

  • Rabbitmq python tutorials

Tutorial:

https://github.com/rabbitmq/rabbitmq-tutorials/
http://wenku.baidu.com/view/800285ea0975f46527d3e19b.html (a Chinese Document for Rabbitmq)
http://www.openstack.cn/p136.html (a Chinese Simple Document for Rabbitmq)

Tutorial Source Code:

https://github.com/rabbitmq/rabbitmq-tutorials/

Tutorial Source Code:

http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html
  • WSGI And eventlet

Read the Red hat REST API Guide. It is useful to understand REST API. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Virtualization/3.0/html-single/REST_API_Guide/index.html#sect-REST_API_Guide-Common_Features-Resources-Creating_Resources

Join The Open Stack Community to do Contributions

  • Join the IRC

IRC: https://wiki.openstack.org/wiki/IRC

  • Subscribe the mail-list

Dev: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

General: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack

  • To submit the patch

Workflow: https://wiki.openstack.org/wiki/Gerrit_Workflow

Play with Open Stack

DashBoard

http://docs.openstack.org/user-guide/content/log_in_dashboard.html

Try to access http://localhost/

CURL

http://docs.openstack.org/api/quick-start/content/index.html#Compute_API_Quick_Start

I have write a small script to get token ID, as follow, you can name it as “get-token”:

#!/bin/bash
return=`curl -i 'http://127.0.0.1:5000/v2.0/tokens' -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{"auth": {"tenantName": "admin", "passwordCredentials": {"username": "admin", "password": "123"}}}'`
echo $return
echo "-----------------------------------------------------------------------------"
ID=""
for x in $return; do
if [ "x$ID" = "xtokenID" ] ;then
id=`echo $x | tr -d '[",]'`
export TOKEN=$id
echo "TOKEN=$id"
ID=""
break
fi
if [ "x$x" = 'x"id":' ] ;then
ID="tokenID"
fi
done
echo ""

This script just is a sample, you can improve it.

Run it by

$ . get-token

Then you can run other commands use the TOKEN environment value, such as get all the tenents, as follow:

$ curl -i -X GET http://127.0.0.1:35357/v2.0/tenants -H "User-Agent: python-keystoneclient" -H "X-Auth-Token: $TOKEN"

Open Stack Client

http://docs.openstack.org/api/quick-start/content/index.html#Compute_API_Quick_Start

You should export the OS_USERNAME and OS_TENANT_NAME environment by the follow command firstly.

$ cd devstack/
$ . openrc OS_USERNAME OS_TENANT_NAME

http://docs.openstack.org/juno/config-reference/content/section_compute-scheduler.html

update your /etc/nova/nova.conf

Add the follow option to “[DEFAULT]” section.

$ grep -e DEFAULT -e pci_passthrough -e pci_alias -e scheduler_available_filters /etc/nova/nova.conf
[DEFAULT]
pci_passthrough_whitelist={"product_id":"10fb", "vendor_id":"8086", "deviceids":"0000:01:00.0, 0000:01:00.1"}
pci_passthrough_whitelist={"product_id":"8c20", "vendor_id":"8086", "deviceids":"0000:00:1b.0"}
pci_alias = {"vendor_id":"8086", "product_id":"10fb", "name":"intelnic"}
scheduler_available_filters = nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter

Create a instance with pci-passthrough device.

https://wiki.openstack.org/wiki/Pci_passthrough

$ nova flavor-list
$ nova flavor-key m1.tiny set pci_passthrough:alias=intelnic:1
$ nova boot pci --flavor m1.tiny --image=cirros-0.3.2-x86_64-uec

Debug with Open Stack

I usually use “print” for debugging. The “print” is on the stack screen terminal.

$ cd devstack/
$ ./rejoin-stack.sh

Or

$ screen –ls
There is a screen on:
13846.stack
$ screen -r stack

Some useful operation:

run a command by “Ctrl + A + :”,  you can input help command to show more info.
Swith to any window by “Ctrl + A + ' ”, input the windows number you want to switch.
Swith to any window by “Ctrl + A + " ”, select the windows you want to switch.

write testcase

https://wiki.openstack.org/wiki/SmallTestingGuide

openstack 开发step-by-step的更多相关文章

  1. Step by Step: 基于MFC下的COM组件开发-Helloworld

    http://blog.csdn.net/sybifei/article/details/45008745 [这篇文章有问题, 仅供参考] http://blog.csdn.net/define_us ...

  2. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  3. Step by step Install a Local Report Server and Remote Report Server Database

    原创地址:http://www.cnblogs.com/jfzhu/p/4012097.html 转载请注明出处 前面的文章<Step by step SQL Server 2012的安装 &g ...

  4. WPF Step By Step 系列-Prism框架在项目中使用

    WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...

  5. WPF Step By Step 完整布局介绍

    WPF Step By Step 完整布局介绍 回顾 上一篇,我们介绍了基本控件及控件的重要属性和用法,我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景,当 然这些都是本人在实际项目中的 ...

  6. WPF Step By Step 控件介绍

    WPF Step By Step 控件介绍 回顾 上一篇,我们主要讨论了WPF的几个重点的基本知识的介绍,本篇,我们将会简单的介绍几个基本控件的简单用法,本文会举几个项目中的具体的例子,结合这些 例子 ...

  7. WPF Step By Step 系列 - 开篇 ·

    WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...

  8. WinForm RDLC SubReport Step by step

    最近在做的一个PO管理系统,因为要用到订单打印,没有用水晶报表,直接使用VS2010的Reporting.参考了网上的一些文章,但因为找到的数据是用于WebForm的,适配到WinForm有点区别,竟 ...

  9. Struts2+Spring+Hibernate step by step 11 ssh拦截验证用户登录到集成

    注意:该系列文章从教师王健写了一部分ssh集成开发指南 引言: 之前没有引入拦截器之前,我们使用Filter过滤器验证用户是否登录,在使用struts2之后,全然能够使用拦截器,验证用户是否已经登录, ...

  10. 持续交付工具ThoughtWorks Go部署step by step

    持续交付工具ThoughtWorks Go部署step by step http://blogs.360.cn/360cloud/2014/05/13/%E6%8C%81%E7%BB%AD%E4%BA ...

随机推荐

  1. 正则表达式之match与exec【转的 楼兰之风】

    彻底领悟javascript中的exec与match方法 阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code: var someText= ...

  2. LINUX用户管理——/etc/passwd文件详解

      输入vi /etc/passwd 可以查看此文件的内容 .本机内容如下: [root@localhost ~]# vi /etc/passwdroot:x:0:0:root:/root:/bin/ ...

  3. Learn X in Y minutes(python一页纸代码)

    一篇非常好的文章,解释了python基本语法的方方面面: # Single line comments start with a hash. """ Multiline ...

  4. SQL分类取每一类第一项

    实际应用中经常会碰到这样的需求,在给定的数据集中要求返回每一类型中最大的一条,抑或是最小的一条,抑或是按时间排序最近的一条等等.很多人面对这样的需求显得束手无策,其实这个需求实现有很多种方法,今天给大 ...

  5. 负margin新解

    第一篇 我知道你不知道的负Margin 分类: Html/CSS | 转载请注明: 出自 海玉的博客 本文地址: http://www.hicss.net/i-know-you-do-not-know ...

  6. 浅谈android的selector,背景选择器

    shape和selector的结合使用 (2013-04-07 11:11:00) 转载▼   分类: android 1.Shape (1)作用:XML中定义的几何形状 (2)位置:res/draw ...

  7. C-Free 您不能使用调试解决方案

    什么时候C-Free 当您调试 找不到gdb.exe解决方案 http://www.programarts.com/ C-Free 官方网站 下载Mingw或者其他编译器 版权声明:本文博主原创文章. ...

  8. 批处理就是windows的杰作啊

    今天要为了解决vs不能同时开启调试和编写的问题,我就上网查找了一些批处理的命令,用批处理调用exe,和打开txt,虽然一行代码就解决了但是我没用过啊,很陌生. call  路径\a.exe  就相当于 ...

  9. 此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行

    错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 ...

  10. [转]Visual Studio 2008中如何比较二个数据库的架构【Schema】和数据【Data】并同步

    使用场景: 在团队开发中,每一个人都有可能随时更新数据库,这时候数据库中数据和架构等信息都会发生变化.如果更新不及时,就会发生数据错误或数据丢失的风险,影响团队的开发效率和 项目进度,这时候我们该怎么 ...