容器化部署openstackT版且以ceph为后端存储,拜托,真的很简单(实战)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 自动化部署

项目背景

1.实验室服务器闲置
2.日常使用时对实验环境需求过大。单台使用不便
3.

部署环境规划

在这里插入图片描述

简单架构示意

在这里插入图片描述

项目目标

1.    实现容器化部署docker+ Ansible+openstack-tarin
2.    使用keeplived监控nova服务实现在单台服务器宕机的情况下能迅速切断连接减轻平台负载
3.    HAprox+Keepalived实现集群的负载均衡和高可用(部署)
4.    部署采用自动化部署工具kolla
5.    采用源码方式部署openstack(所有组件服务的源码均存放在对应容器的根下,方便二次开发)
6.    Docker镜像托管至harbor私有仓库做docker备份以及镜像源
7.    系统采用centos-2009版本(禁止使用最小化版本CentOS-7-x86_64-Minimal-2009.iso)
8.    将控制节点资源加入计算服务,此处注意在nova配额时需保留6核12g的资源来保证controller节点的正常运行
9.    Freezer备份服务无法引入,环境存储资源不足
10.    部署mariadb高可用(2主)
11.    双控制节点保证基础服务的高可用
12.    Neutron服务高可用
13.    Kolla支持节点扩展所以本手册适用于拥有2台及以上服务器的实际生产环境
14.    使用Grafana+prometheus对主机进行监控

前期准备

部署所需组件

在这里插入图片描述

部署

6 关闭防火墙,selinux=disabled

网卡配置

Enp8s0(网卡名称根据实际情况修改)

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp8s0
UUID=55ae341f-82d5-4656-89ce-a5bed15ee1b6
DEVICE=enp8s0
ONBOOT=yes
IPADDR=172.16.10.104
PREFIX=24
GATEWAY=172.16.10.1
DNS1=8.8.8.8
IPV6_PRIVACY=no

Enp9s0(网卡名称根据实际情况修改)

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp9s0
UUID=f240ab63-3b6a-4103-9620-7798e4e70445
DEVICE=enp9s0
ONBOOT=no
IPV6_PRIVACY=no

第一张网卡配置为静态地址且连接网络
第二张网卡配置为激活状态无ip模式none
所有节点均配置

Hosts配置

172.16.10.104 controller
172.16.10.105compute01
172.16.10.106 compute02

所有节点均配置且需要修改对应hostname

hostnamectl set-hostname controller
hostnamectl set-hostname compute01
hostnamectl set-hostname compute02

手动配置免密登录(所有节点都需执行)

ssh-keygen
ssh-copy-id compute01
ssh-copy-id compute02
ssh-copy-id controller

所有节点开启ssh公钥允许登录 /etc/ssh/sshd_config

PubkeyAuthentication yes

重启服务

systemctl restart sshd

Harbor仓库安装

选择在存储容量较大的一台服务器安装harbor
1.解压文件harbor-offline-installer-v2.1.5.tgz

tar -xvf harbor-offline-installer-v2.1.5.tgz

2.docker-ce安装(所有节点都需安装)

   yum install -y yum-utils device-mapper-persistent-data lvm2
     yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     yum list docker-ce --showduplicates | sort -r
(docekr版本使用稳定版,手动指定安装)
 yum install -y  docker-ce-19.03.13-3.el7 docker-ce-cli-19.03.13-3.el7 containerd.io
 systemctl start docker
 systemctl enable docker
 docker version

3.docker-compose安装(所有节点安装)

scp docker-compose-Linux-x86_64 compute01:/root/ 
scp docker-compose-Linux-x86_64 compute02:/root/
mv docker-compose-Linux-x86_64 docker-compose
chmod +x docker-compose
mv docker-compose /usr/bin/
docker-compose -v

4.修改harbor.yal.tmpl文件 (进入解压后的harbor文件夹)
在这里插入图片描述
修改默认端口为82
注释掉https所有选项否则无法安装
Hostname:当前主机ip(不可用127.0.0.1)
harbor_admin_password: (登录密码)
5.安装仓库

mv harbor.yml.tmpl harbor.yml
./install.sh

通过浏览器访问172.16.10.104:82
6.在harbor创建公开项目openstack-train
在这里插入图片描述
7.将所有镜像导入docker
使用脚本docker-image-load.sh
注意镜像存放路径/mnt/kollaimage

chmod  +x docker-image-load.sh
./docker-image-load.sh

