kolla ansible 部署 openstack 主控虚拟机高可用集群(masakari)

1.整体规划

host
service
remark
ha01-03 1.haproxy
2.keepalived
1.高可用 vip:10.167.21.96
controller01-03 1. keystone
2. glance-api , glance-registry
3. nova-api, nova-conductor, nova-consoleauth, nova-scheduler, nova-novncproxy
4. neutron-api, neutron-openvswitch-agent, neutron-dhcp-agent, neutron-metadata-agent, neutron-l3-agent
5. cinder-api, cinder-schedulera
6. dashboard
7. mariadb, rabbitmq, memcached等
1.控制节点: keystone, glance, horizon, nova&neutron管理组件;
2.网络节点:虚机网络,L2(虚拟交换机)/L3(虚拟路由器),dhcp,route,nat等;
3.openstack基础服务
compute01-03 1. nova-compute
2. neutron-openvswitch-agent, neutron-metadata-agent, neutron-l3-agent
3. cinder-volume(如果后端使用共享存储,建议部署在controller节点)
1.计算节点:hypervisor(kvm);
2.网络节点:虚机网络 L2(虚拟交换机)/L3(虚拟路由器)等;
ceph01-03 1. ceph-mon, ceph-mgr
2. ceph-osd
1.存储节点:调度,监控(ceph)等组件;
2.存储节点:卷服务等组件

配置网卡

控制节点

找到一块没有绑定内网ip的网卡

cat /etc/sysconfig/network-scripts/ifcfg-enp4s0 <<EOF
NAME=enp4s0
DEVICE=enp4s0
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"
EOF
 
#重新加载enp4s0网卡设备
nmcli con reload && nmcli con up enp4s0

 

 操作系统:欧拉22.03

2.环境准备

1.host文件配置

所有机器执行相关host配置

echo "
# controller-node
10.167.21.91 node01
10.167.21.93 node02
10.167.21.97 node03
" >> /etc/hosts
#分边每台机器设置主机名
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03

2.配置集群ssh信任关系

ssh-keygen
ssh-copy-id 10.167.21.91
ssh-copy-id 10.167.21.93
ssh-copy-id 10.167.21.97

3.优化ssh登录速度,

所有节点

sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
systemctl restart sshd

4.内核参数优化

所有节点


echo 'modprobe br_netfilter' >> /etc/rc.d/rc.local
chmod 755 /etc/rc.d/rc.local
modprobe br_netfilter
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1'  >>/etc/sysctl.conf
sysctl -p

5.在控制节点添加,允许本地不存在 IP 绑定监听端口,允许运行中的 HAProxy 实例绑定端口到VIP

echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
sysctl -p

6.安装基础软件包

所有节点

1.环境准备

dnf install git python3-devel libffi-devel gcc openssl-devel python3-libselinux ansible net-tools.x86_64 -y

安装虚拟环境依赖项

  • 创建一个虚拟环境并将其激活: 使用虚拟环境是为了避免安装依赖项时和系统包出现冲突时候引发不必要的麻烦。

python3 -m venv /path/to/venv
source /path/to/venv/bin/activate

在运行任何依赖于安装在其中的包的命令之前,应该激活虚拟环境。

  • 确保pip为最新版

pip install -U pip
配置pip源
mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF

安装Ansible。Kolla Ansible需要最低版本为4,最高版本为5。

pip install 'ansible>=4,<6'

2.安装kolla-ansible

选取一台机器执行

1.使用pip安装kolla ansible及其依赖项。

pip install git+https://opendev.org/openstack/kolla-ansible@stable/zed

这一步可能会出现报错,是由于服务器ssl证书没有第三方认证,可以通过此配置解决:

git config --global http.sslVerify "false"

2.创建/etc/kolla目录。

mkdir -p /etc/kolla
chown $USER:$USER /etc/kolla

3.将globals.yml和passwords.yml复制到/etc/kolla目录。

cp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla//etc/kolla

4.将一体化和多节点清单文件复制到当前目录(建议是/etc/kolla目录)。

cp /path/to/venv/share/kolla-ansible/ansible/inventory//etc/kolla

5.对于虚拟环境中的all-in-one场景,将以下内容添加到all-in-one文件的最开始:

localhost ansible_python_interpreter=python

修改ansible配置文件

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

修改multinode inventory文件,其他默认即可

[control]
# These hostname must be resolvable from your deployment host
node01
node02
node03
 
[network]
node01
node02
node03
 
[compute]
node01
node02
node03
 
[monitoring]
node01
 
[storage]
node01
node02
node03

检查inventory配置是否正确,执行:

ansible -i multinode all -m ping

6.安装Ansible Galaxy依赖项(Yoga版本以后):

kolla-ansible install-deps

7.生成密码

kolla-genpwd

修改keystone_admin_password可以修改为自定义,在登录dashboard会用到

sed -i 's#keystone_admin_password:.*#keystone_admin_password: Bjcj@123#g' /etc/kolla/passwords.yml
 
