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接口地址 |
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 |
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" #开启对象存储 #开启dns服务 |
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 #先把文件下载过来 #wget https://jihulab.com/james-curtis/requirements/-/raw/stable/yoga/upper-constraints.txt -O /tmp/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 i 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 i 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 i 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
#添加 |
验证:
使用:virsh list 查看虚拟机
关闭虚拟机instance-0000005a对应的进程
kill -9 225967
再次查看虚拟机列表,发现被关闭进程对应的虚拟机状态已经不是active 了
查看日志/var/log/kolla/masakari_monitors/masakari-instancemonitor.log, 发现masakari-instancemonitor 服务已经侦测到虚拟机进程异常,发送rpc信息
后续需要集成到kolla ansible里面实现自动化部署
openstack默认端口
另外,还有一些与OpenStack组件相关的辅助服务使用的默认端口,如下表所示。