设为首页 收藏本站
查看: 1411|回复: 0

[经验分享] OpenStack实践之旅

[复制链接]

尚未签到

发表于 2018-6-1 12:30:17 | 显示全部楼层 |阅读模式
  OpenStack是一套用来管理虚拟机的平台软件。它不是一个单一的软件,而是集成了很多个组件用来协同合作。简单的来说,譬如有十台服务器,在
VMware的情况下,我们在每台服务器上安装esx或者esxi,然后装一台vcenter,在vcenter的管理界面里把十台服务器的esx通过域
名或者ip加入,就能在vcenter里面统一管理。类似的,红帽也有virsh这种管理虚拟机的程序。
  相关阅读:在Ubuntu上安装和配置OpenStack Nova
  在这里我不介绍其他的云平台的管理软件,只是介绍如何从技术角度来使用OpenStack。如果要作为生产环境的话,你还需要考虑更多,譬如架构,网络拓扑,存储的方式,节点的分布等等。
  在本篇文章里,我将介绍采用ec2兼容认证的方式 。所有组件安装在一台controller上。
  关键字定义
  控制端:类似vcenter的管理系统。
  节点:类似安装了esx的服务器。
  nova组件:安装在节点上,让节点能按照控制端的命令来操作节点上的虚拟机或者存储。
  glance组件:用来管理镜像。
  环境准备
  ubuntu 11.10,服务器双网卡
  步骤
  安装完基本的操作系统后
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install bridge-utils  #安装网桥软件  配置网络接口
  在这里我的架构是eth0连接了外网,即我們可以访问的网口。eth1做了网桥,和节点之间通过一个交换机连接。这样的好处是,内部节点和控制器的流量都走br100的交换机,而不会影响虚拟机上的应用使用的网络。
$ sudo vi /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.200.21
netmask 255.255.255.0
network 192.168.200.0
broadcast 192.168.200.255
gateway 192.168.200.10
auto br100
iface br100 inet static
bridge_ports eth1
bridge_stp off
bridge_maxwait 0
bridge_fd 0
address 10.200.200.2
netmask 255.255.255.0
$ sudo /etc/init.d/networking restart  初期准备工作做好,接下来就是要安装关于nova,glance等组件
$ sudo apt-get install -y rabbitmq-server #安装MQ消息組件
$ sudo apt-get install -y python-greenlet python-mysqldb #安装Python dependencies  接下来安装各个nova组件及依赖
$ sudo apt-get install nova-volume nova-vncproxy nova-api nova-ajax-console-proxy
$ sudo apt-get install nova-doc nova-scheduler nova-objectstore
$ sudo apt-get install nova-network nova-compute
$ sudo apt-get install glance  安装euca2ools和unzip
$ sudo apt-get install -y euca2ools unzip  接下来我们安装数据库,这裡我选择了MySQL,其实个人觉得PostgreSQL更好。
$ sudo su -
# MYSQL_PASS=nova 设定mysql的密码和nova数据库的密码
# cat <<MYSQL_PRESEED | debconf-set-selections
>mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS
>mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS
>mysql-server-5.1 mysql-server/start_on_boot boolean true
>MYSQL_PRESEED
# apt-get install -y mysql-server
# exit 退出root环境
$ sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 修改my.cnf配置文件
$ sudo service mysql restart
$ MYSQL_PASS=nova 在普通用户环境下把密码再次设置一下变量
$ NOVA_PASS=notnova 这是nova数据库的密码
$ sudo mysql -uroot -p$MYSQL_PASS -e 'CREATE DATABASE nova;' 创建一个名字为nova的数据库,这裡建议新手使用nova的名字,如果这裡换别的名字,那麽在nova的配置文件裡面也需要更改
$ sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO 'nova'@'%' WITH GRANT OPTION;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "SET PASSWORD FOR 'nova'@'%' = PASSWORD('$NOVA_PASS');"  至此,nova,glance的安装部分完成,接下来是配置。
  nova配置