cat /etc/kolla/passwords.yml | grep keystone_admin_password
keystone_admin_password: Bjcj@123

8.配置globals.yml

  • 镜像选项 Kolla可以选择多种镜像版本:

    • CentOS Stream (centos)

    • Debian (debian)

    • Rocky (rocky)

    • Ubuntu (ubuntu)

本次部署的主机操作系统为CentOS Stream 9.按理说应该选择centos镜像。但是上面提到不会发布基于CentOS Stream 9的镜像。因此这里推荐选择rocky。(我试过centos,确实不行)

cp /etc/kolla/globals.yml{,.bak}
cat >> /etc/kolla/globals.yml <<EOF
#version 暂时使用rocky适配后改为欧拉
kolla_base_distro: "rocky"
kolla_install_type: "binary"
 
#vip
kolla_internal_vip_address: "10.167.21.96"
 
#docker registry
docker_registry: "quay.nju.edu.cn"
#docker_namespace: "kollaimage"
 
#network
network_interface: "enp1s0"
neutron_external_interface: "enp4s0"
neutron_plugin_agent: "openvswitch"
enable_neutron_provider_networks: "yes"
 
#storage
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
 
#masakari 高可用开启配置
enable_hacluster: "no"
enable_masakari: "yes"
EOF

pacemaker-remote安装在计算节点,不能同时安装pacemaker与pacemaker-remote 会造成一个起不起来,本质是一样的,remote没有投票权,主控安装pacemaker,后面kolla-ansible里面要做适配是主控跟计算同时存在只装pacemaker

所有hostmonitor建议采用consul去控制不使用pacemaker

参数说明:

kolla_base_distro: kolla镜像基于不同linux发型版构建,主机使用centos这里对应使用centos类型的docker镜像即可。
kolla_install_type: kolla镜像基于binary二进制和source源码两种类型构建,实际部署使用binary即可。
openstack_release: openstack版本可自定义,会从dockerhub拉取对应版本的镜像
kolla_internal_vip_address: 单节点部署kolla也会启用haproxy和keepalived,方便后续扩容为高可用集群,该地址是ens33网卡网络中的一个可用IP。
docker_registry: 默认从dockerhub拉取镜像,这里使用阿里云镜像仓库,也可以本地搭建仓库,提前推送镜像上去。但该仓库目前只有train和ussuri版本的镜像,如何自己推送镜像参考该博客的其他文章。
docker_namespace: 阿里云kolla镜像仓库所在的命名空间,dockerhub官网默认是kolla。
network_interface: 管理网络的网卡
neutron_external_interface: 外部网络的网卡
neutron_plugin_agent: 默认启用openvswitch
enable_neutron_provider_networks: 启用外部网络
enable_cinder: 启用cinder
enable_cinder_backend_lvm: 指定cinder后端存储为lvm

enable_masakari:  开启masakari服务

修改docker官方yum源为阿里云yum源,另外配置docker镜像加速,指定使用阿里云镜像加速

mkdir -p /data/docker/data-root #所有节点执行
sed -i 's/^docker_yum_url/#&/' /path/to/venv/share/kolla-ansible/ansible/roles/barbican/defaults/main.yml
sed -i 's/^docker_custom_config/#&/' /path/to/venv/share/kolla-ansible/ansible/roles/barbican/defaults/main.yml
 
cat >> /path/to/venv/share/kolla-ansible/ansible/roles/barbican/defaults/main.yml <<EOF
docker_yum_url: "https://mirrors.aliyun.com/docker-ce/linux/{{ ansible_distribution | lower }}"
docker_custom_config: {"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"],"data-root""/data/docker/data-root","log-opts": {"max-size""10m","max-file""3"}}
EOF

 

9.部署
#引导服务器 all-in-one 单节点模式
 
kolla-ansible -i ./all-in-one bootstrap-servers
#拉取镜像
 
kolla-ansible -i all-in-one pull
#部署前检查
 
#kolla-ansible -i ./all-in-one prechecks
开始部署
 
kolla-ansible -i ./all-in-one deploy
 
#multinode 多节点模式
kolla-ansible -i ./multinode bootstrap-servers
 
#部署检查
kolla-ansible -i ./multinode prechecks
 
#拉取镜像
kolla-ansible -i ./multinode pull
 
#执行部署
kolla-ansible -i ./multinode deploy
 
#生成认证文件
kolla-ansible post-deploy
cat /etc/kolla/admin-openrc.sh

如果precheck时发生了报错: “msg”: “Hostname has to resolve uniquely to the IP address of api_interface” ,将‘127.0.0.1 localhost’注释掉即可

报错信息:

TASK [cinder : Checking LVM volume group exists for Cinder] *************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "cmd": ["vgs", "cinder-volumes"], "delta": "0:00:00.045743", "end": "2020-12-07 02:27:49.501416", "failed_when_result": true, "msg": "non-zero return code", "rc": 5, "start": "2020-12-07 02:27:49.455673", "stderr": " Volume group \"cinder-volumes\" not found.\n Cannot process volume group cinder-volumes", "stderr_lines": [" Volume group \"cinder-volumes\" not found.", " Cannot process volume group cinder-volumes"], "stdout": "", "stdout_lines": []}
原因和解决方法:

