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

[经验分享] openstack kilo

[复制链接]

尚未签到

发表于 2018-6-1 09:51:41 | 显示全部楼层 |阅读模式
  说明:因为个人兴趣,对openstack有浓厚的兴趣。在网上无意间看到了docker所以突发奇想做了这个实验。现拿出来给大家分享。此文只适合参考,不可直接使用到生产环境。因为里面有很多的系统漏洞,可能会被***利用。本文只用于大家学习研究,为大家降低docker与openstack结合的门槛,也降低了硬件门槛,提供一些广阔的思路。

  此文在两个QQ群和百度文库中有过分享。文中也有借鉴一些网络的资料,在这里一并感谢那些前辈的资料和思路。因为不知道名字只能一起统称了!
  

  

openstack-kilo版本基于docker的云计算





  目录
  简介... 2
  第一章、环境搭建... 2
  第二章、创建openstack控制组件... 5
  一、openstack镜像制作:... 5
  二、创建mysql数据库镜像:... 6
  三、创建rabbitmq-server镜像... 6
  四、创建openstack-keystone镜像... 7
  五、创建glance组件镜像... 8
  六、nova计算节点和nova控制节点安装... 9
  七、创建网页管理界面... 10
  第三章、更改nova computer配置,使用docker启动实例。... 10
  nova-docker使用注意事项:... 11
  报错日志处理:... 11
  第四章、排错和使用举例... 12

简介
  说明:本文介绍使用docker作为openstack-kilo组件的容器进行安装。并且使用docker服务作为计算节点的虚拟机来启动实例。这样做有几个好处:
  1、kilo组件除计算节点以外的关键组件都被放在了docker容器中,在云计算组件需要升级和补丁修复的时候可以无缝的进行切换。把升级完的镜像启动一个容器即可,如果升级失败只需要把新的容器停掉。如果成功只用把老版本的容器停掉。
  2、节省资源,在本文中所有的openstack组件都启动在一台虚拟机中。虚拟机1G内存,1CPU。有了docker的帮助让很多没有硬件的人也可以玩上openstack的分布式部署充分了解openstack各个组件间的协作关系。
  
  PS:因为没有DNS服务器,所以所有配置文件中的主机名称都要替换成相应的IP地址。在生产环境中如果使用这种方式强烈建议配置DNS服务器,然后在配置文件中使用主机名。这样在自动故障恢复的时候更加智能化。