$ sudo vi /etc/nova/nova.conf
--dhcpbridge_flagfile=/etc/nova/nova.conf
--dhcpbridge=/usr/bin/nova-dhcpbridge
--logdir=/var/log/nova
--state_path=/data/openstack/nova 这裡的/data/openstack/nova是我新建的一个卷和目录,确保你有这个,并且要属于nova用户,或者你也可以使用他的默认设置
--instances_path=/data/openstack/nova/instances 修改了默认存放instances的地方
--lock_path=/var/lock/nova
--force_dhcp_release=True
--use_deprecated_auth
--iscsi_helper=tgtadm
--verbose
--scheduler_driver=nova.scheduler.simple.SimpleScheduler
--network_manager=nova.network.manager.FlatDHCPManager
--my_ip=10.200.200.2 这是我的内网ip地址
--public_inter>
--sql_connection=mysql://nova:notnova@localhost/nova 刚才建立的数据库
--libvirt_type=kvm
--api_paste_config=/etc/nova/api-paste.ini
--image_service=nova.image.glance.GlanceImageService
--ec2_dmz_host=192.168.200.21
--ec2_url=http://192.168.200.21:8773/services/Cloud
--rabbit_host=localhost
--glance_api_servers=10.200.200.2:9292
--flat_network_bridge=br100
--flat_inter>
--flat_network_dhcp_start=10.200.200.51 指定从instances分配从51开始,但貌似这个选项不起作用
--fixed_range=10.200.200.0/24 这个选项指定instances的网段
--flat_injected=False
--multi_host=1 使用multi_host,即以后可以在节点上也使用nova-network
--libvirt_use_virtio_for_bridges 使用virtio做instances的网卡模式  然后是glance的:
$ sudo vi /etc/glance/glance-api.conf  修改filesystem_store_datadir参数,来指定你需要存放images的目录,当然属主也要改成glance用户。
$ sudo vi /etc/glance/glance-registry.conf  这个文件可以选修改sql_connection参数来指定你的数据库。
  如果你要修改,使用mysql里面的数据库,请确保在mysql裡面建立了一个相对应的数据库
sql_connection = mysql://nova:notnova@localhost/glance  这是我的配置,我在mysql建立了一个glance的数据库
$ sudo chown -R root:nova /etc/nova  改变一下/etc/nova的属主
$ sudo chmod 640 /etc/nova/nova.conf  重启各个服务
$ sudo restart libvirt-bin
$ sudo restart nova-network
$ sudo restart nova-compute
$ sudo restart nova-api
$ sudo restart nova-objectstore
$ sudo restart nova-scheduler
$ sudo restart glance-registry
$ sudo restart glance-api  注意:我们这裡没有起nova-volume,是因为虽然我们安装了volume,但是volume需要单独的一个vg来使用,我们现在还没配置volume,所以起不来。
  这裡可能network服务和compute没法起来,先暂时不要去管。
  接下去,我们做配置nova的运行环境了
$ sudo nova-manage db sync
nova-manage user admin <user_name>  在这裡我们可以创建一个用户,如
$ sudo nova-manage user admin test  创建成功屏幕上会返回下面这样的输出:
export EC2_ACCESS_KEY=d6aa7747-4324-4abc-9604-4f7d6a2f8f3f
export EC2_SECRET_KEY=2b204b75-da2d-47b8-ba7a-611d71f0ecbfnova-manage project create <project_name> <user_name>  创建一个项目,属于刚才我们建的那个用户 如:
$ sudo nova-manage project create test-proj testnova-manage network create --help  创建一个实例的网络,如:
$ sudo nova-manage network create --label=test-net --fixed_range_v4=10.200.200.0/24 --num_network=1 --network_size=256  再次启动刚才失败的服务
$ sudo start nova-network
$ sudo start nova-compute
$ sudo start nova-scheduler  怎么样,成功了吧。
  另外,在起每个服务的时候,最好看一下日志,譬如sudo tail -f /var/log/nova/nova-network来确定有没有报错,也可以用ps aux | grep [n]ova-network来确认服务有没有开启。如果起服务失败,你确认好原因,修改好以后,需要用sudo start而不是sudo restart来起
  好了。这样计算的环境就部署好了。我们可以用命令来看一下状态:
$ sudo nova-manage service list
$ sudo nova-manage network list  如此这般。
  接下来创建证书,以方便我们使用euca工具
$ cd
$ mkdir creds
$ sudo nova-manage project zipfile test-proj test creds/novacreds.zip
$ unzip creds/novacreds.zip -d creds/
$ source creds/novarc  注意每次你重新登录shell的时候,需要source一下这个认证文件才能使用euca;当然你也可以把novarc的内容>>到你的用户profile文件或者bashrc
  OK,完成,我们可以用工具来看一下
$ euca-describe-availability-zones verbose
VAILABILITYZONE nova available
AVAILABILITYZONE |- nova-test
AVAILABILITYZONE | |- nova-network enabled :-) 2011-10-17 04:45:44
AVAILABILITYZONE | |- nova-compute enabled :-) 2011-10-17 04:45:45
AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-10-17 04:45:45  至此,成功启用了服务。当你发现服务不能正常使用时,用ps aux | grep nova检查一下服务有没有开启,并需要详细观察/var/log/nova/目录下的各个服务的日志文件,这样才能获得更进一步的信息。
  接下来我们可以用kvm来创建一个image镜像