未创建cinder-volumes的vg信息

如果启用cinder还需要在storage01节点额外添加一块磁盘,这里以/dev/sdc为例,在storage01节点执行 如果存在多个大盘一起创建

pvcreate /dev/sdc
pvcreate /dev/sdd
 
vgcreate cinder-volumes /dev/sdc /dev/sdd


注意卷组名称为cinder-volumes,默认与globals.yml一致。

[root@kolla ~]# cat /etc/kolla/globals.yml | grep cinder_volume_group
#cinder_volume_group: "cinder-volumes"

 

11.使用OpenStack
#命令行
 
#安装CLI客户端
 
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/zed
#生成openrc文件
 
kolla-ansible post-deploy
#使用openrc文件
 
/etc/kolla/admin-openrc.sh
#接下来就可以使用OpenStack CLI了

网页 浏览器中访问kolla_internal_vip_address,输入账号密码即可,账号密码可在openrc文件中查看

3.部署skyline

主控节点都需要安装

1.创建数据库

MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS skyline DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON skyline.* TO 'skyline'@'localhost' IDENTIFIED BY 'skyline';
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON skyline.* TO 'skyline'@'%'  IDENTIFIED BY 'skyline';
# 然后创建服务凭证
source  /etc/kolla/admin-openrc.sh
openstack user create --domain default --password Bjcj@123 skyline
openstack role add --project service --user skyline admin

2.配置文件

mkdir /etc/skyline
vi /etc/skyline/skyline.yaml
default:
  access_token_expire: 3600
  access_token_renew: 1800
  cafile: ''
  cors_allow_origins: []
  database_url: 'mysql://root:6LmDqfev0nU6ftvVIDWcuCd4ZDP692WPJlhGucsz@10.167.21.96:3306/skyline'
  debug: false
  log_dir: ./log
  log_file: skyline.log
  policy_file_path: /etc/skyline/policy
  policy_file_suffix: policy.yaml
  prometheus_basic_auth_password: ''
  prometheus_basic_auth_user: ''
  prometheus_enable_basic_auth: false
  prometheus_endpoint: http://10.167.21.96:9091
  secret_key: aCtmgbcUqYUy_HNVg5BDXCaeJgJQzHJXwqbXr0Nmb2o
  session_name: session
  ssl_enabled: true
openstack:
  base_domains:
  - heat_user_domain
  default_region: RegionOne
  enforce_new_defaults: true
  extension_mapping:
    floating-ip-port-forwarding: neutron_port_forwarding
    fwaas_v2: neutron_firewall
    qos: neutron_qos
    vpnaas: neutron_vpn
  interface_type: public
  keystone_url: http://10.167.21.96:5000/v3/
  nginx_prefix: /api/openstack
  reclaim_instance_interval: 604800
  service_mapping:
    baremetal: ironic
    compute: nova
    container: zun
    container-infra: magnum
    database: trove
    dns: designate
    identity: keystone
    image: glance
    instance-ha: masakari
    key-manager: barbican
    load-balancer: octavia
    network: neutron
    object-store: swift
    orchestration: heat
    placement: placement
    sharev2: manilav2
    volumev3: cinder
  sso_enabled: false
  sso_protocols:
  - openid
  sso_region: RegionOne
  system_admin_roles:
  - admin
  - system_admin
  system_project: service
  system_project_domain: Default
  system_reader_roles:
  - system_reader
  system_user_domain: Default
  system_user_name: skyline
  system_user_password: 'Bjcj@123'
setting:
  base_settings:
  - flavor_families
  - gpu_models
  - usb_models
  flavor_families:
  - architecture: x86_architecture
    categories:
    - name: general_purpose
      properties: []
    - name: compute_optimized
      properties: []
    - name: memory_optimized
      properties: []
    - name: high_clock_speed
      properties: []
  - architecture: heterogeneous_computing
    categories:
    - name: compute_optimized_type_with_gpu
      properties: []
    - name: visualization_compute_optimized_type_with_gpu
      properties: []
  gpu_models:
  - nvidia_t4
  usb_models:
  - usb_cgg

根据实际的环境修改以下参数

database_url
修改为如下,注意:ip是浮动IP,SKYLINE_DBPASS这个是数据库用户密码 可以自定义

database_url: mysql://skyline:SKYLINE_DBPASS@10.167.21.96:3306/skyline
keystone_url
将 127.0.0.1 修改为浮动IP

keystone_url: http://10.167.21.96:5000/v3/
prometheus_endpoint: http://10.167.21.96:9091
system_user_password
设置你的skyline密码

system_user_password: 'Bjcj@123'

3.初始化

docker run -d --name skyline_bootstrap -e KOLLA_BOOTSTRAP="" -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml --net=host 99cloud/skyline:latest
 
