kolla-ansible 部署openstack(vmware,多节点,ceph存储)

前言

此文章基于已部署过单节点环境,有一定的基础概念。
单节点部署参考:https://www.jianshu.com/p/73598a5cd00b
全程使用root权限操作。
已测试queens版本。3节点,其中2个节点只部署存储和网络。存储后端使用ceph。

环境准备

整体介绍

基于vmware虚拟机搭建平台。
3台虚拟机。分别为node01(选为部署节点),node02,node03。
由于性能问题,node02和node03只作为存储和网络节点。
镜像均使用CentOS-7-x86_64-Minimal-1708.iso。

  • node01:
    1. 1张nat网卡(ens33):本机网卡
    2. 1张nat网卡(ens34):openstack弹性ip使用的外网网卡
    3. 1张host-only网卡(ens35):openstack管理网网卡
    4. 额外添加一块50G硬盘作为ceph存储
    5. 6G内存,2核
  • node02:
    1. 1张nat网卡(ens33):本机网卡
    2. 1张nat网卡(ens34):openstack弹性ip使用的外网网卡
    3. 1张host-only网卡(ens35):openstack管理网网卡
    4. 额外添加一块50G硬盘作为ceph存储
    5. 2G内存,1核
  • node03:
    1. 1张nat网卡(ens33):本机网卡
    2. 1张nat网卡(ens34):openstack弹性ip使用的外网网卡
    3. 1张host-only网卡(ens35):openstack管理网网卡
    4. 额外添加一块50G硬盘作为ceph存储
    5. 2G内存,1核

基础环境配置

1. 网卡配置

参考《前言》中的单节点部署文档

  • node01:
    1. ens33: 10.10.10.80
    2. ens34: 不配置ip
    3. ens35: 192.168.10.80
  • node02:
    1. ens33: 10.10.10.90
    2. ens34: 不配置ip
    3. ens35: 192.168.10.90
  • node03:
    1. ens33: 10.10.10.95
    2. ens34: 不配置ip
    3. ens35: 192.168.10.95
2. 加速源以及防火墙配置

参考《前言》中的单节点部署文档
所有节点关闭firewalld

systemctl disable firewalld
systemctl stop firewalld

3个节点均配置加速源以及iptables,此文章不配置私有仓库。

3. 主机解析配置

vim /etc/hosts

192.168.10.80 node01
192.168.10.90 node02
192.168.10.95 node03

并且在每个节点上分别修改hostname,ceph将使用此命令得结果。
node01 节点上执行:hostname node01
node02 节点上执行:hostname node02
node03 节点上执行:hostname node03

4. 基础软件安装(3节点均需执行)

单节点环境当中并没有手动安装docker,自动安装的版本很老。此时手动安装较新版本的docker(18.09)。
安装docker:

yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce-18.09.3 -y
systemctl enable docker

配置docker:
vi /usr/lib/systemd/system/docker.service
在[Service]中添加:

MountFlags=shared

重启docker:

systemctl daemon-reload
systemctl restart docker

安装其它基础软件

yum install -y epel-release 
yum install -y python-pip
pip install -U pip
yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python
yum install -y ansible
pip install -U ansible

编辑 ansible配置
vim /etc/ansible/ansible.cfg

[defaults]
host_key_checking=False
pipelining=True
forks=100

安装kolla-ansible