推送过程较长
8.推送至harbor仓库
在所有节点添加配置

vim /etc/docker/daemon.json
    {
  "registry-mirrors": [],
  "insecure-registries": ["172.16.10.104:82"],
  "debug": true,
  "experimental": false
}

重启dockerr

systemctl daemon-reload
systemctl restart docker

使用脚本docker_image_push.sh进行推送
在这里插入图片描述

安装所需包(所有节点) ansible

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

配置阿里云pip源(所有节点)安装pip

mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF 
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF
pip install -U pip
yum install -y wget
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python2.7 get-pip.py
pip install --ignore-installed requests

安装 kolla-ansible(控制节点)

pip install pbr
pip install kolla-ansible==9.1.0 --ignore-installed PyYAML

复制 kolla-ansible配置文件到当前环境(controller)

mkdir -p /etc/kolla
chown $USER:$USER /etc/kolla
cp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp /usr/share/kolla-ansible/ansible/inventory/* .

修改ansible配置文件(contoller)

cat << EOF | sed -i '/^\[defaults\]$/ r /dev/stdin' /etc/ansible/ansible.cfg
host_key_checking=False
pipelining=True
forks=100
EOF

后端存储Ceph部署(此次为三节点)

在所有节点配置YUM:

配置系统源码,阿里基础源和epel源:

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

YUM优先级别:

yum -y install yum-plugin-priorities.noarch

所有配置ceph源:

cat << EOF | tee /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/\$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF

在所有集群和客户端节点安装Ceph

所有节点安装

yum -y install ceph

ceph -v命令查看版本:
若报错urllib3无法安装可先删除后重装(无报错则无需执行)

pip uninstall urllib3

在controller节点额外安装ceph-deploy

yum -y install ceph-deploy

部署MON节点
创建目录生成配置文件

mkdir cluster
cd cluster
ceph-deploy new controller compute01 compute02

初始化密钥

ceph-deploy mon create-initial

将ceph.client.admin.keyring拷贝到各个节点上

ceph-deploy --overwrite-conf admin controller compute01 compute02

查看是否配置成功。

ceph -s

在这里插入图片描述
部署MGR节点

ceph-deploy mgr create controller compute01 compute02

查看MGR是否部署成功
在这里插入图片描述
部署OSD节点

ceph-deploy osd create --data /dev/sdb controller
ceph-deploy osd create --data /dev/sdb compute01
ceph-deploy osd create --data /dev/sdb compute02

创建成功后,查看是否正常
在这里插入图片描述

配置ansible剧本(contoller)

1.使用剧本multinode文件配置三计算二控制
在这里插入图片描述
2.检查inventory配置是否正确,执行:

ansible -i multinode all -m ping

3.生成openstack组件用到的密码,该操作会填充/etc/kolla/passwords.yml,该文件中默认参数为空。

kolla-genpwd
  1. 修改keystone_admin_password,可以修改为自定义的密码方便后续horizon登录,这里改为kolla。
sed -i 's#keystone_admin_password:.*#keystone_admin_password: cqcet12345#g' /etc/kolla/passwords.yml 
cat /etc/kolla/passwords.yml | grep keystone_admin_password

注意:/etc/kolla/passwords.yml 为openstack各组件服务密码

5.修改全局配置文件globals.yml,该文件用来控制安装哪些组件,以及如何配置组件,由于全部是注释,这里直接追加进去,也可以逐个找到对应项进行修改。

cp /etc/kolla/globals.yml{,.bak}

cat >> /etc/kolla/globals.yml <<EOF

# Kolla options
kolla_base_distro: "centos"
kolla_install_type: "source"
openstack_release: "train"
kolla_internal_vip_address: "172.16.10.107" #漂移ip通过本IP访问dashboard此ip为网段中任意一可用IP(不能与服务器ip重复)

# Docker options
docker_registry: "172.16.10.104:82" #harborr仓库地址
docker_namespace: "openstack-train" #harbor项目地址

# Neutron - Networking Options
network_interface: "enp8s0" 
neutron_external_interface: "enp9s0" #无ip的网卡用于绑定内部网络
neutron_plugin_agent: "openvswitch"
enable_neutron_provider_networks: "yes"

# OpenStack services
enable_cinder: "yes"
enable_heat: "yes"
enable_ceph: “no”
nova_backend_ceph: "yes"
glance_backend_ceph: "yes"
cinder_backend_ceph: "yes"
EOF

ceph为对接openstack做准备

修改ceph配置文件

osd_journal_size = 10000
osd_pool_default_size = 2
osd_pool_default_pg_num = 512
osd_pool_default_pgp_num = 512
rbd_default_features = 3
mon_max_pg_per_osd =2000
mon_allow_pool_delete=true

在这里插入图片描述
实验环境使用二副本存储(性能考虑),实际生产环境建议三副本数环境资源不足建议单副本

osd_pool_default_size = 3

推送配置

ceph-deploy --overwrite-conf config push controller compute01 compute02

重启所有节点

systemctl restart ceph-mon@controller && systemctl restart ceph-mon@compute01 && systemctl restart ceph-mon@compute02

创建对应存储池并初始化

ceph osd pool create glance-images 128
ceph osd pool create cinder-bakcups 128
ceph osd pool create cinder-volumes 128
ceph osd pool create nova-vms 128
rbd pool init glance-images
rbd pool init cinder-bakcups
rbd pool init cinder-volumes
rbd pool init nova-vms

在这里插入图片描述

ceph接入后端图解

在这里插入图片描述

Glance(写入配置文件和创建ceph用户)

1.创建目录

mkdir -p /etc/kolla/config/glance

2..为 glance-api.conf 配置RBD 后端
编辑 /etc/kolla/config/glance/glance-api.conf 加入如下配置:

[DEFAULT]
show_image_direct_url = True
[glance_store]
stores = rbd
default_store = rbd
rbd_store_pool = glance-images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf

3.拷贝ceph集群配置文件(/etc/ceph/ceph.conf)到 /etc/kolla/config/glance/ceph.conf
在这里插入图片描述
4.生成ceph.client.glance.keyring文件,并保存到 /etc/kolla/config/glance 目录
在controller节点执行命令:

ceph auth get-or-create client.glance mon 'allow rwx' osd 'allow class-read object_prefix rbd_children, allow rwx pool=glance-images' >  /etc/kolla/config/glance/ceph.client.glance.keyring

Cinder(写入配置文件和创建ceph用户)

1.创建目录

mkdir -p /etc/kolla/config/cinder
  1. 编辑 /etc/kolla/config/cinder/cinder-volume.conf,并配置如下内容:
[DEFAULT]
enabled_backends=rbd-1

[rbd-1]
rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=cinder
rbd_pool=cinder-volumes
volume_backend_name=rbd-1
volume_driver=cinder.volume.drivers.rbd.RBDDriver
rbd_secret_uuid = 46398d03-1670-4f1c-850b-ccf355490a32 #在kolla配置文件夹下password.yml里找到
  1. 编辑 /etc/kolla/config/cinder/cinder-backup.conf,并配置如下内容:
[DEFAULT]
backup_ceph_conf=/etc/ceph/ceph.conf
backup_ceph_user=cinder-backup
backup_ceph_chunk_size = 134217728
backup_ceph_pool=cinder-backups
backup_driver = cinder.backup.drivers.ceph
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true
  1. 拷贝ceph的配置文件(/etc/ceph/ceph.conf)到 /etc/kolla/config/cinder
  2. 生成 ceph.client.cinder.keyring 文件

在/etc/kolla/config/cinder/创建目录

mkdir cinder-backup
mkdir cinder-volume

在 controller 节点运行:

ceph auth get-or-create client.cinder mon 'allow rwx' osd 'allow class-read object_prefix rbd_children, allow rwx pool=cinder-volumes, allow rwx pool=nova-vms ,allow rwx pool=glance-images' > /etc/kolla/config/cinder/cinder-volume/ceph.client.cinder.keyring
cp /etc/kolla/config/cinder/cinder-volume/ceph.client.cinder.keyring  /etc/kolla/config/cinder/cinder-backup 

在controller继续运行

ceph auth get-or-create client.cinder-backup mon 'allow rwx' osd 'allow class-read object_prefix rbd_children, allow rwx pool=cinder-bakcups'  > /etc/kolla/config/cinder/cinder-backup/ceph.client.cinder-backup.keyring

Nova (写入配置文件和创建ceph用户)

1.创建目录

mkdir -p /etc/kolla/config/nova
  1. 编辑 /etc/kolla/config/nova/nova-compute.conf ,配置如下内容:
[libvirt]
images_rbd_pool=nova-vms
images_type=rbd
images_rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=nova
  1. 生成 ceph.client.nova.keyring 文件

Controller节点执行

ceph auth get-or-create client.nova mon 'allow rwx' osd 'allow class-read object_prefix rbd_children, allow rwx pool=nova-vms'  > /etc/kolla/config/nova/ceph.client.nova.keyring

拷贝ceph.conf, 和cinder client keyring 到 /etc/kolla/config/nova

平台部署与环境初始化

预配置,安装docker、docker sdk、关闭防火墙、配置时间同步等

为各节点配置基础环境且会下载大量rpm包请务必保证节点网络的正常

kolla-ansible -i ./multinode bootstrap-servers

执行实际部署,拉取镜像,运行对应组件容器‘

kolla-ansible -i ./multinode deploy

安装完成后通过vip访问web界面此处为172.16.10.150为负载均衡ip入口

在这里插入图片描述

Grafana+prometheus

Grafana(监控界面提供)

查找镜像

docker search grafana/grafana

拉取容器镜像

docker pull grafana/grafana

查看容器

docker images

启动容器

docker run -d --name grafana -p 3000:3000 grafana/grafana:master

Grafana的配置文件为:(/etc/grafana/grafana.ini),进入容器:docker exec -it grafana bash
http://ip:3000
注意:默认用户和密码:admin:admin
访问:

在这里插入图片描述

Prometheus(监控信息提供)

快速开始
拉取容器镜像

docker pull prom/node-exporter
docker pull prom/prometheus

启动node-exporter:这个exporter是采集主机信息的

docker run -d -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  --net="host" \
  prom/node-exporter

访问url

http://ip:9100/metrics

新建目录prometheus,编辑配置文件prometheus.yml

mkdir /home/prometheus
cd /home/prometheus
vim prometheus.yml
global:
  scrape_interval:     60s
  evaluation_interval: 60s
 
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus
 
  - job_name: linux
    static_configs:
      - targets: ['172.16.10.104:9100']
        labels:
          instance: localhost

启动prometheus

docker run  -d \
  -p 9090:9090 \
  -v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
  prom/prometheus

访问url

http://ip:9090/graph

访问targets

http://ip:9090/targets

快速使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Name名字写Prometheus
如果有type 的话选择Prometheus,因为数据都从它那里获取
URL输入Prometheus的ip+端口
点击下面的Save & Test,如果出现绿色的,说明ok了
2.节点扩展
在其他节点执行

docker pull prom/node-exporter

启动node-exporter

docker run -d -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  --net="host" \
  prom/node-exporter

创建节点配置文件nodes-linux.yaml

- targets:
  - 172.16.10.105:9100
  labels:
    app: node-exporter
job: node
- targets:
  - 172.16.10.105:9100
  labels:
    app: node-exporter
job: node

复制进入容器内(没有对应文件夹则进入容器创建)

docker cp nodes-linux.yaml 60e529177213:/etc/prometheus/targets/

重启容器

docker restart 60e529177213

查看节点信息

http:// ip:9090/targets

在这里插入图片描述
3、配置Grafana数据展示模板
http://ip:3000/
至此Prometheus和Grafana已经打通了,接下来需要添加个图形模板以便展示数据。
在这里插入图片描述
输入模板号
在这里插入图片描述
点击load
访问http://ip:3000/如下
在这里插入图片描述
在这里插入图片描述
下篇文章补充平台测试部分,并对文章格式进行调整
在这里插入图片描述

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
1月前
|
弹性计算 监控 负载均衡
|
6天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
22 3
实战~如何组织一个多容器项目docker-compose
|
1月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
615 11
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
22天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
54 7
|
26天前
|
缓存 安全 前端开发
构建高效后端服务:从理论到实战
在数字化浪潮的推动下,后端服务成为了支撑现代互联网应用的核心。本文旨在揭示如何打造一个既可靠又高效的后端系统,从基础架构设计、代码组织、性能优化到安全防护,全方位解析后端开发的艺术。通过实际代码示例和深入浅出的解释,引导读者理解并掌握后端开发的关键技术点。
|
27天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
56 5
|
26天前
|
弹性计算 运维 开发者
后端架构优化:微服务与容器化的协同进化
在现代软件开发中,后端架构的优化是提高系统性能和可维护性的关键。本文探讨了微服务架构与容器化技术如何相辅相成,共同推动后端系统的高效运行。通过分析两者的优势和挑战,我们提出了一系列最佳实践策略,旨在帮助开发者构建更加灵活、可扩展的后端服务。
|
1月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
1月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用

相关产品

  • 容器服务Kubernetes版