# 检查日志输出结尾是否是"exit 0"
docker logs skyline_bootstrap
#初始化引导完成后运行 skyline 服务
docker rm -f skyline_bootstrap
 
docker run -d --name skyline --restart=always -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml --net=host 99cloud/skyline:latest
 
 
#查看服务
root@controller:/etc/skyline# netstat -tnlp |grep 9999
tcp        0      0 0.0.0.0:9999            0.0.0.0:*               LISTEN      453702/nginx: maste

4.ceph 安装

1.集群规划

主机
角色
IP
node-01 mon,mgr,work,cephadm 10.167.21.91
node-02 mon,mgr,work 10.167.21.93
node-03 mon,mgr,work 10.167.21.97

1.下载安装ceph

dnf -y install cephadm
cephadm add-repo --release octopus
./cephadm install
cephadm bootstrap --mon-ip 10.167.21.91
#使用docker安装可以用--docker
mkdir -p /etc/ceph
## 将 cephadm 文件拷贝到其他节点上 
for i in {2..3};do scp -rp /usr/sbin/cephadm node0$i:/usr/sbin/;done

如果出现错误:ERROR: Distro openeuler version 22.03 not supported

## DISTRO_NAMES 这个字典中增加 openeuler 主要欧拉是在yumdnf这个类里面
  7654     DISTRO_NAMES = {
  7655         'centos': ('centos''el'),
  7656         'rhel': ('centos''el'),
  7657         'scientific': ('centos''el'),
  7658         'rocky': ('centos''el'),
  7659         'openeuler': ('openeuler''el'),   ## 增加openeuler 系统的支持
  7660         'almalinux': ('centos''el'),
  7661         'ol': ('centos''el'),
  7662         'fedora': ('fedora''fc'),
  7663         'mariner': ('mariner''cm'),
  7664     }
##  同时修改self.major =8 否则是22找不到包
  7665  self.major = 8
#同时修改添加,'--skip-broken' 否则欧拉最新包不支持epel
 call_throws(self.ctx, [self.tool, 'install''-y''epel-release','--skip-broken'])

附录:cephadm 不使用默认安装promethes,node_exporter方法

使用自定义镜像

可以基于其他镜像安装或升级监控组件。为此,需要首先将要使用的镜像的名称存储在配置中。以下配置选项可用。

  • container_image_prometheus
  • container_image_grafana
  • container_image_alertmanager
  • container_image_node_exporter

可以使用命令ceph config设置自定义镜像:

ceph config set mgr mgr/cephadm/<option_name> <value>

例如:

ceph config set mgr mgr/cephadm/container_image_prometheus prom/prometheus:v1.4.1

如果已经有正在运行的监视堆栈守护程序的类型与您已更改其镜像的类型相同,则必须重新部署守护程序才能让它们实际使用新镜像。

例如,如果您更改了 prometheus 镜像

ceph orch redeploy prometheus
笔记: 通过设置自定义镜像,默认值将被覆盖(但不会被覆盖)。当更新可用时,默认值会更改。通过设置自定义镜像,您将无法自动更新已设置自定义镜像的组件。您将需要手动更新配置(镜像名称和标签)才能安装更新。

如果您选择使用建议,则可以重置之前设置的自定义镜像。之后,将再次使用默认值。ceph config rm用于重置配置选项:

ceph config rm mgr mgr/cephadm/<option_name>

例如:

ceph config rm mgr mgr/cephadm/container_image_prometheus

使用自定义配置文件

通过覆盖 cephadm 模板,可以完全自定义监控服务的配置文件。

在内部,cephadm 已经使用Jinja2模板为所有监控组件生成配置文件。为了能够自定义 Prometheus、Grafana 或 Alertmanager 的配置,可以为每个将用于配置生成的服务存储一个 Jinja2 模板。每次部署或重新配置此类服务时,都会评估此模板。这样,自定义配置将被保留并自动应用于这些服务的未来部署。

笔记: 当 cephadm 的默认配置更改时,自定义模板的配置也会保留。如果要使用更新后的配置,则需要在每次升级 Ceph 后手动迁移自定义模板。

选项名称

可以覆盖将由 cephadm 生成的文件的以下模板。这些是与 ceph config-key set 一起存储时要使用的名称:

  • services/alertmanager/alertmanager.yml
  • services/grafana/ceph-dashboard.yml
  • services/grafana/grafana.ini
  • services/prometheus/prometheus.yml

您可以在以下位置src/pybind/mgr/cephadm/templates查找 cephadm 当前使用的文件模板:

  • services/alertmanager/alertmanager.yml.j2
  • services/grafana/ceph-dashboard.yml.j2
  • services/grafana/grafana.ini.j2
  • services/prometheus/prometheus.yml.j2

用法

以下命令应用单行值:

ceph config-key set mgr/cephadm/<option_name> <value>

要将文件的内容设置为模板,请使用以下-i参数:

ceph config-key set mgr/cephadm/<option_name> -i $PWD/<filename>

