Openstack All-in-one met Ceph als storage
Openstack All-in-one met Ceph als storage
Binnen OpenStack-Ansible zijn er nog geen Ansible modules beschikbaar om een Ceph cluster uit te rollen. We kunnen hiervoor gebruik maken van Ceph-Ansible en hierna de OpenStack-Ansible Ceph client role gebruiken.
Deploy Ceph
In dit voorbeeld wordt een Ceph storage cluster aangemaakt via Ceph-Ansible. We gebruiken hiervoor 3 lxc containers voor de Ceph monitors binnen de OpenStack-Ansible AIO. De storage nodes worden aangemaakt op 3 losse VMtjes op dezelfde KVM hypervisor host. We gebruiken hiervoor Ubuntu versie 16.04.
Binnen OpenStack-Ansible hebben we de volgende netwerken beschikbaar:
/etc/network/interfaces.d/osa_interfaces.cfg br-mgmt 172.29.236.100/22 br-vxlan 172.29.240.100/22 br-storage 172.29.244.100/22 br-vlan 172.29.248.100/22 veth peer name eth12 Flat network default gateway 172.29.248.1
Pas de osa_interfaces.cfg file aan om het br-mgmt en br-storage netwerk ook voor de osd VMtjes bereikbaar te maken. Voor Neutron gebruiken we voor public het Flat network met eth12 en ens3 is de interface naar internet.
auto br-mgmt
iface br-mgmt inet static
bridge_stp off
bridge_waitport 0
bridge_ports ens9
bridge_fd 0
# Notice the bridge port is the vlan tagged interface
# bridge_ports none
address 172.29.236.100
netmask 255.255.252.0
offload-sg off
auto br-storage
iface br-storage inet static
bridge_stp off
bridge_waitport 0
bridge_ports ens10
bridge_fd 0
# bridge_ports none
address 172.29.244.100
netmask 255.255.252.0
offload-sg off
auto br-vxlan
up /sbin/iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
down /sbin/iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
Als de lxc netwerken niet goed opkomen kun je eventueel een rebuild doen:
/usr/lcocal/bin/lxc-system-manage dnsmasq-restart
of
/usr/local/bin/lxc-system-manage system-rebuild
Voor de Ceph MON en OSD gaan we de volgende IP adressen gebruiken:
ceph hosts mon mgmt 172.29.236.11, 12, 13 str 172.29.244.11, 12, 13 osd mgmt 172.29.236.21, 22, 23 str 172.29.244.21, 22, 23
Pas de dynamische inventory file openstack_inventory.json file aan om de extra lxc mon containers aan te maken.
/etc/openstack_deploy/openstack_inventory.json
"aio1_ceph_mon_container-mon1": {
"ansible_host": "172.29.236.11",
"ansible_ssh_host": "172.29.236.11",
"component": "ceph_mon",
"container_address": "172.29.236.11",
"container_name": "aio1_ceph_mon_container-mon1",
"container_networks": {
"container_address": {
"address": "172.29.236.11",
"bridge": "br-mgmt",
"interface": "eth1",
"netmask": "255.255.252.0",
"type": "veth"
},
"storage_address": {
"address": "172.29.244.11",
"bridge": "br-storage",
"interface": "eth2",
"netmask": "255.255.252.0",
"type": "veth"
}
},
"physical_host": "aio1",
"physical_host_group": "storage-infra_hosts",
"properties": {
"service_name": "ceph-mon"
}
},
Voeg toe aan de containers group:
"aio1-host_containers": {
"hosts": [
"aio1_nova_conductor_container-9eac63f0",
"aio1_aodh_container-4ce29abb",
"aio1_ceph_mon_container-mon1",
"aio1_ceph_mon_container-mon2",
"aio1_ceph_mon_container-mon3"
]
},
"ceph-mon_container": {
"hosts": [
"aio1_ceph_mon_container-mon1",
"aio1_ceph_mon_container-mon2",
"aio1_ceph_mon_container-mon3"
]
},
Voeg de mon hosts toe aan de /etc/hosts van de AIO host.
172.29.236.11 aio1-ceph-mon-container-mon1.openstack.local aio1_ceph_mon_container-mon1 172.29.236.12 aio1-ceph_mon-container-mon2.openstack.local aio1_ceph_mon_container-mon2 172.29.236.13 aio1-ceph_mon-container-mon3.openstack.local aio1_ceph_mon_container-mon3
Voer het Ansible playbook voor het aanmaken van de lxc containers uit. Het kan zijn dat je eerst ook de cache facts from physical host moet updaten door een playbook uit te voeren voor host aio1.
openstack-ansible lxc-containers-create.yml --limit aio1 openstack-ansible lxc-containers-create.yml --limit ceph-mon_container PLAY RECAP ********************************************************************* aio1_ceph_mon_container-mon1 : ok=31 changed=22 unreachable=0 failed=0 aio1_ceph_mon_container-mon2 : ok=31 changed=22 unreachable=0 failed=0 aio1_ceph_mon_container-mon3 : ok=31 changed=22 unreachable=0 failed=0
Installeer nu Ceph via Ceph-Ansible:
Pas het volgende aan in group_vars/all.yml:
ceph_origin: 'upstream' # or 'distro' or 'local'
ceph_stable: true # use ceph stable branch
ceph_stable_release: jewel # ceph stable release
monitor_interface: eth2
public_network: 172.29.244.0/22
cluster_network: "{{ public_network }}"
Pas het volgende aan in group_vars/osds.yml:
osd_auto_discovery: true journal_collocation: true
Voor OpenStack glance, cinder en nova moeten we eerst de clients aanmaken met de juiste pools. Dit kun je aangeven in group_vars/mons.yml:
#############
# OPENSTACK #
#############
openstack_config: true
openstack_glance_pool:
name: images
pg_num: "{{ pool_default_pg_num }}"
openstack_cinder_pool:
name: volumes
pg_num: "{{ pool_default_pg_num }}"
openstack_nova_pool:
name: vms
pg_num: "{{ pool_default_pg_num }}"
#openstack_cinder_backup_pool:
# name: backups
# pg_num: "{{ pool_default_pg_num }}"
openstack_pools:
- "{{ openstack_glance_pool }}"
- "{{ openstack_cinder_pool }}"
- "{{ openstack_nova_pool }}"
# - "{{ openstack_cinder_backup_pool }}"
openstack_keys:
- { name: client.glance, value: "mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool={{ openstack_glance_pool.name }}'" }
- { name: client.cinder, value: "mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool={{ openstack_cinder_pool.name }}, allow rwx pool={{ openstack_nova_pool.name }}, allow rx pool={{ openstack_glance_pool.name }}'" }
# - { name: client.cinder-backup, value: "mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool={{ openstack_cinder_backup_pool.name }}'" }
Voeg een host file toe met de VMtjes (voorbeeld ceph-nodes):
[mons] 172.29.236.11 172.29.236.12 172.29.236.13 [osds] 172.29.236.21 172.29.236.22 172.29.236.23 [mons:vars] ansible_python_interpreter=/usr/bin/python2.7 [osds:vars] ansible_python_interpreter=/usr/bin/python2.7
Run ansible-ceph playbook:
ansible-playbook ceph-ansible/site.yml -i ceph-nodes
En na een paar minuten is het CEPH storage cluster klaar voor gebruik.
root@aio1-ceph-mon-container-mon1:~# ceph -s
cluster aaf133a3-5959-43dc-a9a8-4696c926d95f
health HEALTH_OK
monmap e1: 3 mons at {aio1-ceph-mon-container-mon1=172.29.244.11:6789/0,
aio1-ceph-mon-container-mon2=172.29.244.12:6789/0,aio1-ceph-mon-container-mon3=172.29.244.13:6789/0}
election epoch 4, quorum 0,1,2 aio1-ceph-mon-container-mon1,aio1-ceph-mon-container-mon2,aio1-ceph-mon-container-mon3
osdmap e31: 6 osds: 6 up, 6 in
flags sortbitwise,require_jewel_osds
pgmap v74: 448 pgs, 4 pools, 0 bytes data, 0 objects
202 MB used, 149 GB / 149 GB avail
448 active+clean
root@aio1-ceph-mon-container-mon1:~# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.14639 root default
-2 0.04880 host ubu1604osd1
0 0.02440 osd.0 up 1.00000 1.00000
5 0.02440 osd.5 up 1.00000 1.00000
-3 0.04880 host ubu1604osd2
1 0.02440 osd.1 up 1.00000 1.00000
4 0.02440 osd.4 up 1.00000 1.00000
-4 0.04880 host ubu1604osd3
2 0.02440 osd.2 up 1.00000 1.00000
3 0.02440 osd.3 up 1.00000 1.00000
En de OpenStack clients en pools zijn aangemaakt:
aio1-ceph-mon-container-mon1:~# ceph osd lspools 0 rbd,1 images,2 volumes,3 vms,
Nu kunnen we ansible-openstack configureren. Pas de volgende files aan in /etc/openstack_deploy.
ubu1604oc1:/etc/openstack_deploy# vi user_variables.yml
glance_default_store: rbd
glance_rbd_store_pool: images
nova_libvirt_images_rbd_pool: vms
ceph_mons:
- 172.29.244.11
- 172.29.244.12
- 172.29.244.13
ubu1604oc1:/etc/openstack_deploy# vi openstack_user_config.yml
storage_hosts:
aio1:
ip: 172.29.236.100
container_vars:
cinder_backends:
limit_container_types: cinder_volume
rbd:
volume_group: cinder-volumes
volume_driver: cinder.volume.drivers.rbd.RBDDriver
volume_backend_name: rbd
rbd_pool: volumes
rbd_ceph_conf: /etc/ceph/ceph.conf
rbd_user: cinder
Voer nu het Ansible playbook voor de OpenStack configuratie weer uit.
cd /opt/openstack-ansible/playbooks openstack-ansible setup-openstack.yml
OpenStack AIO is nu klaar om CEPH rbd storage pools te gebruiken voor glance, cinder en nova. Zie hiervoor: OpenStack deploy Instances op CEPH.