使用kolla玩转OpenStack

Posted 星河星云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用kolla玩转OpenStack相关的知识,希望对你有一定的参考价值。

第九期

 使用kolla玩转OpenStack(一) Openstack | 运维总监 梁鑫 使用kolla玩转OpenStack(一)

  ◆  

使用kolla玩转OpenStack(一)  内容介绍如下:


本系列文章将会介绍多个部分的内容:

  • 第一部分 介绍如何使用kolla制作openstack的容器镜像,也包含一些软件本地源的制作方法及对kolla代码的修改以适应本地的软件源的方法;

  • 第二部分 介绍使用一些闲置硬件服务器和设备从0开始,一步步来安装和部署一套openstack私有云的环境,后续也会对各组件及监控,日志等系统进行分析。


 

使用Kolla玩转OpenStack

(一)



OpenStack作为全球发展最快和最成功的开源项目之一,46个项目有着合计约2000万行的源代码,规模庞大。企业如何选定适合自己使用的组件也很重要,OpenStack官网有一些建议可以参考。


与此同时,openstack的源代码管理和安装部署也不是一件简单的事情。本文将分为两部分内容:


第一部分介绍如何使用kolla制作openstack的容器镜像;第二部分,使用一些闲置硬件服务器和设备从0开始,一步步来安装和部署一套openstack私有云的环境。

 

Kolla是openstack的部署工具之一,可以实现对整个私有云集群的快速配置、部署,与之前通过源代码编译安装、二进制软件包安装、Fuel工具安装、Ansible/Chef/Puppet推送安装均有一定差异。


Kolla将我们需要的所有组件都容器化,包括libvirt和ovs这种比较复杂的应用,用于部署的Docker镜像通过本地Docker Registry注册,经Kolla-Ansible推送,OpenStack的所有组件都运行在指定的的服务器角色容器中.基于容器的优势一下子就展现出来了,安装,升级,服务管理更加方便了.详情可以查看openstack官方的一些内容,参考链接如下:

 

https://wiki.openstack.org/wiki/Kolla

https://docs.openstack.org/kolla/latest/



  • 制作本地git仓库

 

在国内基于网络的一些问题,想顺利的完成OpenStack的镜像打包还是比较麻烦一些。首先我们使用gitlabCE搭建一套本地的git代码仓库,用来存储openstack官方源代码,在后面制作镜像的时候,使用本地的git代码仓库就不用考虑拉取代码时候的网络问题了,同时你也可以根据自己需求进行openstack的本地开发。使用gitlabCE的docker镜像搭建git代码仓库是很方便的,前提是你已经准备好了自己的docker环境,并设置好域名解析。

 

  • 创建gitlab持久存储目录并启动gitlab容器

 

# mkdir -pv /data/gitlab/{config,data,logs}

# sudo docker run --detach \

   --hostname gitlab.xingheyun.com \

   --publish 443:443 --publish 80:80 --publish 22:22 \

   --name gitlab \

   --restart always \

   --volume /data/gitlab/config:/etc/gitlab \

   --volume /data/gitlab/logs:/var/log/gitlab \

   --volume /data/gitlab/data:/var/opt/gitlab \

 

   gitlab/gitlab-ce:latest


通过http://gitlab.xingheyun.com 访问gitlab,注册openstack用户。本地生成公钥并在gitlab中创建公钥。

 

# ssh-keygen -t rsa -C"openstack@xingheyun.com" 

将公钥信息加入gitlab的sshkey中


openstack源代码本地代码仓库存储

 

在这里演示的openstack版本是Ocata,首先我们去下载Kolla的源代码,并获取Ocata版本的各组件的名称和版本。

 

  • 同步kolla源码至本地

 

# yum install git

# mkdir /data && cd /data

# git clonehttps://github.com/openstack/kolla.git -b stable/ocata


 

  • openstack代码同步脚本

 

# mkdir openstack-source && cdopenstack-source/

# tee openstack-source-sync.sh <<'EOF'

#!/bin/bash

# get openstack project name from kollasource


grep "tarballs_base"/data/kolla/kolla/common/config.py | awk -F"'" '{print $4}' | awk -F/'{print $2}' > /tmp/source-pkg.uri.cache

grep"http://tarballs.openstack.org/tacker-horizon/"/data/kolla/kolla/common/config.py | awk -F/ '{print $4}' >>/tmp/source-pkg.uri.cache


sort -k2n /tmp/source-pkg.uri.cache | sed'$!N; /^\(.*\)\n\1$/!P; D'  | grep -Ev"(kuryr|rally|tempest|zun)" > /data/openstack-source/source-pkg.uri