笔记: 当使用文件作为输入时,config-key必须使用文件的绝对路径。

然后需要重新创建服务的配置文件。这是使用reconfig完成的。有关更多详细信息,请参见以下示例。

示例

# set the contents of ./prometheus.yml.j2 as template
ceph config-key set mgr/cephadm/services/prometheus/prometheus.yml \
  -i $PWD/prometheus.yml.j2

# reconfig the prometheus service
ceph orch reconfig prometheus

禁用监控

要禁用监控并删除支持它的软件,请运行以下命令:

$ ceph orch rm grafana
$ ceph orch rm prometheus --force   # this will delete metrics data collected so far
$ ceph orch rm node-exporter
$ ceph orch rm alertmanager
$ ceph mgr module disable prometheus
#查看服务
 ceph mgr services 
#修改prometheus dashboard接口地址
ceph dashboard set-prometheus-api-host 'http://node01:9091'
ceph dashboard set-alertmanager-api-host 'http://node01:9093'
 

2.生成配置文件

部署完成后的提示信息中获取dashboard的账户以及密码,登陆dashboard

注意这里使用https协议https://node01:8443/

使用初始化的账号密码并且修改密码

3.配置集群

将集群的SSH公钥安装到新加主机的root用户authorized_keys文件中

ssh-copy-id -f -i /etc/ceph/ceph.pub root@node02
ssh-copy-id -f -i /etc/ceph/ceph.pub root@node03
#告诉 Ceph 集群有新节点加入
cephadm shell
ceph orch host add node02
ceph orch host add node03

3台都加入集群后,会发现mon节点自动扩展为5节点,mgr节点扩展为2节点

4.配置osd

 

 

 

 

 

 

5.创建存储池

在dashboard添加存储池,并将存储池的application修改为rbd

 

常用命令

ceph orch ls    #列出集群内运行的组件
ceph orch host ls    #列出集群内的主机
ceph orch ps     #列出集群内容器的详细信息
ceph orch apply mon --placement="3 node1 node2 node3"    #调整组件的数量
ceph orch ps --daemon-type rgw    #--daemon-type:指定查看的组件
ceph orch host label add node1 mon    #给某个主机指定标签
ceph orch apply mon label:mon    #告诉cephadm根据标签部署mon,修改后只有包含mon的主机才会成为mon,不过原来启动的mon现在暂时不会关闭
ceph orch device ls    #列出集群内的存储设备
例如,要在newhost1IP地址10.1.2.123上部署第二台监视器,并newhost2在网络10.1.2.0/24中部署第三台monitor
ceph orch apply mon --unmanaged    #禁用mon自动部署
ceph orch daemon add mon newhost1:10.1.2.123
ceph orch daemon add mon newhost2:10.1.2.0/24

修改grafana账号密码:

vi grafana.yaml
cat grafana.yaml
service_type: grafana
spec:
  initial_admin_password: password12345678
 
ceph orch  apply -i grafana.yaml
ceph orch redeploy grafana

6.创建ceph文件系统和对象网关

创建mds

 

 

# 创建mds
 
#首先创建cephfs,不指定pg的话,默认自动调整
ceph osd pool create cephfs_data
ceph osd pool create cephfs_metadata
ceph fs new cephfs cephfs_metadata cephfs_data
 
#开启mds组件,cephfs:文件系统名称;–placement:指定集群内需要几个mds,后面跟主机名
ceph orch apply mds cephfs --placement="3 node01 node02 node03"
 
#查看各节点是否已启动mds容器;还可以使用ceph orch ps 查看某一节点运行的容器
ceph orch ps --daemon-type mds

 

 

创建rgw

#首先创建一个领域
radosgw-admin realm create --rgw-realm=myorg --default

#创建区域组
radosgw-admin zonegroup create --rgw-zonegroup=default --master --default

#创建区域
radosgw-admin zone create --rgw-zonegroup=default --rgw-zone=uci-cd-1 --master --default

#为特定领域和区域部署radosgw守护程序,要更改端口,否则端口会被haproxy占用后不能启动 ceph orch apply rgw myorg uci-cd-1 --placement="3 node01 node02 node03" --port=81

#验证各节点是否启动rgw容器
ceph orch ps --daemon-type rgw
#在ceph节点里面创建用户,这个用户会生成两个key
radosgw-admin user create --uid=user01 --display-name=user01 --system
####查看 用户信息
radosgw-admin user info --uid=1
#将两个key保存到单独一个文件中,以便下一步使用
$ echo D3HTA2TRXBBE514USEQT > access_key
$ echo AZxoYU6u3DkLUw9OMnRewfx73DxhjpDICwSjEIwH > secret_key

#最后,向仪表板提供凭据:
ceph dashboard set-rgw-api-access-key -i access_key
ceph dashboard set-rgw-api-secret-key -i secret_key

7.openstack 集成ceph

修改kolla-ansible配置 vi /etc/kolla/global.yml 增加

cinder_backend_ceph: "yes"
glance_backend_ceph: "yes"
nova_backend_ceph: "yes"
 
