为方便大数据平台与管理工具的研发,在公司成本不额外增加的情况下,从公司仓库里拉了几台下线物理机来做大数据平台的实验环境。但整体物理机性能都偏高,单独安装一个大数据服务,很豪,但是也很浪费。而且主机台数不是很多,无法做规模化的平台功能验证。并且在平台研发工程中,涉及到无数次的集群卸载与重装,万一把物理机搞挂了,修起来是很麻烦的。
综合以上背景情况,进行云平台的一些方面的研究,听说OpenStack很屌,所以想来尝试尝试,挑战挑战。经过一段时间的不屑努力,终于成功部署一套基于完全开源的、方便部署、各位看官姥爷可复制的一个保姆级操作文档。整体操作做了模块拆分,循序渐进,满足你的各种求知欲。此篇文档有点长,建议大家在wifi环境下观看。整个OpenStack系列,预计包含:OpenStack安装,Debug记录,页面优化,虚拟机镜像制作,私有云使用,大数据建设等模块。后续会持续更新。
本节为第一章节,进行OpenStack的安装。经过前期调研和曾经有过一丢丢的工作经验,找了一个Kolla Ansible来做整个OpenStack的自动化部署(根本就没想过一个组件一个组件安装,真心太难了...)。
1. 环境说明
1.1 主机信息
选用三台主机,每台主机配置双网口进行支持。
| 主机名 | IP1 | IP2 | 角色 |
| dba-bigdata-node1 | 192.168.10.11 | vip:192.168.20.20 | 控制 + 计算 |
| dba-bigdata-node2 | 192.168.10.12 | 控制 + 计算 | |
| dba-bigdata-node3 | 192.168.10.13 | 计算 |
控制:代表需要运行的程序控制程序:包含控制服务control、网络服务Neutrun,监控服务monitor,部署服务deploy。
计算:则是负载实际虚拟机的生产,主要包含存储Storage(本篇采用LVM进行实现),计算Nova。
整个网络架构图如下

