背景知识
(适合Openstack/ceph有了解的阅读人群)
Openstack
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3 的云基础架构服务。
Ceph
Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs)。目前也是OpenStack的主流后端存储,和OpenStack亲如兄弟,为OpenStack提供统一共享存储服务。Ceph与Openstack关系如下图:
Kolla
Kolla是一个非常棒的项目了,它解决了原始OpenStack部署的一些痛点,kolla项目是为了容器化openstack,目标是做到100个节点的开箱即用,所有的组件的HA都具备。
部署开始
(适合Openstack/ceph有了解的阅读人群)
系统环境规划
配置前准备
修改主机名
Kolla/Ceph-1/Ceph-2/Node01/Node02
# hostnamectl set-hostname Kolla
修改hosts
Kolla
# vi /etc/ hosts
10.10.10.128 kolla
10.10.10.130 node01
10.10.10.131 node02
192.168.175.101 ceph-1
192.168.175.102 ceph-2
SSH免密登录
Kolla/Ceph-1/Ceph-2/Node01/Node02
参考:https://blog.csdn.net/fuck487/article/details/79361197
配置防火墙
Kolla/Ceph-1/Ceph-2/Node01/Node02
# firewall-cmd --zone=public --add-port=6789/tcp --permanent
# firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
# firewall-cmd --zone=public --add-port=123/udp --permanent
# firewall-cmd --reload
# firewall-cmd --zone=public --list-all
因为环境不通外网,无法访问Centos时间源。并且,这个环境也没有其他的NTP时间源,因此,在这里,我们使用Monitor服务器(Kolla)作为NTP server的本地时间源。
安装NTP
Kolla/Ceph-1/Ceph-2/Node01/Node02
# yum -y install ntp
校准主NTP时间
Kolla
# ntpdate time.windows.com && hwclock –w
修改ntp.conf
Kolla
# vi /etc/ntp.conf
注销掉以时间源的部分
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
在文件末尾添加如下内容
server 127.127.1.0 minpoll 4 # 如果有其他的NTP源,可以更换这里的ip地址。
fudge 127.127.1.0 stratum 1
restrict 192.168.175.0 mask 255.255.255.0 nomodify notrap
启动NTP服务
Kolla/Ceph-1/Ceph-2/Node01/Node02
# systemctl enable ntpd
# systemctl start ntpd
同步NTP
Ceph-1/Ceph-2/Node01/Node02
# ntpdate -u 192.168.175.128
# ntpstat
# ntpq -p
注意:NTP服务刚重启时,需要一定的时间来同步时间源,不能立刻提供服务,需一定时间后才能正常工作(一般5分钟左右)。可在NTP server端执行命令ntpq -p来查看服务状态。
pip 加速源(阿里源)
Kolla
# mkdir ~/.pip
# cat > ~/.pip/pip.conf << EOF
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF
安装基础包
Kolla
# yum install –y epel-release
# yum install –y python-pip
# yum install –y python-devel
# yum install –y libffi-devel
# yum install –y gcc
# yum install –y openssl-devel
部署Openstack&Ceph
(适合Openstack/ceph有了解的阅读人群)
Docker环境部署
安装docker
Kolla
# yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
#yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
#yum list docker-ce --showduplicates | sort -r
# yum install docker-ce #或 yum install docker-ce-18.06.3.ce-3.el7
设置docker服务参数MountFlags
Kolla
# mkdir /etc/systemd/system/docker.service.d
# tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF
重启相关服务
Kolla
# systemctl daemon-reload && systemctl enable docker && systemctl restart docker
Docker镜像仓库部署
配置Registry服务器
Kolla
# mkdir /opt/registry
# docker run -d -p 4000:5000 -v /opt/registry:/var/lib/registry --restart=always --name registry registry:2.6.2
访问私有的Docke Registry服务器
Kolla
# vi /usr/lib/systemd/system/docker.service
注释掉原有配置
#ExecStart=/usr/bin/dockerd
替换上面配置
ExecStart=/usr/bin/dockerd --insecure-registry 10.10.10.128:4000
重启相关服务
Kolla
# systemctl daemon-reload && systemctl restart docker
上传Kolla镜像到本地Docker仓库服务器
Kolla
#tar zxvf kolla-openstack-queens-registry.tar.gz -C /
如需要,可以下载本人做好的镜像文件,此文件可满足本篇部署需求。同时公众号也有制作镜像的文章。
查看是否恢复成功
Kolla
# curl -XGET http://10.10.10.128:4000/v2/_catalog
Kolla部署
安装Ansible
Kolla
# yum install -y ansible
安装kolla-ansible
Kolla
# pip install kolla-ansible
复制相关文件
Kolla
# cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
# cp /usr/share/kolla-ansible/ansible/inventory/* /opt/
编辑kolla配置文件
Kolla
# vi /etc/kolla/globals.yml
kolla_base_distro: "centos" # 基础容器镜像版本
kolla_install_type: "source" # 源码安装方式安装组件
openstack_release: "queens" # openstack版本,选择你需要的
docker_registry: "10.10.10.128:4000" #docker私有仓库地址
network_interface: "ens33" # 管理网使用得网卡
neutron_external_interface: "ens38" # public网使用得网卡
kolla_internal_vip_address: " 10.10.10.250" # ha或者keepalived代理的服务内部地址。
kolla_external_vip_address: "192.168.175.250" # ha或者keepalived代理的服务外部地址。
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
cinder_volume_group: "cinder-volumes"
enable_horizon: "yes" #因为控制节点有多个,所以要启动haproxy,默认
enable_haproxy: "yes"
enable_heat: "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: 16
ceph_pool_pgp_num:16
glance_backend_ceph: "yes"
glance_backend_file: "no"
cinder_backend_ceph: "yes"
cinder_backup_driver: "ceph"
nova_backend_ceph: "yes"
ceph_pool_type: "replicated"
》pg_num= ((Total_number_of_OSD * 100) / pool_count / replicated
》Total_number_of_OSD:4(本篇4个OSD)
》pool_count:8(根据开启组件情况)
》replicated:3(默认)
编辑节点文件
Kolla
# vi /opt/multinode
生成随机码作为密码使用
Kolla
# kolla-genpwd
Ceph配置
ceph硬盘配置
Ceph-1/Ceph-2
# parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
# parted /dev/sdc -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
SSD的分区,则使用不同标签,KOLLA_CEPH_OSD_BOOTSTRAP_SDC
修改ceph配置文件
Kolla
# vi /usr/share/kolla-ansible/ansible/group_vars/all.yml
ceph_osd_store_type: "filestore"
目前安装kolla-ansible默认使用bluestore的ceph,bluestore用于SSD硬盘。这里演示使用filestore。
开始部署Openstack&Ceph
部署
Kolla
# kolla-ansible -i /opt/multinode bootstrap-servers
# kolla-ansible -i /opt/multinode prechecks
# kolla-ansible -i /opt/multinode deploy
安装命令行工具
Kolla
# pip install python-openstackclient python-glanceclient python-neutronclient
确认部署(会生成管理员密码等)
Kolla
# kolla-ansible post-deploy
导入环境变量
Kolla
# . /etc/kolla/admin-openrc.sh
打开openstack管理web
可以联通175.0网段电脑
Http://192.168.175.250
检测部署情况
查看Openstack服务
node1/node2/ceph-1/ceph-2
# openstack service list --long
查看ceph状态
Node01/Node02
# docker exec ceph_mon ceph -s
部署过程出现问题的解决方法
(适合Openstack/ceph有了解的阅读人群)
Health_warm
查看ceph状态,出现health_warm警告:
查看OSD TREE是否正常
Node01/Node02
# docker exec ceph_mon ceph osd tree
查看Pool情况
Node01/Node02
# docker exec -it ceph_mon ceph osd lspools
# docker exec -it ceph_mon ceph osd dump | grep pool
ceph系统有health_warn警告,通过Pool看出池的副本数是3(replicated size),osd tree故障域只有两台host,有一个副本没有地方放置,所以是降级状态(degraded)。
解决方法
Node01
配置副本数量,8个pool池都需要改
# docker exec -it ceph_mon ceph osd pool set .rgw.root size 2
Cannot uninstall 'PyYAML'.
It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
解决方法
Kolla
pip install --ignore-installed PyYAML
Network timed out while trying to...
fatal: [localhost]: FAILED! =>{"changed": false, "msg": "Unknown error message: Network timed out while trying to connect to https://index.docker.io/v1/repositories/kolla/centos-source-fluentd/images. You may want to check your internet connection or if you are behind a proxy."}
解决方法
Kolla
没有新建:vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://jzngeu7d.mirror.aliyuncs.com"]
}
#systemctl daemon-reload
#systemctl restart docker
'ReadTimeoutError("HTTPSConnection
Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)",)': /simple/ansible/
解决方法
Kolla
# pip install -U ansible --default-timeout=100
ImportError: cannot import name decorate
ImportError: cannot import name decorate
解决方法
Kolla
# pip install -U decorator
Cannot uninstall 'ipaddress'.
Cannot uninstall 'ipaddress'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
此类问题强制升级此安装包即可。(已发现PyYAML,ipaddress)
解决方法
Kolla
# pip install --ignore-installed ipaddress
TCP connection reset by peer
"https://yum.dockerproject.org/repo/main/centos/7/repodata/repomd.xml: [Errno 14] curl#35 - \"TCP connection reset by peer\"", "/bin/sh: apt-get: command not found"]}
解决方法
Kolla
yum 加速源(centos7 阿里源)
# yum install -y wget
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum clean all
# yum makecache