ceph_cinder_keyring: "ceph.client.admin.keyring"
ceph_cinder_user: "admin"
ceph_cinder_pool_name: "Pool0"
ceph_cinder_backup_keyring: "ceph.client.admin.keyring"
ceph_cinder_backup_user: "admin"
ceph_cinder_backup_pool_name: "Pool0"
ceph_nova_keyring: "ceph.client.admin.keyring"
ceph_nova_user: "admin"
ceph_nova_pool_name: "Pool0"
ceph_glance_keyring: "ceph.client.admin.keyring"
ceph_glance_user: "admin"
ceph_glance_pool_name: "Pool0"
 
#文件系统
enable_manila: "yes"
enable_manila_backend_cephfs_native: "yes"
ceph_manila_keyring: "ceph.client.admin.keyring"
ceph_manila_user: "admin"
 
#负载均衡
enable_octavia: "yes"
 
#开启计量
enable_ceilometer: "yes"
enable_ceilometer_ipmi: "yes"
enable_trove: "yes"
 
enable_gnocchi: "yes"
enable_gnocchi_statsd: "yes"
gnocchi_backend_storage: "ceph"
ceph_gnocchi_keyring: "ceph.client.admin.keyring"
ceph_gnocchi_user: "admin"
ceph_gnocchi_pool_name: "gnocchi"
 

#开启对象存储
enable_ceph_rgw: "yes"
ceph_rgw_hosts:
- host: vip
ip: 10.167.21.96
port: 81
enable_swift : "yes"
enable_swift_s3api: "yes"

#开启证书管理
enable_barbican: "yes"

#开启vpnaas
enable_neutron_vpnaas: "yes"

#开启容器管理
enable_magnum: "yes"

#开启dns服务
enable_designate: "yes"

2 将/etc/kolla/config中将ceph相关配置文件移入或修改如下

a.cinder设置

 

[DEFAULT]
enabled_backends=rbd-1
[rbd-1]
rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=admin
backend_host=rbd:volumes
rbd_pool=Pool0
volume_backend_name=rbd-1
volume_driver=cinder.volume.drivers.rbd.RBDDriver
rbd_secret_uuid ={{ cinder_rbd_secret_uuid }}

b.glance设置

mkdir -p /etc/kolla/config/glance/
cd /etc/kolla/config/glance/
vi glance-api.conf
cp /etc/ceph//etc/kolla/config/glance/
[glance_store]
stores = rbd
default_store = rbd
rbd_store_pool = Pool0
rbd_store_user = admin
rbd_store_ceph_conf = /etc/ceph/ceph.conf

同样拷贝ceph配置到glance里面

c.cinder_backup设置

mkdir -p /etc/kolla/config/cinder/cinder-backup
cp /etc/ceph/ceph.client.admin.keyring /etc/kolla/config/cinder/cinder-backup/
cp /etc/ceph/ceph.client.admin.keyring /etc/kolla/config/cinder/cinder-backup/ceph.client.cinder-backup.keyring
vi /etc/kolla/config/cinder/cinder-backup.conf
[DEFAULT]
backup_ceph_conf=/etc/ceph/ceph.conf
backup_ceph_user=admin
backup_ceph_chunk_size = 134217728
backup_ceph_pool=Pool0
backup_driver = cinder.backup.drivers.ceph.CephBackupDriver
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

d.nova配置

