陈沙克

Mar 072017
 

Kolla部署多节点,其实和单节点区别不是很大。不过多节点的部署,可以让你对很多细节理解更加深入。

对于Kolla多节点的安装,重点已经不是kolla,而是你的网络规划。因为步骤和all in one是一致。

网络设计

OpenStack的部署

Snap15

图片来源mirantis,修改了一下。

上面一共是5个网络。对于OpenStack来说,其实是4个网络,

角色 management Public +floating IP Storage Private
控制节点+网络节点  
计算节点+存储节点  
存储节点    
         

 

如果用户创建的虚拟机可以直接放到外部的网络上,那么就要求计算节点上,也需要public的IP。也就是说,我希望provider network共享给所有租户,那么就需要计算节点,也需要pubilc IP。

假设我们实验,3台机器,都具备

  1. 控制节点
  2. 网络节点
  3. 计算节点
  4. 存储节点

如果是:两块万兆的网卡+千兆网卡。

  1. 千兆网卡1:Public +floating IP
  2. 万兆网卡1:management+private
  3. 万兆网卡2:Storage

我们实验,如果只有2块网卡

  1. 网卡1:Public +floating IP
  2. 网卡2:management+private+Storage

 

 

准备工作

这些工作都是在OpenStack服务的节点进行。对于kolla来说,准备工作做完后,安装OpenStack就是30分钟的事情。

  1. 关闭Selinux
  2. 关闭Firewalld
  3. 关闭NetworkManager
  4. 设置hostname FQDN,让机器可以通过hostname进行互相访问,统一 /etc/hosts文件
  5. 同步时间,先确保时间是基本一致,和硬件也统一时间
  6. 设置docker registry 服务器位置,设置不安全的访问。
  7. 检查机器是否支持KVM
  8. 设置docker源,安装docker 1.12.5
  9. 设置访问私有的registry 源
  10. 打开Docker 的 shared mount 功能
  11. 设置网卡,网络,符合部署需求。如果需要bonding,需要把bonding做好。
  12. 对于要部署Ceph的节点的磁盘,进行打标签
  13. 检查网络,重点,确保装好后,网络功能正常。

在Master节点,我们需要做的工作,

  1. 关闭Selinux
  2. 关闭Firewalld
  3. 关闭NetworkManager
  4. 设置hostname FQDN,让机器可以通过hostname进行互相访问,统一 /etc/hosts文件
  5. 同步时间,先确保时间是基本一致,和硬件也统一时间
  6. 设置docker源,安装docker 1.12.5

全面6条,都是相同的,不同的是

  1. 搭建私有的registry服务器,存放build好的OpenStack Docker镜像
  2. 安装ansible
  3. 部署kolla-ansible

 

参考文档

http://docs.ocselected.org/openstack-manuals/kilo/fuel-docs/reference-architecture.html

https://docs.ustack.com/unp/src/deployment/access_ha.html

Mar 012017
 

默认安装的all in one,是没有安装cinder服务的,也是没有ceph。如何在一个已经装好的环境下,增加Ceph?那么这个其实比我直接装Ceph更加有挑战。

下面的文档,就是在All in one的基础上,继续安装Ceph,并且实现nova,glance,cinder整合,还支持swift api。

需要强调的是,我们需要把all in one环境里的虚拟机,镜像都删除掉。

 

增加磁盘

我们给虚拟机增加一块磁盘,100G。重启虚拟机,应该就可以看到 sdb

parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1

这条命令,就是对磁盘进行打标签。表示是用来做kolla的ceph。

查看命令的结果。

#  parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name                      Flags
 1      1049kB  107GB  107GB               KOLLA_CEPH_OSD_BOOTSTRAP

配置Ceph

由于是单节点,all in one的部署,ceph数据只存放1份

创建 /etc/kolla/config/ceph.conf

[global]
osd pool default size = 1
osd pool default min size = 1

全局设置

编辑 /etc/kolla/globals.yml  文件

enable_cinder: "yes"
enable_ceph: "yes"
enable_ceph_rgw: "yes"
enable_ceph_rgw_keystone: "yes"
glance_backend_ceph: "yes"

安装

这个时候,你就可以重复运行kolla安装

kolla-ansible deploy -i /home/all-in-one 

目前的版本,装完后,需要把相关的容器重启一遍,或者你把虚拟机重启也是可以的。