$ sudo apt-get install kvm-pxe  安装一下这个,否则运行kvm的时候会有个警告
$ kvm-img create -f raw server.img 5G
$ sudo kvm -m 1024 -cdrom rhel5.iso -drive   file=server.img,if=virtio,index=0 -boot d -net nic -net user -nographic -vnc :0  这里我们使用RHEL 5的iso,运行完这个命令,可以用vnc连接。
  在你的本机连接服务器:ssvncviewer 192.168.200.21 :0
  打开vnc你就可以看到安装界面。
  安装完以后,把下面一段写入rhel镜像的/etc/rc.local的开头:
depmod -a
modprobe acpiphp
# simple attempt to get the user ssh key using the meta-data service
mkdir -p /root/.ssh
echo >> /root/.ssh/authorized_keys
curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
echo "AUTHORIZED_KEYS:"
echo "************************"
cat /root/.ssh/authorized_keys
echo "************************"  保存退出,这样image就做好了。
  使用glance上传镜像
$ glance --verbose add name="rhel5" disk_format=raw is_public=true < server.img  同时你应该观察/var/log/glance/registry和api的log。成功之后,用
$ glance index  看看镜像列表。
  启动你的实例
$ euca-describe-images  查看你现在可用的image,输出类似下面这样:
IMAGE ami-00000003 server.img  记住这里ami-000000003这个image号。
$ euca-run-instances -t m1.tiny ami-00000003  启动ami-00000003镜像的实例。-t指明了实例的类型,类型规定了cpu,内存,磁盘大小等信息。
  观察/var/log/nova/nova-api.log nova-scheduler.log,nova-compute,nova-network.log的输出信息,同时你也可以使用vnc连接serverip:0来看实例的console。
  用命令$ euca-describe-instances来查看你目前的实例情况。第一次启动实例会比较慢,因为需要把image从glance拷贝到nova下的实例目录。
  由于nova目前发展的很快,diablo的release版本功能可以完成日常的一些需求。但是开发版本的nova可以更好的结合keystone,novaclient,dashboard等一些其他的项目,使得OpenStack更加健全。有兴趣的朋友,可以在生产环境使用repo的安装方式,在测试环境测试开发版本。我本人由于在生产环境中使用了git方式安装的开发版本,因此后续更加完善的整合,我都将以开发版本的形式出现。当然使用开发版本的话,会有更多的烦恼,但也同样有更多的乐趣和动手的实践,能更进一步了解其工作的原理机制。
  

  

  

  可能很多人从Ubuntu和HP的新闻当中听说过OpenStack,知道它跟云计算相关,可是OpenStack究竟是做什么的,可能不少人还只有比较模糊的感觉。而在之前一篇《OpenStack实践之旅:安装配置篇》发布之后,有读者询问有没有具体的应用。那么接下来,本文将以公司实际应用场景为例,介绍OpenStack能用来做什么。
  OpenStack是一个云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些具体的工作。要想直观的了解它是什么样子的,请参阅《OpenStack详细解读:定义,好处与使用实例》一文。
  就目前而言,OpenStack在国外慢慢的流行开来,不少企业和个人也在对它进行二次开发。从我个人理解,OpenStack作为一种免费的开源
软件,可以用在中小企业内部,可以给公司内部的开发测试部门使用,也可以跑一些应用服务。另外一种就是提供对外服务,好比作云服务的企业会考虑对
OpenStack进行二次开发和包装,集成或者新增一些特定的功能或者管理界面。我觉得OpenStack不光光能在1分钟给你想要的image操作系
统,也可以做到5分钟能帮你生成一台app节点(应用服务器)加入到业务中去。后者才是我们现在更需要去做的,从irc聊天室、邮件列表、以及一些
wiki的内容来看,老外已经在这方面走在了前面。
  在这篇文章里,我将介绍一下一个简单的、可用在公司内部的OpenStack构建起来的管理平台。它看上去是这样的:
DSC0000.png

  这个环境一共用了6台8核的服务器。除去控制器的核心不算,一共有40个可用于计算的核心。其中:

  •   启动了4台的cpu作为计算节点用来跑虚拟机(nova-compute)
  •   一台服务器安装了nova,glance,keystone,dashboard的所有服务和mysql数据库作为控制节点
  •   一台启用了nova-volume服务,提供给虚拟机额外的块存储
  这样图中显示的40 cores就是总共的cpu,已经用了16个;第二列是内存,下面显示了有两个部门。分别跑了2个和5个实例。
DSC0001.png

  这张图展示的是Images,通俗的讲就是预先做好的系统或者模板。images是通过名叫glance的这个组件来管理(这下知道glance的
用处了吧),它提供命令接口允许用户把自己做好的系统(支持img,qcow2等格式),至于如何用kvm做自己的img,可以参考这份文档。
  在图中可以看出,有CentOS,Windows