mkdir -p /etc/kolla/config/nova
vi /etc/kolla/config/nova/nova-compute.conf
cp /etc/ceph/* /etc/kolla/config/nova/
[libvirt]
images_rbd_pool=Pool0
images_type=rbd
images_rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=admin

e.manila配置

mkdir -p /etc/kolla/config/manila
cp /etc/ceph//etc/kolla/config/manila/
pip install python-manilaclient
manila list

f.Octavia 

source /path/to/venv/bin/activate
kolla-ansible octavia-certificates
git clone https://opendev.org/openstack/octavia -b stable/zed
pip install diskimage-builder
#进入下载的源码地方
cd octavia/diskimage-create
export DIB_REPOLOCATION_amphora_agent=https://jihulab.com/james-curtis/octavia.git
export DIB_REPOLOCATION_octavia_lib=https://jihulab.com/james-curtis/octavia-lib.git
export DIB_DISTRIBUTION_MIRROR=http://mirrors.ustc.edu.cn/ubuntu
export DIB_REPOLOCATION_upper_constraints=https://jihulab.com/james-curtis/requirements/-/raw/stable/yoga/upper-constraints.txt
export DIB_PYPI_MIRROR_URL=https://pypi.tuna.tsinghua.edu.cn/simple
export DIB_NO_PYPI_PIP=1
./diskimage-create.sh
#如果遇到pip包冲突问题这个之后需要手动编辑 upper-constraints.txt
#先把文件下载过来
#然后编辑 upper-constraints.txt
#注释冲突的软件包
# oslo.cache===2.10.1
# octavia-lib===2.5.0
#修改环境变量
#export DIB_REPOLOCATION_upper_constraints=file:///tmp/upper-constraints.txt
#完成后执行,注意切换python虚拟环境
kolla-ansible post-deploy
#激活octavia授权
/etc/kolla/octavia-openrc.sh
#在 Glance 中注册镜像
openstack image create amphora-x64-haproxy.qcow2 --container-format bare --disk-format qcow2 --private --tag amphora --file /root/octavia/diskimage-create/amphora-x64-haproxy.qcow2 --property hw_architecture='x86_64' --property hw_rng_model=virtio
#列出所有负载均衡器
openstack loadbalancer list
#如果出现
#openstack: 'loadbalancer' is not an openstack command. See 'openstack --help'.
#安装python-octaviaclient
pip install python-octaviaclient
#注意octavia-worker里面的amp_image_owner_id 需要跟数据库保持一致否则找不到镜像

下面是需要设置的部分环境变量

DIB_REPOLOCATION_amphora_agent(将安装在映像中的 amphora-agent 代码的位置)
默认值:https ://opendev.org/openstack/octavia

DIB_REPOLOCATION_octavia_lib(将安装在映像中的 octavia-lib 代码的位置)
默认值:https ://opendev.org/openstack/octavia-lib

DIB_PYPI_MIRROR_URL
DIB_REPOLOCATION_upper_constraints(upper-constraints.txt依赖包)
默认值:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt

DIB_DISTRIBUTION_MIRROR(所选基本操作系统的镜像 URL)
注意,这个镜像url是给Ubuntu用的,必须是http。推荐使用中国科学技术大学镜像(http)

g.ceilometer

 
mkdir -p /etc/kolla/config/gnocchi
cp /etc/ceph//etc/kolla/config/gnocchi

h.swift

部署swift前需要生成相关rings,这里在kolla-ansible部署节点进行操作。

为准备Swift Rings生成,请运行以下命令以初始化环境变量并创建/etc/kolla/config/swift目录

STORAGE_NODES=(10.167.21.91 10.167.21.93 10.167.21.97)
KOLLA_SWIFT_BASE_IMAGE="kolla/centos-source-swift-base:4.0.0"
mkdir -p /etc/kolla/config/swift
 
#生成Object Ring
docker run \
  --rm \
  -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
  swift-ring-builder \
    /etc/kolla/config/swift/object.builder create 10 3 1
 
for node in ${STORAGE_NODES[@]}; do
    for in {0..2}; do
      docker run \
        --rm \
        -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
        swift-ring-builder \
          /etc/kolla/config/swift/object.builder add r1z1-${node}:6000/d${i} 1;
    done
done
 
#生成Account Ring
docker run \
  --rm \
  -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
  $KOLLA_SWIFT_BASE_IMAGE \
  swift-ring-builder \
    /etc/kolla/config/swift/account.builder create 10 3 1
 
for node in ${STORAGE_NODES[@]}; do
    for in {0..2}; do
      docker run \
        --rm \
        -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
        $KOLLA_SWIFT_BASE_IMAGE \
        swift-ring-builder \
          /etc/kolla/config/swift/account.builder add r1z1-${node}:6001/d${i} 1;
    done
done
#生成Container Ring
docker run \
  --rm \
  -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
  swift-ring-builder \
    /etc/kolla/config/swift/container.builder create 10 3 1
 
for node in ${STORAGE_NODES[@]}; do
    for in {0..2}; do
      docker run \
        --rm \
        -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
        swift-ring-builder \
          /etc/kolla/config/swift/container.builder add r1z1-${node}:6002/d${i} 1;
    done
done
 
#再平衡
for ring in object account container; do
  docker run \
    --rm \
    -v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
    $KOLLA_SWIFT_BASE_IMAGE \
    swift-ring-builder \
      /etc/kolla/config/swift/${ring}.builder rebalance;
done
 
查看生成的文件
ls /etc/kolla/config/swift/

3.安装

注意:ceph.conf自带的配置项前面有空格,要删除空格才能正常部署

#multinode 多节点模式
kolla-ansible -i ./multinode bootstrap-servers
 
#部署检查
kolla-ansible -i ./multinode prechecks
 
 
#执行部署
kolla-ansible -i ./multinode deploy

 

5.安装consul支持虚拟机高可用 masakari 支持 consul 模式

1.docker 安装consul集群

#如果有hacluster容器删除默认的高可用
docker rm -f hacluster_pacemaker_remote
docker rm -f hacluster_pacemaker
docker rm -f hacluster_corosync 
vi /etc/docker/daemon.json
#添加仓库
vi /etc/sysctl.conf
#修改
net.ipv4.ip_forward=1
 
sysctl -p
systemctl restart docker
docker pull consul
mkdir -p /data/consul
#node01执行
docker run --net=host --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 --restart=always -v /data/consul:/consul/data consul agent -server -bootstrap-expect 2 -ui -node=node01 -bind=0.0.0.0 -client=0.0.0.0 -advertise=10.167.21.91
#node02执行
docker run --net=host --name consul2 -d -p 8500:8500 --restart=always consul agent -server -ui -node=node02 -bind=0.0.0.0 -client=0.0.0.0 -advertise=10.167.21.93 -join 10.167.21.91
#node03执行
docker run --net=host --name consul3 -d -p 8500:8500 --restart=always consul agent -server -ui -node=node03 -bind=0.0.0.0 -client=0.0.0.0 -advertise=10.167.21.97 -join 10.167.21.91

consul参数详解

  • –net=host docker参数, 使得docker容器越过了net namespace的隔离,免去手动指定端口映射的步骤
  • -server consul支持以server或client的模式运行, server是服务发现模块的核心, client主要用于转发请求
  • -advertise 通告地址用于更改我们通告给集群中其他节点的地址。默认情况下,-bind地址是通告的。
  • -retry-join 指定要加入的consul节点地址,失败后会重试, 可多次指定不同的地址
  • -client Consul将绑定客户端接口的地址,包括HTTP和DNS服务器。默认情况下,这是“127.0.0.1”,只允许回送连接。
  • -bind 内部集群通信绑定的地址。这是集群中所有其他节点都应该可以访问的IP地址。默认情况下,这是“0.0.0.0”,集群内的所有节点到地址必须是可达的
  • -bootstrap-expect 此标志提供数据中心中预期服务器的数量。不应该提供此值,或者该值必须与群集中的其他服务器一致。指定后,Consul将等待指定数量的服务器可用,然后启动群集。允许自动选举leader,但不能与传统-bootstrap标志一起使用, 需要在server模式下运行。
  • -data-dir 此标志为代理存储状态提供了一个数据目录。这对所有代理都是必需的。该目录在重新启动时应该是持久的。这对于在服务器模式下运行的代理尤其重要,因为它们必须能够保持群集状态。此外,该目录必须支持使用文件系统锁定,这意味着某些类型的已装入文件夹(例如VirtualBox共享文件夹)可能不合适
  • -node 群集中此节点的名称,这在群集中必须是唯一的,默认情况下是节点的主机名。这个必须保证跟高可用

     

    名称一致。
  • -config-dir 指定配置文件,当这个目录下有 .json 结尾的文件就会被加载
  • -enable-script-checks 检查服务是否处于活动状态,类似开启心跳
  • -datacenter 数据中心名称。如果未提供,则默认为“dc1”。Consul对多个数据中心拥有一流的支持,但它依赖于正确的配置。同一个数据中心内的节点应该位于单个局域网中。
  • -ui - 启用内置的Web UI服务器和所需的HTTP路由。这消除了将Consul Web UI文件与二进制文件分开维护的需要。
  • -join 指定ip, 加入到已有的集群中

端口详解

  • 8500 : http 端口,用于 http 接口和 web ui访问;
  • 8300 : server rpc 端口,同一数据中心 consul server 之间通过该端口通信
  • 8301 : serf lan 端口,同一数据中心 consul client 通过该端口通信; 用于处理当前datacenter中LAN的gossip通信
  • 8302 : serf wan 端口,不同数据中心 consul server 通过该端口通信; agent Server使用,处理与其他datacenter的gossip通信;
  • 8600 : dns 端口,用于已注册的服务发现;

2.修改masakari-hostmonitor.conf

vi /etc/kolla/masakari-hostmonitor/masakari-monitors.conf  修改

ip根据主机变动

[host]
monitoring_driver = consul
api_retry_max = 10
api_retry_interval = 30
[consul]
# Addr for local consul agent in management datacenter.
# The addr is make up of the agent's bind_addr and http port,
# such as '192.168.101.1:8500'.
agent_manage = 10.167.21.91:8500
# Addr for local consul agent in tenant datacenter.
agent_tenant = 10.167.21.91:8500
# Addr for local consul agent in storage datacenter.
agent_storage = 10.167.21.91:8500
# Config file for consul health action matrix.
#matrix_config_file = /etc/masakarimonitors/matrix.yaml
#重启masakari
docker restart masakari_hostmonitor

instancemonitor需要开启虚拟机恢复才能重新开启

vi /etc/kolla/masakari-engine/masakari.conf 

 

#添加
[instance_failure]
process_all_instances = true

#重启docker
docker restart masakari_engine

验证:

使用:virsh list  查看虚拟机

关闭虚拟机instance-0000005a对应的进程

kill -9 225967
再次查看虚拟机列表,发现被关闭进程对应的虚拟机状态已经不是active 了

查看日志/var/log/kolla/masakari_monitors/masakari-instancemonitor.log, 发现masakari-instancemonitor 服务已经侦测到虚拟机进程异常,发送rpc信息

后续需要集成到kolla ansible里面实现自动化部署

openstack默认端口

 

另外,还有一些与OpenStack组件相关的辅助服务使用的默认端口,如下表所示。

 

posted @ 2024-03-04 16:06  暗痛  阅读(2200)  评论(2编辑  收藏  举报