镜像格式

由于Ceph要求使用Raw的格式的镜像。所以要把qcow2的镜像进行格式转换。

yum install qemu-img

对于ceph,我们需要上传raw格式,需要对镜像进行转换。

# qemu-img info  cirros-0.3.4-x86_64-disk.img   
image: cirros-0.3.4-x86_64-disk.img
file format: qcow2
virtual size: 39M (41126400 bytes)
disk size: 13M
cluster_size: 65536
Format specific information:
    compat: 0.10

转成raw格式

qemu-img convert -f qcow2 -O raw \
cirros-0.3.4-x86_64-disk.img cirros-0.3.4-x86_64-disk.raw

这时候查看镜像信息

# qemu-img info cirros-0.3.4-x86_64-disk.raw 
image: cirros-0.3.4-x86_64-disk.raw
file format: raw
virtual size: 39M (41126400 bytes)
disk size: 18M

上传镜像

openstack image create --disk-format raw --container-format bare \
--public true --file ./cirros-0.3.4-x86_64-disk.raw

这个时候,你就可以登录Dashboard,进行创建虚拟机。

参考文档

http://www.ibm.com/developerworks/cn/linux/1409_qiaoly_qemuimgages/

附上我同事给我的ceph的管理命令

docker exec -it ceph_mon ceph osd pool ls
docker exec -it ceph_mon ceph osd pool set vms size 1
docker exec -it ceph_mon ceph osd pool set images size 1
docker exec -it ceph_mon ceph osd pool set volumes size 1
docker exec -it ceph_mon ceph osd pool set backups size 1
docker exec -it ceph_mon ceph osd pool set rbd size 1
docker exec -it ceph_mon ceph osd pool set rbd min_size 1
docker exec -it ceph_mon ceph osd pool set backups min_size 1
docker exec -it ceph_mon ceph osd pool set volumes min_size 1
docker exec -it ceph_mon ceph osd pool set images min_size 1
docker exec -it ceph_mon ceph osd pool set vms min_size 1
docker exec -it ceph_mon ceph osd pool ls
docker exec -it ceph_mon ceph -s
Feb 242017
 

目前Kolla的Ocata版本的正式发布,其实还需要大概2周时间,不过基础的功能,其实早就完成。现在OpenStack版本发布,已经不再搞Release note,大家了解项目的新功能,其实不是太方便。

我是跟踪的Kolla的Ocata版本的全程开发,所以根据我的理解,给大家写一个Ocata版本的Kolla新功能介绍。

如果让我比较Kolla的Ocata版本和Newton版本,那么我只能说是脱胎换骨,已经接近很完善的地步。

Continue reading »

Feb 232017
 

今天OpenStack的Ocata版本发布,Ocata版本算是OpenStack基金会成立以来,最短开发周期的的一个版本,不到五个月时间,从2016年10月底开完峰会到今天2017年2月23日。

短短不到半年的时间,OpenStack的社区贡献,其实已经发生的重大的变化。stackalytics统计也做了一个重大调整,默认设置统计是全部OpenStack项目,一直以来,stackalytics默认显示内容,对OpenStack的影响的非常深远。我大概回顾一下默认显示的变化过程。

stackalytics网站,是2013年出来,当时统计默认显示页面是按照代码行数来显示,也就是说这是最优先的指标。当时同事刚刚参加OpenStack社区贡献,通过完成了4个BP,提交了好几千行代码,当时处于OpenStack功能比较缺乏的阶段,也是一个变化快速的时候,这是指标作为默认显示,是很有意义的。

2013年下半年,stackalytics的统计默认显示改成Commit,这时候OpenStack的贡献者很多,大量的bug等待修复。记得很清楚,当时同事已经把精力专注于各种bug的修复。

2014年,stackalytics又做了调整,把Review的指标作为默认显示。这个时候OpenStack的项目,已经开始更加注重质量,Core Review显得更加重要。我同事也把精力放到Review项目的代码上,最终成为的Horizon项目的Core。

2013年到2014年,OpenStack增加项目,都是需要经过技术委员会批准,也就是TC approved,一共是12个项目,不过这种模式有点跟不上OpenStack的快速发展,那么到了2015年,决定不再采用TC approved方式增加项目,而是    引入Big Tent模式,项目数量从以前的TC approved 增加到超过60个项目。stackalytics对项目进行了分类,