XP,RHEL的模板。另外3个image是用户自己做的,简单的是就是用户使用我做的RHEL(里面只装了一些基本的系统软件)生成虚拟机实例,然后在
虚拟机中配置了他自己需要的软件应用。配置完成之后,保存为rhel_app这个image,这样下次有需要的时候,就可以直接从rhel_app启动新
的实例,1分钟之内就可以使用他需要的应用。
DSC0002.png

  这张图显示的就是目前跑在私有云上的实例。我们可以看到右边有四个选项,Terminate是撤销,也就是删除虚拟机实例,Reboot重
启,Console Log显示终端上的信息,VNC
Console这个是直接在web上面开个vnc窗口显示console,另外还有Snapshot的按钮,这个按钮会出现在以用户自己身份登陆的界面
上。目前我是以admin身份登陆。
  限于篇幅原因,还有很多tab页面我不做介绍了。总的来说,你只要给一个用户一个帐号,他就能从image选择不同配置(cpu,内存,磁盘)的实
例,分配ip,开端口,登陆,完全自主的操作,不需要管理员去干涉。如果你觉得这套管理工具对你或者你们企业来说有一定的帮助,想要尝试一下,或者基于它
来作二次开发(因为OpenStack是完全开源的),可以继续往下看,我将会简单介绍一下如何构造这么一个系统
DSC0003.png

  这张图是个简单的拓扑图。每台host都有两块网卡,连接switch1的是外部访问接口,就是用户可以直接连接到的ip网络,这个网络用来提供给
虚拟机以便用户使用。switch2使用一个内部的网络,即对用户不可见,我们可以设定一个私有网络,这个网络用来node节点和controller之
间的网络通讯,image的传输,nova-volume和node之间的iscsi的数据传输。
  环境准备
  所有的服务器都安装Ubuntu 11.10。
  网络配置
  参照上一篇文章中配置网络接口那一部分,请把br100的设置controller为10.200.200.1,node1为2,以此类推。
  时间同步
  时间同步很重要,保证你各个节点之间,通常在controller上配置ntp服务器。其余节点的配置文件以controller的ip为ntp服务器。
  安装控制器
  在这里我以controller的外网ip为10.11.3.62,内网为10.200.200.1,安装过程参照了devstack的脚本 ,我注释掉了脚本里的swift以及一些目前还用不到的部分。设置了一些自己的环境参数。
git clone git://github.com/livemoon/mydevstack
cd mydevstack  修改localrc的内容:
DEST这个你可以设置为你自己想要安装的目录,我这里用/data/stack
FIXED_RANGE这个很重要,简单的说就是switch2的网段
FLOATING_RANGE外网的地址网段
FLAT_INTERFACE这个就是你绑定网桥的那个网口。和你/etc/network/interfaces里一致
MYSQL_USER脚本里默认使用root,我使用了一个别的用户。这个随便你
然后执行脚本./stack.sh  一开始会问你几个密码,分别是mysql,rabbitmq,service_token,horizon and keystone
admin。你可以按照自己的输入,只是要注意别搞混了。接着它就会运行下载安装,由于可能网络的原因会导致安装中途断掉,遇到这种情况,重新运行脚本即
可。脚本执行完之后,屏幕上会出现“stack.sh completed in $SECONDS seconds.”
  这时候,打开你的web浏览器。输入
“http://$HOST_IP/”,$HOST_IP/就是我的10.11.3.62,输入你自己的,如果出现登陆界面,输入admin和刚才的
horizon and keystone admin这个密码。如果登陆成功,那就说明你完成了controller的安装。
  默认情况下,controller上面会起所有nova的服务,你应该可以看到你有几个cpu和内存可以使用,现在已经可以使用基本的功能了。这个
时候,你的controller其实即是控制节点,也是计算节点(因为起了nova-compute和nova-network服务)。
  以上就是一个最简单的搭建教程。如果你只是想看一下界面,知道它是怎么样的一个东西,那么现在已经足够了。
  在下一篇中,我将介绍如何平行的添加节点,制作镜像,进行快照,设定实例的配置选项。如果你想继续深入,把OpenStack作为一个可以研究的对象的话,请先读懂devstack的脚本,然后我们再深入。
  作者简介:livemoon(gtalk: mwjpiero@gmail.com),小小SA,关注mac,BSD,openstack,开源技术,webos。座右铭:非淡泊無以明志,非寧靜無以致遠
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-500260-1-1.html 上篇帖子: 开源云平台OpenStack那些事儿 下篇帖子: OpenStack Juno系列之L3 HA agent and VRRP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表