默认的磁盘做了raid信息。
/dev/sda 由4个盘做raid5,挂载与/目录
/dev/sdb 由8个盘做raid5,配置成LVM,提供云磁盘服务。
1.2 软件信息
1.2.1 版本选择
因为现在我们使用大多数系统还是Centos 7版本,所以,我们安装也采用对应的版本进行安装。具体的版本信息如下:
| 软件 | 版本 | 说明 |
| kolla | 9.4.0 | kolla版本 |
| openstack | train | 安装的OpenStack版本 |
| OS | centos7 | 操作系统版本 |
| 编译格式 | source | binnary 使用yum安装rpm包 source 从源码编译 |
2. 部署安装
2.1 环境前置准备
以下操作为主机的基础配置,以下部分,除非特殊说明外,所有操作需要在所有主机中进行。
2.1.1 设置主机名
设置主机名,配置主机名解析
| [root@dba_bigdata_node1 192.168.10.11 ~]# hostnamectl set-hostname dba_bigdata_node1 [root@dba_bigdata_node1 192.168.10.11 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.11 dba_bigdata_node1 192.168.10.12 dba_bigdata_node2 192.168.10.13 dba_bigdata_node3 |
2.1.2 关闭防火墙
| systemctl stop firewalld.service systemctl disable firewalld.service |
2.1.3 关闭sellinux
entenforce 为马上生效,但是重启后丢失配置。
/etc/selinux/config则是重启后生效。
| root@dba_bigdata_node1 192.168.10.11 ~]# sed -i '/^SELINUX=.*/c SELINUX=disabled' /etc/selinux/config [root@dba_bigdata_node1 192.168.10.11 ~]# sed -i 's/^SELINUXTYPE=.*/SELINUXTYPE=disabled/g' /etc/selinux/config [root@dba_bigdata_node1 192.168.10.11 ~]# grep --color=auto '^SELINUX' /etc/selinux/config SELINUX=disabled SELINUXTYPE=disabled [root@dba_bigdata_node1 192.168.10.11 ~]# setenforce 0 setenforce: SELinux is disabled |
2.1.4 安装常用软件包
| yum install gcc vim wget net-tools ntpdate git -y |
2.1.5 配置免密钥
生成密钥文件,只在node1 中执行。
| [root@dba_bigdata_node1 192.168.10.11 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:3gnHbYES+WuYpfVVEltj7PMjwoOZWRc75c7IhtYYynw root@dba_bigdata_node1 The key's randomart image is: +---[RSA 2048]----+ | .. o+.| | .. . .o=o| | ... . Bo | | o++ =.+ | | S*@oX.= o| | .+%oE.* +.| | ..= + . .| | | | | +----[SHA256]-----+ |
分发密钥到其他主机,只在node1 中执行。
| [root@dba_bigdata_node1 192.168.10.11 ~]# ssh-copy-id root@dba-bigdata-node1 [root@dba_bigdata_node1 192.168.10.11 ~]# ssh-copy-id root@dba-bigdata-node2 [root@dba_bigdata_node1 192.168.10.11 ~]# ssh-copy-id root@dba-bigdata-node3 |
测试node1 是否可登录其他主机
| [root@dba_bigdata_node1 192.168.10.11 ~]# ssh 192.168.10.12 Unable to get valid context for root Last login: Fri Sep 9 13:48:22 2022 from 30.90.9.77 [root@dba_bigdata_node2 192.168.10.12 ~]# |
修改ssh配置,所有主机
| [root@dba_bigdata_node2 192.168.10.12 ~]# sed -i 's/#ClientAliveInterval 0/ClientAliveInterval 60/g' /etc/ssh/sshd_config [root@dba_bigdata_node2 192.168.10.12 ~]# sed -i 's/#ClientAliveCountMax 3/ClientAliveCountMax 60/g' /etc/ssh/sshd_config [root@dba_bigdata_node2 192.168.10.12 ~]# systemctl daemon-reload && systemctl restart sshd && systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since 五 2022-09-09 14:07:43 CST; 5ms ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 4449 (sshd) CGroup: /system.slice/sshd.service └─4449 /usr/sbin/sshd -D 9月 09 14:07:43 dba_bigdata_node2 systemd[1]: Starting OpenSSH server daemon... 9月 09 14:07:43 dba_bigdata_node2 sshd[4449]: Server listening on 0.0.0.0 port 22. 9月 09 14:07:43 dba_bigdata_node2 sshd[4449]: Server listening on :: port 22. 9月 09 14:07:43 dba_bigdata_node2 systemd[1]: Started OpenSSH server daemon. [root@dba_bigdata_node2 192.168.10.12 ~]# |
2.1.6 Yum 源修改
修改为阿里云或者中科大的源地址
阿里:baseurl=http://mirrors.cloud.aliyuncs.com/alinux
中科大:baseurl=https://mirrors.ustc.edu.cn/centos
| sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-Base.repo |
重新制作缓存
| yum clean all ;yum makecache |
安装epel源
| yum install -y epel-release |
升级系统软件包
| yum update -y |
2.1.7 安装python环境
| yum install python2-devel libffi-devel openssl-devel libselinux-python -y yum install python-pip -y |
配置清华的pip源,加快速度
| mkdir ~/.pip cat > ~/.pip/pip.conf << EOF [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host=pypi.tuna.tsinghua.edu.cn EOF |
升级pip
| pip install --upgrade "pip < 21.0" pip install pbr |
2.2 时间同步
2.2.1 安装chrony服务
| [root@dba_bigdata_node1 192.168.10.11 ~]# yum -y install chrony |
2.2.2 设置为阿里地址
| [root@dba_bigdata_node1 192.168.10.11 ~]# cp /etc/chrony.conf{,.bak} [root@dba_bigdata_node1 192.168.10.11 ~]# echo " server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server ntp6.aliyun.com iburst stratumweight 0 driftfile /var/lib/chrony/drift rtcsync makestep 10 3 bindcmdaddress 127.0.0.1 bindcmdaddress ::1 keyfile /etc/chrony.keys commandkey 1 generatecommandkey noclientlog logchange 0.5 logdir /var/log/chrony ">/etc/chrony.conf |
2.2.3 启动服务
| systemctl enable chronyd && systemctl restart chronyd && systemctl status chronyd |
2.2.4 chrony 同步源
| [root@dba_bigdata_node1 192.168.10.11 ~]# chronyc sources -v [root@dba_bigdata_node1 192.168.10.11 ~]# yum install ntpdate [root@dba_bigdata_node1 192.168.10.11 ~]# ntpdate ntp1.aliyun.com #系统时间写入到硬件时间 [root@dba_bigdata_node1 192.168.10.11 ~]# hwclock -w |
2.2.5 配置定时任务
| crontab -e0 */1 * * * ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w0 */1 * * * ntpdate ntp2.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w |
2.2 Docker-ce
2.2.1 设置yum源
设置docker-ce源,并设置为国内的地址。
| wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo |
2.2.2 卸载现在的Docker信息
| [root@dba_bigdata_node1 192.168.10.11 ~]# yum remove docker docker-common docker-selinux docker-engine -y 已加载插件:fastestmirror 参数 docker 没有匹配 参数 docker-common 没有匹配 参数 docker-selinux 没有匹配 参数 docker-engine 没有匹配 不删除任何软件包 |
2.2.3 安装docker
| yum install docker-ce -y |
2.2.4 配置国内docker推送地址
| mkdir /etc/docker/ cat > /etc/docker/daemon.json << EOF { "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ], "insecure-registries": ["172.16.0.200:5000","192.168.10.11:4000"] } EOF |
其中172.16.0.200:5000是另外一个docker私有地址。可以同时用多个。
2.2.5 开启docker共享模式
mkdir -p /etc/systemd/system/docker.service.dcat >> /etc/systemd/system/docker.service.d/kolla.conf << EOF[Service]MountFlags=sharedEOF
2.2.6 开启docker服务
| systemctl daemon-reload && systemctl enable docker && systemctl restart docker&& systemctl status docker |
查看docker信息
| [root@dba_bigdata_node1 192.168.10.11 ~]# docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Docker Buildx (Docker Inc., v0.8.2-docker) scan: Docker Scan (Docker Inc., v0.17.0) Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 20.10.17 Storage Driver: overlay2 |
2.2.7 docker region
#拉取registry镜像
| docker pull registry |
设置配置目录
| [root@dba_bigdata_node1 192.168.10.11 kolla]# vim /etc/docker/registry/config.yml service: registry |
启动内部源
docker run -d \--name registry \-p 4000:5000 \-v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml \registry:latest[root@dba_bigdata_node1 192.168.10.11 kolla]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES7db4f7e1abbf registry:latest "/entrypoint.sh /etc…" 2 seconds ago Up 1 second registry
修改内部源地址
[root@dba_bigdata_node1 192.168.10.11 kolla]# vim /etc/docker/daemon.json"insecure-registries": ["172.16.212.241:5000","192.168.10.11:4000"]
重启docker
[root@dba_bigdata_node1 192.168.10.11 kolla]# systemctl restart docker[root@dba_bigdata_node1 192.168.10.11 kolla]# docker start registry
查看docker信息
[root@dba_bigdata_node1 192.168.10.11 kolla]# docker infoInsecure Registries:172.16.212.241:5000192.168.10.11:5000127.0.0.0/8
测试是否可用
#查看docker中的images信息
[root@dba_bigdata_node1 192.168.10.11 kolla]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEregistry latest 3a0f7b0a13ef 4 weeks ago 24.1MB#重命名docker images名字[root@dba_bigdata_node1 192.168.10.11 kolla]# docker tag registry 192.168.10.11:4000/registry#将本地images推送到内部源[root@dba_bigdata_node1 192.168.10.11 kolla]# docker push 192.168.10.11:4000/registryUsing default tag: latestThe push refers to repository [192.168.10.11:4000/registry]73130e341eaf: Pushed692a418a42be: Pushedd3db20e71506: Pushed145b66c455f7: Pushed994393dc58e7: Pushedlatest: digest: sha256:29f25d3b41a11500cc8fc4e19206d483833a68543c30aefc8c145c8b1f0b1450 size: 1363
2.2.8 docker region UI
配置Docker UI 与nginx代理。通过UI管理查看docker images信息
#制作docker - uidocker run -p 81:80 \--name registry-ui \-e REGISTRY_URL="http://192.168.10.11:5000" \-d 172.16.212.241:5000/docker-registry-ui:latest访问地址:http://192.168.10.11:81/可以查看具体的docker images信息
2.3 Ansible
2.3.1 安装ansible
安装ansible,只需要在node1主机安装配置即可。
[root@dba_bigdata_node1 192.168.10.11 ~]# yum install -y ansible
2.3.2 配置ansible默认配置
sed -i 's/#host_key_checking = False/host_key_checking = True/g' /etc/ansible/ansible.cfgsed -i 's/#pipelining = False/pipelining = True/g' /etc/ansible/ansible.cfgsed -i 's/#forks = 5/forks = 100/g' /etc/ansible/ansible.cfg
2.3.3 配置ansible主机信息
[root@dba_bigdata_node1 192.168.10.11 ~]# echo "dba_bigdata_node[1:3]" >>/etc/ansible/hosts
2.3.4 验证是否安装完毕
[root@dba_bigdata_node1 192.168.10.11 ~]# ansible all -m pingdba_bigdata_node1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}dba_bigdata_node3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}dba_bigdata_node2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}
2.4 Ansible Kolla
以下安装步骤,在主机node1中进行即可。
2.4.1 安装kolla-ansible
[root@dba_bigdata_node1 192.168.10.11 ~]# pip install kolla-ansible==9.4.0
若安装报错。
pip install --upgrade setuptoolspip install --upgrade pippip install pbr==5.6.0
2.4.2 设置默认配置到当前目录
mkdir -p /etc/kollachown $USER:$USER /etc/kollacp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kollacp /usr/share/kolla-ansible/ansible/inventory/* .
2.4.3 配置安装主机列表
编辑/root/multinode
# These initial groups are the only groups required to be modified. The# additional groups are for more control of the environment.[control]# These hostname must be resolvable from your deployment hostdba_bigdata_node1dba_bigdata_node2dba_bigdata_node3# The above can also be specified as follows:#control[01:03] ansible_user=kolla# The network nodes are where your l3-agent and loadbalancers will run# This can be the same as a host in the control group[network]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3[compute]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3[monitoring]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3# When compute nodes and control nodes use different interfaces,# you need to comment out "api_interface" and other interfaces from the globals.yml# and specify like below:#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em1[storage]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3[deployment]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3
2.4.4 配置kolla安装设置
vim /etc/kolla/globals.yml[root@dba_bigdata_node1 192.168.10.11 kolla]# cat globals.yml |egrep -v '^#|^$'---kolla_base_distro: "centos"kolla_install_type: "source"openstack_release: "train"node_custom_config: "/etc/kolla/config"kolla_internal_vip_address: "192.168.10.20"docker_namespace: "kolla"network_interface: "enp7s0f0"api_interface: "{{ network_interface }}"storage_interface: "{{ network_interface }}"cluster_interface: "{{ network_interface }}"tunnel_interface: "{{ network_interface }}"dns_interface: "{{ network_interface }}"neutron_external_interface: "enp7s0f1"neutron_plugin_agent: "openvswitch"neutron_tenant_network_types: "vxlan,vlan,flat"keepalived_virtual_router_id: "51"enable_haproxy: "yes"enable_mariadb: "yes"enable_memcached: "yes"enable_ceilometer: "yes"enable_cinder: "yes"enable_cinder_backup: "yes"enable_cinder_backend_lvm: "yes"enable_gnocchi: "yes"enable_heat: "yes"enable_neutron_dvr: "yes"enable_neutron_qos: "yes"enable_neutron_agent_ha: "yes"enable_neutron_provider_networks: "yes"enable_nova_ssh: "yes"cinder_volume_group: "cinder-volumes"nova_compute_virt_type: "qemu"nova_console: "novnc"
生产随机密码
kolla-genpwd[root@dba_bigdata_node1 192.168.10.11 kolla]# cat /etc/kolla/passwords.yml.....zfssa_iscsi_password: XL8XeUdxaowGT9HUsOnGpxJyalvlm9YV6xNvZZx0zun_database_password: lhxgYCRaiN4ACvFgISIbgimGxkUe1z3pVgU0CYxdzun_keystone_password: ZDNuGXjOUyme28dUX1fWKbXdDDvItAxxtjYRwiUx
修改登录密码
sed -i 's/^keystone_admin_password.*/keystone_admin_password: 123456/' /etc/kolla/passwords.yml
2.4.5 LVM盘
发现CEPH制作盘的时候,无法创建主机,所以修改为LVM。
创建逻辑盘
pvcreate /dev/sdb
创建逻辑卷
vgcreate cinder-volumes /dev/sdb
查看是否创建成功
[root@dba-bigdata-node1 192.168.10.11 /]# vgsVG #PV #LV #SN Attr VSize VFreecentos 1 3 0 wz--n- 1.63t 0cinder-volumes 1 2 0 wz--n- <3.82t <195.21g[root@dba-bigdata-node1 192.168.10.11 /]# pvsPV VG Fmt Attr PSize PFree/dev/sda2 centos lvm2 a-- 1.63t 0/dev/sdb cinder-volumes lvm2 a-- <3.82t <195.21g[root@dba-bigdata-node1 192.168.10.11 /]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Converthome centos -wi-ao---- 1.58troot centos -wi-ao---- 50.00gswap centos -wi-ao---- 4.00gcinder-volumes-pool cinder-volumes twi-aotz-- <3.63t 0.00 10.41volume-beb1939a-b444-4ea0-b326-86f924fe3a50 cinder-volumes Vwi-a-tz-- 100.00g cinder-volumes-pool 0.00
修改kolla的配置为LVM
enable_cinder: "yes"enable_cinder_backup: "yes"enable_cinder_backend_lvm: "yes"cinder_volume_group: "cinder-volumes"
2.4.6 配置nova文件
mkdir /etc/kolla/configmkdir /etc/kolla/config/novacat >> /etc/kolla/config/nova/nova-compute.conf << EOF[libvirt]virt_type = qemucpu_mode = noneEOF
2.4.7 关闭创建新卷
mkdir /etc/kolla/config/horizon/cat >> /etc/kolla/config/horizon/custom_local_settings << EOFLAUNCH_INSTANCE_DEFAULTS = {'create_volume': False,}EOF
2.4.8 创建ceph配置
cat >> /etc/kolla/config/ceph.conf << EOF[global]osd pool default size = 3osd pool default min size = 2mon_clock_drift_allowed = 2osd_pool_default_pg_num = 8osd_pool_default_pgp_num = 8mon clock drift warn backoff = 30EOF
2.3 OpenStack 安装
2.3.1 编辑docker包
预先下载并推送docker包到各个节点,加快安装时候的速度
kolla-ansible -i /root/multinode pull
2.3.2 各节点依赖安装
kolla-ansible -i /root/multinode bootstrap-servers

2.3.3 执行安装前检查
kolla-ansible -i /root/multinode prechecks

2.3.4 部署
部署之前,先下载所有所有的docker依赖安装包,并推送到所有主机上,以加快部署
kolla-ansible -i /root/multinode pull
到主机通过docker images上查看

为了以后使用,让这些安装的包推送到docker registry
重命名:docker tag 原名:tag 新名:tag
docker images |grep ^kolla|grep 'train ' |awk '{print "docker tag "$1 ":" $2 " 192.168.10.11:4000/" $1 ":" $2 }'
将本地的image信息,推送到本地源
docker images |grep ^kolla|grep 'train ' |awk '{print "docker push 192.168.10.11:4000/" $1 ":" $2 }'
查看是否推送完毕

开始执行实际的安装:大概需要等待半小时左右。
kolla-ansible -i /root/multinode deploy
2.3.5 初始化
[root@dba-bigdata-node1 192.168.10.11 ~]# kolla-ansible -i multinode post-deploy
会在本机,生成console需要的各种变量
root@dba-bigdata-node1 192.168.10.11 ~]# cat /etc/kolla/admin-openrc.sh# Clear any old environment that may conflict.for key in $( set | awk '{FS="="} /^OS_/ {print $1}' ); do unset $key ; doneexport OS_PROJECT_DOMAIN_NAME=Defaultexport OS_USER_DOMAIN_NAME=Defaultexport OS_PROJECT_NAME=adminexport OS_TENANT_NAME=adminexport OS_USERNAME=adminexport OS_PASSWORD='4rfv$RFV094'export OS_AUTH_URL=http://192.168.10.20:35357/v3export OS_INTERFACE=internalexport OS_IDENTITY_API_VERSION=3export OS_REGION_NAME=RegionOneexport OS_AUTH_PLUGIN=password
安装openstack命令行程序
yum install centos-release-openstack-train -yyum makecache fastyum install python-openstackclient -y
修改初始化脚本,并执行初始化:/usr/share/kolla-ansible/init-runonce
ENABLE_EXT_NET=${ENABLE_EXT_NET:-1}EXT_NET_CIDR=${EXT_NET_CIDR:-'10.0.2.0/24'}EXT_NET_RANGE=${EXT_NET_RANGE:-'start=10.0.2.150,end=10.0.2.199'}EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'10.0.2.1'}
浏览器访问OpenStack 页面:http://192.168.10.20即可访问





