在OpenStack下,包括

  1. TC-approved
  2. Offical
  3. Others

Offical项目里,包括全部Big Tent里的项目,也包括以前的TC-approved的项目,还有部分OpenStack CI要用的项目。

Other项目,就是没有进入Offical的项目,在孵化阶段,或者很小,工具类的项目。

2017年2月份,stackalytics默认显示,把统计项目从Offical,改成OpenStack,这样用户看到的统计数据就是全部OpenStack项目。这对后续OpenStack发展,还是有深远影响的。我的同事后来去了一家公司专门做社区开发,目前在OpenStack创立一个新的项目,还没有加入Big Tent,以前还比较头疼,在项目里所做的工作,无法默认显示在统计上,也导致项目的开发者参与积极性下降。现在一下子发生了改变,个人贡献在公司排名前十。

八卦完这段历程,我们就对Ocata统计进行盘点,我也是采用默认的,统计全部OpenStack项目的,我以前的文章其实都是Offical项目的。

Continue reading »

Feb 222017
 

很久没动手,导致配置一点东西,基本完全忘记。这次要在CentOS 7.3 下装Kolla,好好把这个补回来。

我的习惯都是最小化安装操作系统,然后慢慢玩和调整。

关闭Selinux

这个就基本不需要讨论的事情,编辑  /etc/selinux/config

SELINUX=disabled

我习惯重启机器,查看selinux状态

# sestatus
SELinux status:                 disabled

关闭Firewalld

做实验的时候,端口无法访问的事情是经常发生的。不折腾了。

systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
firewall-cmd --state

Epel

现在的epel源,已经很简单了。

yum install epel-release

查看repo情况

yum repolist

Hostname

对于很多环境,这是必须的。

cat /etc/hostname
kolla
# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.27.10   kolla.chenshake.com     kolla

检查

#hostname -F /etc/hostname

#hostname
kolla

#hostname -f
kolla.chenshake.com

同步时间

yum install ntp
systemctl enable ntpd.service
systemctl start ntpd.service

手工同步时间

ntpdate 0.centos.pool.ntp.org
Feb 142017
 

大家看我的blog,其实一直都没写过Kolla的安装过程,其实并不是我不想写,而是对于用户来说,参考我的文章,因为网络带宽的原因,他其实是很难照做的。

经过很多的尝试,在OpenStack的Ocata版本发布的时候,我想我应该已经有办法解决安装的各种问题。

我还是使用大家最常用的vmware workstation 12.0, CentOS 7.3 虚拟机来完成整个的验证过程。

准备工作

我习惯最小化安装CentOS 7.3,装完后,对他进行初始化的工作。

http://www.chenshake.com/centos-7-x-class/ 大家照做就可以,放到一个文档,显得太长。selinux,防火墙端口无法访问,主机名问题,都是安装的常见错误,大家一定要细心确认。

kolla的安装,要求目标机器是两块网卡,所以我虚拟机也是分配两块网卡,

  1. ens33,NAT网络里,设置的IP是:192.168.27.10,日后Horizon访问就是通过这个IP地址
  2. ens34,桥接模式,ip其实是dhcp分配,这个其实是让neutron的br-ex 绑定使用,虚拟机是通过这块网卡访问外网。

在机器上连接虚拟机,是通过ens33的IP进行访问,如果你通过ens34 ssh,安装过程,会导致ssh中断。

默认设置,其实两块网卡都是可以访问到互联网。也可以是其中一块网卡访问外网,对于测试来说,基本问题不大。

如果在服务器直接安装,两块网卡的IP,就算是同一个网段,也是没啥问题的。

以前安装kolla,必须自己build镜像,这样由于网络的原因,经常会导致在build 镜像的时候失败。这次我们直接采用kolla官方提供的镜像文件,这样就不需要自己build镜像的环节。

 

基础包

一定要启用EPEL的repo源

yum install epel-release
yum install python-devel libffi-devel gcc openssl-devel git python-pip

安装Docker

目前最新版本的Docker是1.13.1,Kolla目前支持的Docker是1.12.x,所以我们要指定Docker的版本来安装,并且一定要采用Docker官方的源,不能使用红帽的源,红帽的源的Docker是有bug。

设置repo