第一章、环境搭建
物理环境使用两台物理主机,一台交换机分配两个网段。分别是192.168.1.1/24172.10.10.1/24172.10.10.1/24作为管理网段,192.168.1.1/24作为模拟公网网段。另外实例之间使用10.1.1.1/24作为实例分配网段。
  另外为了管理方便,会为docker容器模拟openstack组件的服务器分配192.168.1.1172.10.10.1两个网段的地址。
  首先需要在两台物理机上安装好docker服务,一台控制端上面使用docker模拟多台控制组件服务器,一台作为计算节点docker模拟openstack实例启动。
  此处操作系统使用centos7作为基础,安装docker很简单使用yum install docker就安装好了。配置控制节点物理基础(注意:配置docker的步骤需要在基础镜像包之后再配置。):注意,其中有些内容需要***才能得到安装源和网页。请自备***
  接下来是制作docker基础镜像:
  启动systemctl start docker程序
  首先获取一个镜像,docker pull centos 注意这获取方式需要***才能取得。
  这样取得的镜像是没有ssh的,只是一个很基础的镜像包。接下来我们慢慢把带有ssh和一些基本工具的镜像包制作出来。
  这里使用Dockerfile文件来创建镜像,编辑Dockerfile
  FROM centos
  MAINTAINERdenwrok@xxx.com   #这个可以没有。
  COPY shadow/etc/shadow  #把自己基础系统的shadow文件复制到和Dokerfile相同的目录,不然你根本就ssh进去不了容器。用这个文件替换镜像中的文件,root密码就和你本机系统一样了。
  ENV containerdocker
  RUN yum update -y
  RUN yum install -ypython-setuptools
  RUN (cd/lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done); \
  rm -f/lib/systemd/system/multi-user.target.wants/*;\
  rm -f/etc/systemd/system/*.wants/*;\
  rm -f/lib/systemd/system/local-fs.target.wants/*; \
  rm -f/lib/systemd/system/sockets.target.wants/*udev*; \
  rm -f/lib/systemd/system/sockets.target.wants/*initctl*; \
  rm -f/lib/systemd/system/basic.target.wants/*;\
  rm -f/lib/systemd/system/anaconda.target.wants/*;
  RUN cp/usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  RUN yum install –yopenssh-server
  RUN systemctlenable sshd
  VOLUME["/sys/fs/cgroup"]
  CMD["/usr/sbin/init"]
  都准备好以后就可以使用 docker build -t="base:v1.2_ssh" . 命令创建镜像了。-t参数是新建镜像的名称和版本号,用冒号隔开,如果不写版本号默认名字交latest
  Step 8 : EXPOSE 22
   ---> Using cache
   ---> 126b1779d925
  Step 9 : CMD /usr/bin/supervisord-c /etc/supervisord.conf
   ---> Using cache
   ---> 8b0482f22d97
  Successfully built8b0482f22d97
  出现这些信息,最后一行表示成功了。
  docker images可以查看到新建的镜像。
  使用docker run –ti –name test1 base:v1.2_ssh/bin/bash可以查看是否能创建容器。如果能进入基本表示镜像可用。
  接下来就使用脚本来创建一个可以和物理机网段相同的容器。
  脚本 vi addhost.sh
  #!/bin/bash
  docker run --privileged=true-d --net=none --name $1 $2
  sleep 5s
  Cid=`docker ps -a| grep $1 |awk '{print $1}'`
  pid=`dockerinspect -f '``.`State`.`Pid`' $Cid `
  mkdir -p/var/run/netns
  ln -s /proc/$pid/ns/net/var/run/netns/$pid
  ip link add${pid}A1 type veth peer name ${pid}A2
  brctl addif br0${pid}A1
  ip link set${pid}A1 up
  ip link set${pid}A2 netns $pid
  ip netns exec $pidip link set dev ${pid}A2 name eth0
  ip netns exec $pidip link set eth0 up
  read -p"Please input container IP on eth0(172.0.0.1/24)" IPADDR
  ip netns exec $pidip addr add $IPADDR dev eth0
  echo "`echo$IPADDR | awk -F/ '{print $1}'`    $1" >> /etc/hosts
  read -p "Doyou have any net interface?(Y/N)" CH
  if ["$CH" = "Y" ]; then
  ip link add${pid}B1 type veth peer name ${pid}B2
  brctl addif br1${pid}B1
  ip link set${pid}B1 up
  ip link set${pid}B2 netns $pid
  ip netns exec $pidip link set dev ${pid}B2 name eth1
  ip netns exec $pidip link set eth1 up
  read -p"Please input container IP on eth0(172.0.0.1/24)" IPADDR
  ip netns exec $pidip addr add $IPADDR dev eth1
  echo"$IPADDR   $1" >>/etc/hosts
  fi
  read -p"Please input container default gateway address." GATEWAY
  ip netns exec $pidip route add default via $GATEWAY
  
  有必要说一下使用方法,sh addhost.sh test1 bash_ssh:v1.1
  第一个参数test1是容器的名称,第二个参数bash_ssh:v1.1是镜像的名称。脚本会指引输入网卡的IP地址和网关。默认网关只能有一个,最好是可以访问外网的那个网段的网关。当然不需要上外网的话当然可以随便。使用docker ps –a命令查看容器状态后就可以使用ssh 容器名称链接到容器了。如ssh test1
  另外再给一个删除容器的脚本vi delhost.sh
  #!/bin/bash
  Cid=`docker ps -a| grep $1 |awk '{print $1}'`
  pid=`dockerinspect -f '``.`State`.`Pid`' $Cid `
  docker stop $1
  docker rm $1
  sed -i /$1/d/etc/hosts
  rm -rf/var/run/netns/$pid
  这里只有一个参数,就是传入容器名称如 sh delhost.sh test1
  到此基础镜像就算制作完成了。
为了适应docker上安装openstack的物理环境,需要多docker进行一些配置。/etc/sysconfig/docker打开配置文件添加桥接端口OPTIONS='-b=br0'
为了方便管理桥接网卡为docker服务,需要安装bridge-utils包。
  更改网络配置:
  桥接口物理口
  这里需要配置两个桥接网口br0br1分配桥接到两个物理网卡上。
  PS 1:如果进入新建的容器后无法访问外网,请检查docker的配置和网卡是否开启混杂模式。
  PS 2:容器的时间问题。因为openstack对时间比较敏感,所以需要在控制节点物理机中启用NTP服务。容器在启动的时候会使用主机的时间,另外计算节点物理机也需要和它进行同步。
  下面将以此为基础分别创建openstack的其它组件。
  Docker资料参考:http://dockerpool.com/static/books/docker_practice/index.html
  
第二章、创建openstack控制组件
说明:先说下网络规划,网段分配192.168.1.121-192.168.1.200172.10.10.121-172.10.10.200
注意:在某些时候国外的网站可能被墙,需要使用******后才能访问。网络问题请自行解决。
一、openstack镜像制作:
上面只是制作了centos的镜像包,下面将再制作一个openstack的镜像。创建一个Dockerfile
FROM base:v1.2_ssh
RUN yum install -yhttp://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
RUN yum install -yhttps://repos.fedorapeople.org/repos/openstack/openstack-kilo/rdo-release-kilo-1.noarch.rpm
RUN yum upgrade -y
RUN yum install -y openstack-selinux
CMD ["/usr/sbin/init"]
  运行docker build -t "openstack:base". 命令生成openstack的基本包。上面rpm包的地址和路径可能会与openstack官方文档中不一样,因为官方文档路径已经失效。如果报错请自行查找路径!
二、创建mysql数据库镜像:
  创建一个给数据库使用的数据卷容器
  docker run -d -v/data --name dbdata base:v1.2_ssh /bin/bash
  mkdirdockerfile/openstack-db
  cddockerfile/openstack-db
  创建Dockerfile
  FROMopenstack:base
  RUN yum install -ymariadb mariadb-server MySQL-python
  COPY mariadb_openstack.cnf/etc/my.cnf.d/
  RUN systemctlenable mariadb
  CMD["/usr/sbin/init"]
  创建配置文件vi /etc/my.cnf.d/mariadb_openstack.cnf
  [mysqld]
  bind-address = 0.0.0.0
  default-storage-engine= innodb
  innodb_file_per_table
  collation-server =utf8_general_ci
  init-connect ='SET NAMES utf8'
  character-set-server= utf8
  运行docker build -t openstack:db . 命令制作DB镜像。
  修改./addhost.shdocker run一行先注释一下,复制后添加
  docker run --privileged=true-d --net=none --volumes-from dbdata --name $1 $2
  然后使用./addhost.sh  test1 openstack:db命令创建一个容器,使用ssh链接上以后运行mysql_secure_installation ,根据提示操作。
  修改vi /etc/my.cnf
  datadir=/data
  完成以后再次创建一个镜像
  docker commitb8b9eff9264c openstack:db_v1.0  这个b8b9eff9264c替换成上面容器的ID使用docker ps –a命令查看。
  到此数据库镜像创建完成,使用./addhost.sh openstack-db openstack:db_v1.0命令启动一个容器。过1分钟左右就能访问数据库了。
  注意:容器的网络配置在重启物理服务器后会自动失效,可以编写一个脚本自动启动容器并添加相应IP地址。
三、创建rabbitmq-server镜像
  addhost.sh脚本启动一个以openstack:base的容器。
  ssh 链接到容器后进行操作。
  此处内容和openstack官方文档一致
  yum installrabbitmq-server
  systemctl enablerabbitmq-server
  systemctl startrabbitmq-server
  rabbitmqctladd_user openstack rabbit_password
  rabbitmqctlset_permissions openstack ".*" ".*" ".*"
  好,完成以后在物理主机上创建一个rabbit的镜像。
  docker commitc1428dcc7d7b openstack:rabbit
  docker images查看镜像是否创建成功。成功后使用./delhost.sh test1删除刚才的容器。
  再使用./addhost.sh脚本创建一个rabbit容器。记得前面创建数据库的时候修改了这个脚本,要改回来。不然每个容器都有那么个数据库目录,不小心操作删除掉就完了。
四、创建openstack-keystone镜像
  使用./addhost.sh 脚本以openstack:base为镜像创建一个容器。
  ssh登录后按照openstack官方文档进行操作。
  另外因为是分开安装的组件,所以/etc/keystone/keystone.conf中还需要修改
  rabbit_host =RABBIT_IP,需要写IP地址,
  rabbit_password =xxxxxxxRABBIT的密码。
  
  PS:执行openstack service create --type identity--description "OpenStack Identity" keystone 命令时报错:
  Traceback (mostrecent call last):
    File "/usr/bin/openstack", line 6,in <module>
      from openstackclient.shell import main
    File"/usr/lib/python2.7/site-packages/openstackclient/shell.py", line 23,in <module>
      from cliff import app
    File"/usr/lib/python2.7/site-packages/cliff/app.py", line 14, in<module>
      from .interactive import InteractiveApp
    File "/usr/lib/python2.7/site-packages/cliff/interactive.py",line 10, in <module>
      import cmd2
    File"/usr/lib/python2.7/site-packages/cmd2.py", line 361, in<module>
      class Cmd(cmd.Cmd):
    File"/usr/lib/python2.7/site-packages/cmd2.py", line 424, in Cmd
      if subprocess.Popen(['which', editor],stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0]:
    File"/usr/lib64/python2.7/subprocess.py", line 711, in __init__
      errread, errwrite)
    File"/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
      raise child_exception
  OSError: [Errno 2]No such file or directory
  看了下py文件,没发现有错误。keystone.log也没有日志输出。网页上找了半天,后来什么都没改又可以创建了。不知道是怎么回事。
  使用openstack endpoint create \
  --publicurlhttp://controller:5000/v2.0 \
  --internalurlhttp://controller:5000/v2.0 \
  --adminurlhttp://controller:35357/v2.0 \
  --region RegionOne\
  identity   命令创建的时候controller需要改成IP地址,这个IP为即将创建的容器IP地址。
  按照官方文档进行测试通过以后就可以创建镜像了
  docker commit c7d4663a9d5fopenstack:keystone
  然后使用./addhost脚本进行创建。
  创建好以后再进行官方文档测试。没问题就算全部通过了。
五、创建glance组件镜像
  为保证glance保存的镜像数据不会因为容器停止而删除,所以需要先创建一个数据卷容器。
  docker run -d -v/glancedb --name glancedb base:v1.2_ssh
  修改./addhost.sh  docker行为  
  docker run--privileged=true -d --net=none --volumes-from glancedb  --name $1 $2
  使用./addhost.sh 脚本以openstack:base为镜像创建一个容器。
  ssh登录后按照openstack官方文档进行操作。
  vi/etc/glance/glance-api.conf中修改这项内容如下。
  filesystem_store_datadir=/glancedb/images/
  下载测试镜像的时候,网址路径有错误。使用下面的网址下载。
  http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
  修改路径拥有者chown glance:nobody /glancedb/
  chown glance:glance/glancedb/images
  注意查看,/var/lib/glance目录的权限和拥有者。改成一模一样,如果修改好以后还是不行。还需要使用chcon -t unlabeled_t /glancedb/ -R 命令修改seliunx参数。
  下载后上传镜像,成功就算完成了。
  因为这里需要保存docker的镜像到glance所以修改一下glance的配置。
  vi/etc/glance/glance-api.conf
  container_formats= ami,ari,aki,bare,ovf,docker
  完成以后重启systemctl restart openstack-glance-api然后再上传镜像测试。成功后就可以使用docker commit命令提交一个新镜像了。
  由于是在docker 容器中创建的glance,所以需要在控制端物理机上安装python-glanceclient组件,和配置admin-opencrh.sh的变量文件。
  exportOS_PROJECT_DOMAIN_ID=default
  exportOS_USER_DOMAIN_ID=default
  exportOS_PROJECT_NAME=admin
  exportOS_TENANT_NAME=admin
  exportOS_USERNAME=admin
  exportOS_PASSWORD=www.admin.com
  exportOS_AUTH_URL=http://172.10.10.123:35357/v3
  exportOS_IMAGE_API_VERSION=2
  使用source命令使其生效。
  然后在物理机中使用
  docker savebase:v1.2_ssh | glance image-create --container-format docker --disk-format raw--name base:v1.2_ssh --visibility public --progress命令看是否能上传成功。
  如果不出意外的话一般会成功的。可以进入glance容器查看/glancedb/images目录下是否有文件多出来。
  结束后就可以docker commit命令,再次提交镜像保存。
  提交成功后就可以使用./addhost.sh脚本用新的镜像启动一个glance组件了。
六、nova计算节点和nova控制节点安装
  nova计算节点是物理机,nova控制节点是docker容器。所以下面创建的镜像都是nova控制节点,这里称作nova-api
  使用./addhost.sh 脚本以openstack:base镜像启动一个容器。配置好IP地址!剩下的按照官方文档进行操作。
  如果在配置完启动后面程序的时候发现有无法找到的服务,请重新安装那个包。
  
  303-c177-4264-8396-6eb8248b03dd- - - - -] AMQP server 172.10.10.122:5672 closed the connection. Check logincredentials: Socket closed
  因为rabbitMQ的账户密码不正确。。重新在rabbitMQ上面运行一下
  rabbitmqctladd_user openstack  RABBIT_PASS
  rabbitmqctlset_permissions openstack ".*" ".*" ".*"
  两条命令。
  跳到nova-network节点,把nova-apivi /etc/nova/nova.conf
  network_api_class= nova.network.api.API
  security_group_api= nova
  也打开。
  把计算节点和控制节点都安装好以后就可以对控制节点进行镜像提交了。
  然后再用新提交的镜像创建容器,使用nova service-list再次查看服务状态。这时可能会出现刚才用来做模版的那个主机全部down状态,可以不用管。如果实在不想看到这些信息,可以在nova数据库的services表中删除相关的记录。
  理论上nova-network也是可以单独拿一台服务来做的,不过为了达到冗余性一般都和nova计算节点放在一起。每个计算节点安装一个nova-network,各自负责。避免了nova-network宕机造成所有实例无法使用网络的情况。单独安装也能分担负载。
七、创建网页管理界面
  使用./addhost.sh 脚本以openstack:base镜像启动一个容器。配置好IP地址!剩下的按照官方文档进行操作。
  vi /etc/openstack-dashboard/local_settings
  OPENSTACK_HOST =IPADDR。这个地址需要配置成keystoneIP地址。
  启动网页后就可以试着在图形界面创建实例了。
  使用官方文档中Launch an instance with legacy networking(nova-network)一节的方式创建parikey。等!然后在图形界面的Project->instances中启动一个实例。
  
  后面还有swiftcinder等组件没有安装,这里就不一一示范。创建方式和上面其它组件一样。但只能选择创建控制节点,不能创建其它节点。因为其它节点需要提供磁盘等物理服务,并且需要对系统内核进行修改。容器对内核的修改权限是有限的,可能会导致创建不成功或者无法使用等情况。
第三章、更改nova computer配置,使用docker启动实例。
  检查docker是否正常安装并启动。
  安装docker使用yum install docker命令
  安装git命令,yum install git
  获取novadocker
  pip install -egit+https://github.com/stackforge/nova-docker#egg=novadocker
  如果没有pip命令,使用yum install python-pip安装。
  如果提示pip版本不对,使用pip install –upgrade pip更新
  pkg_resources.VersionConflict:(pbr 0.11.0 (/usr/lib/python2.7/site-packages),Requirement.parse('pbr>=1.8'))
  使用pip install --upgrade pbr更新
  安装novadocker
  cd src/novadocker/
  python setup.pyinstall
  cat  ./etc/nova/rootwrap.d/docker.filters >>/etc/nova/rootwrap.conf
  配置nova计算节点nova.conf修改以下内容:
  compute_driver =novadocker.virt.docker.DockerDriver
  
  system startdocker启动Docker程序。查看ll /var/run/docker.sock用户和组。
  srw-rw----. 1 rootroot 0 12 31 10:53 /var/run/docker.sock
  nova加入到docker.sock文件显示的所在组,这里是rootusermod -G root nova
  配置完成以后重启openstack-nova-compute服务。然后查看nova service-list服务状态。up后代表配置正常无错误,服务正常启动。这时可以使用上面glance中上传的docker镜像创建一个实例了。
nova-docker使用注意事项:
  1、VNC可以链接,docker是一个容器别想使用远程进入到容器内部来管理它。因为这么做毫无意义。就算修改成功后,停止或重启容器修改的数据都将全部丢失。
  2、如果实在想管理容器,可以通过创建默认启动ssh服务的镜像来远程链接。但是不建议这么做。使用supervisord可以同时启动多个服务!
  3、在实际应用中可以在创建docker镜像时指定外部数据卷来获取容器的日志等信息。
  4、在实际应用中,为方便管理每个容器只运行一个服务。如mysqlhttp等其中之一。
  5、容器不能作为lvs等需要使用数据包转发服务的应用。不过理论上是可以使用nginxhaproxy这种修改配置文件后就可以使用的服务。
  6、docker容器只能用于基础服务的提供,比如各类数据库,WEB服务器等类似应用。
报错日志处理:
  /var/log/messge
  1default='nova.virt.firewall.NoopFirewallDriver')
  无法启动nova-compute
  编辑nova.conf注释下面这行。
  #firewall_driver =nova.virt.libvirt.firewall.IptablesFirewallDriver
  2Dec 31 10:39:16 nova-compute nova-compute:raise ConnectionError(err, request=request)
  Dec 31 10:39:16nova-compute nova-compute: ConnectionError: ('Connection aborted.', error(2,'ENOENT'))
  Dec 31 10:39:16nova-compute nova-compute: 2015-12-31 10:39:16.600 31594 ERRORnova.openstack.common.threadgroup [req-b694c876-30e1-4cb5-b324-13262bc081ab - -- - -] ('Connection aborted.', error(2, 'ENOENT'))
  请检查docker是否启动。
  
  3Dec 31 12:22:55 nova-compute docker:time="2015-12-31T12:22:55.347478315+08:00" level=errormsg="Handler for GET /images/{name:.*}/json returned error: No such image:base:v1.2_ssh"
  修改文件"/usr/lib/python2.7/site-packages/novadocker/virt/docker/driver.py"
      def _get_image_name(self, context,instance, image):
          fmt = image['container_format']
          if fmt != 'docker':
              msg = _('Image container format notsupported ({0})')
              raiseexception.InstanceDeployFailure(msg.format(fmt),
                                                    instance_id=instance['name'])
          return image['name'].lower()
  4Dec 31 12:30:55 nova-compute nova-network:s.py", line 38, in ensure_tree\n   os.makedirs(path, mode)\n', ' File "/usr/lib64/python2.7/os.py", line 157, in makedirs\n    mkdir(name, mode)\n', "OSError: [Errno13] Permission denied: '/usr/lib/python2.7/site-packages/networks'\n"]
  修改nova.conf文件为
  networks_path=/var/lib/nova/networks重启openstack-nova-network服务。
  5Dec 31 13:56:04 nova-compute nova-compute:2015-12-31 13:56:04.632 3818 TRACE nova.compute.manager [instance:565d0b8d-dae7-4846-9861-79406cf175a9] Stderr: 'sh:/usr/local/bin/nova-dhcpbridge:\xe6\xb2\xa1\xe6\x9c\x89\xe9\x82\xa3\xe4\xb8\xaa\xe6\x96\x87\xe4\xbb\xb6\xe6\x88\x96\xe7\x9b\xae\xe5\xbd\x95\n\ndnsmasq:cannot run lease-init script /usr/local/bin/nova-dhcpbridge: No such file ordirectory\n'
  修改nova.conf
  dhcpbridge=/usr/bin/nova-dhcpbridge然后重启openstack-nova-network服务。
  6Dec 31 14:06:52 nova-compute nova-compute:Stderr: u'Cannot open network namespace "785757e487b825d0386407994d12c47d96cc0a014940d5ca3efbe70646ad31df":Permission denied\n'
  Dec 31 16:33:56nova-compute nova-compute: Stderr: u'"mount --make-rslave /" failed:Permission denied\n'
  查看785757e487b825d0386407994d12c47d96cc0a014940d5ca3efbe70646ad31df确实没有这个目录,这个是链接指向/proc/7928/ns/net目录。而/proc/7928/ns/net目录没有建立。
  问题始终没找到,元旦放假后重启计算节点就可以创建了。
  7、在日志中发现
  docker.host_url                = unix:///var/run/docker.sock
  这个参数的意思是不是可以配置单独的docker服务器组,只要把url指向docker主机就行了。
  
第四章、排错和使用举例
  1、创建实例报错:
  2015-12-2917:49:53.983 17692 ERROR nova.virt.libvirt.driver[req-b15ea5e4-816e-4a45-b332-5ff57a8f3b22 bd935861e2b4487fbb39fcb006bd54270f01f0de5ef5482a98739b310454b89a - - -] Error launching a defined domain withXML: <domain type='kvm'>
    <name>instance-00000001</name>
  …………………………..省略……………………………………………..
  2015-12-2917:49:53.984 17692 TRACE nova.compute.manager [instance:a0fe0d99-2a93-47c6-a20e-0068ac77416c] libvirtError: internal error: referencedfilter 'no-mac-spoofing' is missing
  经过上网搜索以后,发现问题与libvirtnwfilter功能相关。
  处理方式:
  使用virsh nwfilter-list查看信息。
  UUID                                  Name                 
  ------------------------------------------------------------------
   a746b2e6-317d-42db-a6d9-3004fcd2e742  nova-allow-dhcp-server
   a984bd3e-4830-41d5-9d4b-8de06aa730ed  nova-base           
   290c8d53-2989-40e0-93c5-632aaa948f6d  nova-instance-instance-00000001-fa163e02d32e
   6b48d414-081a-4b46-ac27-8b306cdef51b  nova-no-nd-reflection
   eefd31f5-1d3a-447c-8809-96d2bd923db5  nova-nodhcp         
   a64af4fd-5abd-4cf9-8187-ace5b36e7bca  nova-***
  发现nwfilter缺少no-mac-spoofing信息
  安装yum install libvirt-daemon-config-nwfilter
  重启libvirtd服务
  systemctl restartlibvirtd
  
  
  2、登录页面成功后,第二天发现又报错无法登录。错误信息:
  dashboard服务器中的,http错误日志。
  [Wed Dec 3010:58:01.593575 2015] [:error] [pid 41] ValidationError:[u"'bd935861e2b4487fbb39fcb006bd5427' value must be an integer."]
  
  keystone服务中的日志信息。
  2015-12-3010:58:01.304 279 DEBUG keystone.middleware.core [-] Auth token not in therequest header. Will not build auth context. process_request /usr/lib/python2.7/site-packages/keystone/middleware/core.py:229
  解决方法:
  修改dashboard配置
  vi/etc/openstack-dashboard/local_settings
  添加下面两行
  SESSION_ENGINE ='django.contrib.sessions.backends.cache'
  AUTH_USER_MODEL ='openstack_auth.User'
  然后重启httpd服务再重新登录。
  3、无法通过控制台链接VNC。不能从网页console进入控制实例。
  查看nova-api中的nova-novncproxy.log日志。报错
  2015-12-3013:18:22.282 3932 INFO nova.console.websocketproxy[req-131fee8a-f39c-45bc-a2b3-53a1134f4db2 - - - - -]  31: connecting to: 172.10.10.15:5900
  2015-12-3013:18:22.295 3932 INFO nova.console.websocketproxy[req-131fee8a-f39c-45bc-a2b3-53a1134f4db2 - - - - -] handler exception: [Errno113] EHOSTUNREACH
  使用telnet命令确实无法访问到计算节点的5900端口。
  使用iptables-save > iptables命令保存后,修改iptables文件。在INPUT最前面一行加入-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT 保存。
  使用iptables-restore < iptables命令重新导入后再链接网页中的VNC发现可以链接了。
  4、实例无法链接外网
  实例创建成功并且获得内网IP以后无法访问外网。
  使用iptables –L –t nat 命令查看结果是nova-network-float-snat  all --  anywhere             anywhere            
  SNAT       all --  10.1.1.0/24          anywhere             to: 172.10.10.15
  172.10.10.15是管理接口IP。经过排查发现这个IP的设置和nova.conf文件中my_ip参数相同。改成外网网卡的ip地址并重启openstack服务将会正常。
  5、分配一个公网IP
  使用命令
  novafloating-ip-bulk-create [--pool POOL_NAME] [--interface INTERFACE]RANGE_TO_CREATE
  例:nova floating-ip-bulk-create --pool  pub1  192.168.1.200/29
  创建好以后可以使用nova floating-ip-bulk-list命令查看。
  然后就可以从网页上project->Access & Security->FloatingIPs页面获取一个IP并分配给实例。
  分配成功后就可以使用这个IP地址访问实例了。
  
  参考内容:
  Docker:http://dockerpool.com/static/books/docker_practice/introduction/README.html
  running-systemd-within-a-docker-container:
  https://rhatdan.wordpress.com/2014/04/30/running-systemd-within-a-docker-container/
  openstack-yum:
  http://docs.openstack.org/kilo/install-guide/install/yum/content/ch_preface.html
  openstack-apt:
  http://docs.openstack.org/kilo/install-guide/install/apt/content/ch_preface.html
  nova-docker:
  https://wiki.openstack.org/wiki/Docker#Configure_an_existing_OpenStack_installation_to_enable_Docker
  容器与OpenStack二者如何深度整合介绍:
  http://www.d1net.com/cloud/news/351191.html
  联系方式:
  QQ305543274
  PS:如果有问题请通过百度或谷歌方式获取帮助。解决问题的直接方式永远只有 Just think and do it!
  



附件:http://down.51cto.com/data/2367700

运维网声明 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-496879-1-1.html 上篇帖子: openstack L版本服务分解 下篇帖子: openstack名词解释
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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