使用kolla玩转OpenStack
Posted 星河星云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用kolla玩转OpenStack相关的知识,希望对你有一定的参考价值。
第九期
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(二)
☎ 勾搭我们:400-601-0500
(7*24小时等你来撩~~)
你还需要:
)
↓↓ 点击“阅读原文”,立刻开启星河云
以上是关于使用kolla玩转OpenStack的主要内容,如果未能解决你的问题,请参考以下文章
OpenStack——使用Kolla部署OpenStack-allinone云平台