tee /etc/yum.repos.d/docker.repo << 'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

安装Docker 1.12.5

yum install docker-engine-1.12.5 docker-engine-selinux-1.12.5

设置docker

mkdir /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF

重启相关服务

systemctl daemon-reload
systemctl enable docker
systemctl restart docker

访问私有的Docker仓库

编辑  /usr/lib/systemd/system/docker.service

#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.27.10:4000

重启服务

systemctl daemon-reload
systemctl restart docker

Ansible

Kolla项目的Mitaka版本要求ansible版本低于2.0,Newton版本以后的就只支持2.x以上的版本。

yum install ansible

Registry 服务器

默认docker的registry是使用5000端口,对于OpenStack来说,有端口冲突,所以改成4000

docker run -d -v /opt/registry:/var/lib/registry -p 4000:5000 \
--restart=always --name registry registry:2

下载kolla官方提供的镜像

http://tarballs.openstack.org/kolla/images/

这是kolla官方提供的镜像给CI使用,只保留最新版本和最新的stable版本。大家可以下载Ocata版本

wget http://tarballs.openstack.org/kolla/images/centos-source-registry-ocata.tar.gz
tar zxvf centos-source-registry-ocata.tar.gz -C /opt/registry/

这样就把kolla的docker镜像文件放到Regisitry服务器上。

kolla-ansible

下载kolla-ansible的代码

cd /home
git clone http://git.trystack.cn/openstack/kolla-ansible –b stable/ocata

安装kolla-ansible

cd kolla-ansible
pip install .

一个小技巧,如果pip速度很慢,后面可以加上参数,指定国内的pip源

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

复制相关文件

cp -r etc/kolla /etc/kolla/
cp ansible/inventory/* /home/

如果是在虚拟机里装kolla,希望可以启动再启动虚拟机,那么你需要把virt_type=qemu,默认是kvm

mkdir -p /etc/kolla/config/nova
cat << EOF > /etc/kolla/config/nova/nova-compute.conf
[libvirt]
virt_type=qemu
cpu_mode = none
EOF

生成密码文件

kolla-genpwd

编辑 /etc/kolla/passwords.yml

keystone_admin_password: chenshake

这是登录Dashboard,admin使用的密码,你可以根据自己需要进行修改。

编辑 /etc/kolla/globals.yml  文件

kolla_internal_vip_address: "192.168.27.11"

kolla_install_type: "source"
openstack_release: "4.0.0"
docker_registry: "192.168.27.10:4000"
docker_namespace: "lokolla"
network_interface: "ens33"
neutron_external_interface: "ens34"

192.168.27.11,这个ip是一个没有使用的的ip地址,他是给haproxy使用,单节点其实压根没有意义。

安装OpenStack

kolla-ansible deploy -i /home/all-in-one 

验证部署

 

kolla-ansible post-deploy

这样就创建 /etc/kolla/admin-openrc.sh 文件

安装OpenStack client端

pip install python-openstackclient

编辑 /usr/share/kolla-ansible/init-runonce,

网络需要根据实际情况修改

EXT_NET_CIDR='192.168.12.0/24'
EXT_NET_RANGE='start=192.168.12.30,end=192.168.12.40'
EXT_NET_GATEWAY='192.168.12.1'

这里解析一下,192.168.12.0的网络,就是我上面ens34接的网络,这个网络是通过路由器访问互联网。这个地方需要好好理解。配置好这个,装完虚拟机就可以直接ping通。

 

运行

source /etc/kolla/admin-openrc.sh
cd /usr/share/kolla-ansible
./init-runonce

最后你可以创建一个虚拟机来玩玩,根据最后的命令提示

openstack server create \
    --image cirros \
    --flavor m1.tiny \
    --key-name mykey \
    --nic net-id=2ba93782-71e2-44d6-ad64-796c5853dcce \
    demo1

这个时候,你可以登录Dashboard,给虚拟机分配一个floating ip,如果顺利,你应该就可以直接ping 通 floating ip的地址。

 

参考文档

http://docs.openstack.org/developer/kolla-ansible/quickstart.html

http://www.cnblogs.com/lienhua34/p/4922130.html

https://gist.github.com/jeffrey4l/c69688180b056d08a0c1733e24193143

http://www.cnblogs.com/microman/p/6107879.html

http://xcodest.me/