rm -f /tmp/source-pkg.uri.cache

# clone openstack project code and modifytag

for uri in `cat/data/openstack-source/source-pkg.uri`; do

 if [ $uri == gnocchi ]; then

 git clonehttps://github.com/gnocchixyz/$uri -b stable/3.1

cd $uri

 git branch stable/ocata

git checkout stable/ocata

git branch -d stable/3.1

 rm -f .git/refs/remotes/*


else


git clonehttps://github.com/openstack/$uri -b stable/ocata

 fi

done

# git the openstack project code that isnot in github. and made git repository

for pkname in kuryr-lib-0.4.0.tar.gzkuryr-libnetwork-0.1.0.tar.gz rally-0.8.1.tar.gz tempest-15.0.0.tar.gzzun-0.2.1.tar.gz; do

cd /tmp

name=`echo $pkname  | awk-F"-[[:digit:]]" '{print $1}'`

nameversion=`echo kuryr-libnetwork-0.1.0.tar.gz  | awk -F '\.tar' '{print $1}'`


wget http://tarballs.openstack.org/${name}/$pkname

tar xf $pkname

mv $nameversion $name

cd  $name

git config --global user.name "openstack"

git config --global user.email "yunu@xingheyun.com"

git init

git remote add origin git@gitlab.xingheyun.com:openstack/${name}.git


git add .

git commit -m "init commit"

git branch stable/ocata

git checkout stable/ocata

git branch -d master


cd ../

mv $name /data/openstack-source/

rm -f $pkname

done

EOF

# nohup bash -x openstack-source-sync.sh&

 

  • 在gitlab中批量创建项目的脚本

 

# tee create_project.sh << 'EOF'

#!/bin/bash

for prj in `cat /tmp/project`; do

arg="name=${prj}&description=${prj}&visibility=public"

curl --header "PRIVATE-TOKEN: kysBLyrxxiTGWoDCe6-D" -X POST"http://gitlab.xingheyun.com/api/v4/projects?$arg"


done

EOF

 

说明:

 

(1) PRIVATE-TOKEN获取方法:使用openstack用户登录gitlab,settings--> account --> private token


(2) name参数定义项目名称,description参数定义项目的描述信息,visibility定义项目权限,可用选项为:public、internal、private

 

  • 批量push代码脚本

 

# tee push_project.sh << 'EOF'

#!/bin/bash

for prj in `cat /tmp/project`; do

cd/ data/source/openstack.git/${prj}/ sed -i "s@https://github.com/@git\@gitlab.xingheyun.com:@g".git/config

  git push -u origin stable/ocata

done


EOF


# bash -x /tmp/push_project.sh


  • 修改kolla源码,离线yum源准备

 

Kolla各镜像之间的之间有着依赖关系,基本情况如下:

 

(1) base为所有其他所有kolla镜像的基础镜像,主要作用是提供整个kolla构建openstack镜像所需要的yum仓库;

 

(2) openstack-base镜像建立在base镜像基础之上,主要作用是提供所有openstack项目公共组件;

 

(3) openstack各项目base镜像建立在openstack-base镜像之上,主要提供本项目中各子项目所需的公共组件;

 

(4) openstack各子项目镜像建立在openstack各项目base之上,也是最终build的服务镜像;

 

(5) 其他非openstack项目镜像单独build,不遵循如上规则;

 

  • 修改kolla实现离线build镜像需要修改如下地方:

 

(1) base镜像中会复制多个yum仓库文件至base容器中,为自己的yum仓库创建repo文件,放置在kolla/docker/base目录下,并且将base Dockerfile.j2中复制repo文件的相关部分替换,包括复制key文件部分;

 

(2) 将kolla/docker/下所有dockfile中curl、http、https命令中要下载的东西下载至本地,然后替换为build时本地web服务器下载;

 

(3) 因pypi仓库过于庞大,因此此处使用清华的仓库,因此需要修改所有dockfile、kolla/docker/macros.j2文件中pip安装命令,在pip命令的install后面添加-i https://pypi.tuna.tsinghua.edu.cn/simple参数。

 

  • 更改前后的文件对比,docker base Dockerfile文件对比:

 

根据修改的内容,做一个本地的yum源,包含下面的软件:

 

[ceph]

[ceph-deploy]

[docker]

[elasticsearch]

[epel]

[extras]

[grafana]

[influxdata]

[kibana]

[kvm-common]

[mariadb]

[opendaylight]

[openstack]

[openstack-common-pending]

[opstools]

[os]

[percona]

[treasuredata]

[updates]

[zookeeper]

 

例如:


[ceph]

name=ceph

baseurl=http://10.11.5.14/ceph

 

gpgcheck=0


  • 离线build和镜像存储

 

安装kolla的方式有两种,可以直接通过pip install kolla安装,也可以通过git或其他方式获取kolla源代码,然后在其目录下执行pip install . -ihttps://pypi.tuna.tsinghua.edu.cn/simple进行安装;安装后,执行kolla-build时,使用的配置文件为/etc/kolla/kolla-build.conf,依赖的各在组件dockerfile、及其他必须文件路径为/usr/share/kolla/,我们可以定义一个profile,包含我们要build的组件.

 

#cat /etc/kolla/kolla-build.conf

[DEFAULT]

base = centos

base_tag = latest

namespace = galaxy

install_type = source

threads = 16

tag = 1.0.0

profile = kael

cache = true

[profiles]

 

Kael 

=kolla-toolbox,openstack,keystone,nova,neutron,horizon,cinder,glance,swift,heat,trove,ceph,ceilometer,gnocchi,panko,aodh,cloudkitty,rabbitmq,rally,elasticsearch,fluentd,kibana,grafana,haproxy,keepalived,mariadb,memcached,openvswitch,cron

 

  • 修改yum仓库指向并安装kollabuild依赖包

 

# rm -rf /etc/yum.repos.d/* && curlhttp://10.11.5.14/galaxycloud.repo -o /etc/yum.repos.d/galaxycloud.repo


# yum install python-devel python-pip gccgit -y


  • 下载kolla代码并安装kolla

 

# git clonehttp://gitlab.xingheyun.com/openstack/kolla.git

# cd kolla

# pip install . -ihttps://pypi.tuna.tsinghua.edu.cn/simple

# cp -r etc/kolla/ /etc/

 

  • 说明:kolla构建依赖的配置文件kolla-build.conf,可以通过如下命令生成:

 

 #pip install tox -i https://pypi.tuna.tsinghua.edu.cn/simple

 # cd/data/kolla

 #tox -e genconfig

 #sed -i “s@http://gitlab.xingheyun.com@https://github.com@g”  /etc/kolla/kolla-build.conf


  • 安装并启动docker

 

Kolla对于docker的版本是要求,Ocata版本中使用的Kolla版本为4.0.3,docker的版本为1.12.5.增加一个阿里云的镜像加速服务,这样镜像下载会更快一些。

 

# yum -y install docker-engine-1.12.5docker-engine-selinux-1.12.5

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

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

[Service]

MountFlags=shared

EOF

# mkdir -p /etc/docker

#tee /etc/docker/daemon.json <<-'EOF'

{ "registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"] }

EOF

#sed -i"s@ExecStart=/usr/bin/dockerd@ExecStart=/usr/bin/dockerd\--insecure-registry\ 172.16.10.14:4000@g"/usr/lib/systemd/system/docker.service

# systemctl daemon-reload

# systemctl enable docker

# systemctl restart docker


  • 新建容器registry

 

使用docker的registry镜像部署本地的docker仓库,将最终build的镜像存储起来,以方便安装部署时使用。

 

# docker pull registry

# mkdir /data/registry

# docker run -d -v/data/registry:/var/lib/registry -p 4000:5000 --restart=always --name registryregistry


  • 开始构建kolla镜像

 

# nohup kolla-build --profile kael &

 

  • 将build镜像push到私有镜像仓库中

# docker images | awk '{print $1}' | xargs-t -i docker tag {}:4.0.3 172.16.10.7:4000/{}:1.0.0


# docker images | grep 172.16.10.7:4000 |awk '{print $1}' | xargs -t -i docker push {}:1.0.0

 



使用kolla玩转OpenStack(一)


 使用kolla玩转OpenStack(一)本期「一起学习云计算」就是以上这些

 使用kolla玩转OpenStack(一)下期预告 : 使用kolla玩转OpenStack(二)


使用kolla玩转OpenStack(一)

 ☎  勾搭我们:400-601-0500

(7*24小时等你来撩~~)


  • 你还需要


↓↓ 点击“阅读原文”,立刻开启星河云

以上是关于使用kolla玩转OpenStack的主要内容,如果未能解决你的问题,请参考以下文章

OpenStack——使用Kolla部署OpenStack-allinone云平台

Kolla OpenStack

Openstack 之 ubuntu16使用kolla部署实验

用Kolla在阿里云部署10节点高可用OpenStack

小试牛刀之Kolla单节点部署

使用 kolla-ansible 来 reconfigure OpenStack 集群