pip install --ignore-installed PyYAML
pip install kolla-ansible==7.0.0
cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
cp /usr/share/kolla-ansible/ansible/inventory/* /opt/
5. 配置免密登陆

在node01上执行如下命令:

  1. 生成公私钥
ssh-keygen
  1. 复制部署节点的公钥到其它节点上
    如下命令需输入密码,注意用户使用的是root
ssh-copy-id -i /root/.ssh/id_rsa.pub root@node02
ssh-copy-id -i /root/.ssh/id_rsa.pub root@node03
  1. 测试ssh
ssh node02
ssh node03
6. 在node01上执行,配置globals.yml

vim /etc/kolla/globals.yml

kolla_base_distro: "centos"  # 基础容器镜像版本
kolla_install_type: "source"  # 源码安装方式安装组件
openstack_release: "queens"  # openstack版本,选择你需要的
network_interface: "ens35"  # 管理网使用得网卡
neutron_external_interface: "ens34"  # public网使用得网卡
kolla_internal_vip_address: "192.168.10.81"  # ha或者keepalived代理的服务内部地址。
kolla_external_vip_address: "10.10.10.81"  # ha或者keepalived代理的服务外部地址。
enable_cinder: "yes"
enable_horizon: "yes"

# 以下为ceph配置
enable_ceph: "yes"
enable_ceph_rgw: "yes"
enable_ceph_rgw_keystone: "yes"
#ceph_target_max_bytes: ""  # 表示每个cache pool最大大小。注意,如果配置了cache盘,此项不配置会导致cache不会自动清空。cache_osd_size*cache_osd_num/replicated/cache_pool_num
#ceph_target_max_objects: "" # 表示cache pool最大的object数量
ceph_pool_pg_num: 32 # Total PGs = ((Total_number_of_OSD * 100) / pool_count / replicated . 当前环境计算结果为32
ceph_pool_pgp_num: 32
glance_backend_ceph: "yes"
glance_backend_file: "no"
cinder_backend_ceph: "yes"
cinder_backup_driver: "ceph"
nova_backend_ceph: "yes"
7. 在node01上执行,配置mutinode

这里直接从all-in-one复制比较方便:

cp /opt/all-in-one /opt/node

替换掉localhost:

sed -i "/^localhost/c node01" /opt/node

修改配置文件
vim /opt/node
将 node02 node03 添加到[network]和[storage]下。意思为 node02 node03 作为network节点和storage节点

8. ceph硬盘配置

3个节点上均有一块50G得硬盘,在当前环境中为/dev/sdb
在node01上执行:

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

在node02上执行:

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

在node03上执行:

parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
9. 在node01上执行,ceph配置文件

目前安装kolla-ansible默认使用bluestore得ceph。这里演示使用filestore。需修改文件
vim /usr/share/kolla-ansible/ansible/group_vars/all.yml
修改如下属性:

ceph_osd_store_type: "filestore"

开始部署

kolla-ansible -i /opt/node bootstrap-servers
kolla-ansible -i /opt/node prechecks
kolla-ansible -i /opt/node deploy

结束部署

查看ceph状态
docker exec ceph_mon ceph -s
image.png
基本使用(可参考单节点)
pip install --ignore-installed ipaddress
pip install -U decorator 
pip install python-openstackclient python-glanceclient python-neutronclient
kolla-ansible post-deploy
. /etc/kolla/admin-openrc.sh
openstack service list --long

至此部署结束。

openstack网络介绍

https://www.jianshu.com/writer#/notebooks/31342015/notes/43532637/preview

ceph介绍

参考
https://docs.openstack.org/cinder/rocky/configuration/block-storage/drivers/ceph-rbd-volume-driver.html

ceph基于Reliable Autonomic Distributed Object Store (RADOS)。RADOS在存储群集中分配对象并复制对象以实现容错。
RADOS包含以下主要组件:

  • ceph-osd: Object Storage Device (OSD) Daemon,对象存储设备服务。ceph-osd是Ceph分布式文件系统的对象存储守护进程。 它负责将对象存储在本地文件系统上,并通过网络提供对它们的访问。必须在群集中的每个服务器上运行此守护程序。 每个OSD都可以关联硬盘驱动器。
  • ceph-mds: Meta-Data Server (MDS),元数据服务。 MDS在Ceph客户端的对象之上构建POSIX文件系统。不使用Ceph文件系统,则不需要元数据服务器。
  • ceph-mon: Monitor (MON),监控服务。轻量级守护程序,用于处理与外部应用程序和客户端的所有通信。 它还为Ceph / RADOS集群中的分布式决策提供了共识。 例如,当您在客户端上安装Ceph共享时,您指向MON服务器的地址。 它检查数据的状态和一致性。 在理想的设置中,您必须在不同的服务器上运行至少三个ceph-mon守护进程。

其它组件

  • ceph-mgr: Ceph Manager Daemon(ceph-mgr),管理服务。与监视器守护程序一起运行,为外部监视和管理系统提供额外的监视和接口。
  • ceph-nfs: 可以使用NFS-Ganesha NFS Server通过NFS协议导出CephFS命名空间。NFS-Ganesha提供了一个文件系统抽象层(FSAL)来插入不同的存储后端。Ceph对象网关可以配置为在嵌入NFS-Ganesha NFS Server时提供基于文件的访问。
  • ceph-rgw: Ceph Object Gateway,对象网关服务。Ceph对象存储使用Ceph对象网关守护进程(radosgw),它是一个用于与Ceph存储集群交互的HTTP服务器。 由于它提供与OpenStack Swift和Amazon S3兼容的接口,因此Ceph对象网关具有自己的用户管理。 Ceph对象网关可以将数据存储在用于存储来自Ceph文件系统客户端或Ceph块设备客户端的数据的相同Ceph存储集群中。 S3和Swift API共享一个公共命名空间,因此您可以使用一个API编写数据并使用另一个API检索它。

常见问题及解决

参考:
http://docs.ceph.com/docs/master/rados/troubleshooting/troubleshooting-pg/

1.
Fetching Ceph Keyrings … No JSON Object Could be Decoded

此类问题为删除环境时未删除干净,所有节点上使用docker volume ls查看是否有未清除干净得卷。手动删除。
参考:
https://docs.oracle.com/cd/E78305_01/E78304/html/troubleshoot-deploy-ceph.html

2.
pg_num 128 size 3 would mean 768 total pgs

类似问题为pg 数量设置不正确,根据实际情况调整大小。但不一定每次报这个问题都是数量不正确导致得。

3.

若一直无法定位问题,可去容器中查看日志。
比如,日志一直报无法连接之类得,检查防火墙(iptables,firewalld)

4.

在反复重装得情况下,可能触发ceph无法mount磁盘得问题。在vmware中删掉此磁盘,重新创建即可。
经测试,正确得重装姿势为:

kolla-ansible -i /opt/node destroy --yes-i-really-really-mean-it
等待成功后,再重新命名磁盘(前面得parted命令)

常用命令及解释

ceph -s  # 查看整体状态
ceph osd tree  # 查看osd结构,通常看是否与host对应。

ceph osd lspools  # 查看池信息
ceph health detail  # 查看健康详情
ceph osd dump  # 查看osd详情
ceph pg dump   # 查看pg详情
ceph osd crush xxxx  # 此类命令为ceph策略相关。建议了解

扩展知识

  1. osd(filestore后端)相关
    在同一个主机有多个osd磁盘时,磁盘标签需添加后缀区分。比如2个osd:
parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_001 1 -1
parted /dev/sdc -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_002 1 -1

每个osd盘都会有对应一个osd得容器。
其次,osd还可以有日志盘,缓存盘,这两个均建议为固态盘。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容