Ceph/Cinder/Nova – Integrando os Serviços para Entrega de Discos

Continuando o post de Ceph que eu criei um tempo atrás, em uma de minhas turmas de Openstack resolvi passar como integrar o Ceph com o Cinder/Nova, tarefa que não é simples apesar de ser bem documentada. A ideia é que ao término você seja capaz de criar discos e fornecer eles para outras máquinas dentro de seu cluster.

Criando Pool de Discos

A primeira etapa será criar um repositório dentro do Ceph para armazenamento dos discos criados pelo Cinder. Para criar um repositório, dentro da máquina do Ceph, digite o comando abaixo:

# ceph osd pool create cinder 64

Com esse comando estamos criando um pool chamado cinder que usa 64 pgs (placement groups). Altere o valor de acordo com seu ambiente. Para saber mais sobre o que é um pg, acesse o meu post anterior de Ceph (link no rodapé), ou acesse a documentação para ler mais sobre o que é e como calcular a quantidade correta para sua infraestrutura.

Com nosso pool criado, precisamos criar um usuário com a permissão de leitura, escrita e execução para que o Cinder consiga acessar esse repositório e ler/escrever dados dentro dele. Para criar um usuário execute o comando abaixo:

# ceph auth get-or-create client.cinder mon 'profile rbd' osd 'profile rbd pool=cinder' -o /etc/cinder/cinder.keyring

Isso fará com que o usuário cinder seja criado e sua chave armazenada dentro de /etc/cinder/cinder.keyring. Guarde esse arquivo pois iremos utilizar ele durante a integração. Também associe uma aplicação para o pool, caso ainda não tenha associado um e a mensagem de erro “application not enabled on pool ‘cinder’ “ apareça quando checar os status do serviço:

# ceph osd pool application enable cinder rbd

O próximo passo é integrar a chave que criamos com o usuário Cinder, além de informamos como será feito essa conexão. Somente a título de curiosidade, o modelo de autenticação empregado pelo Ceph se chama cephx, na qual deve ser feito usando um usuário e uma senha (chamado keyring). Para integrar, primeiramente crie o arquivo /etc/cinder/ceph.conf com as configurações abaixo:

# vim /etc/cinder/ceph.conf
[client.cinder]
keyring = /etc/cinder/cinder.keyring

[global]
mon_host = 192.168.56.105
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

Garanta que esse arquivo e o cinder.keyring possam ser acessados pelo usuário cinder, que é o usuário responsável por manter o serviço de mesmo nome ativo.

# chown cinder. /etc/cinder/ceph.conf
# chown cinder. /etc/cinder/cinder.keyring

Altere o arquivo do cinder.conf (cinder-volume) para incluir as linhas abaixo fazendo referência ao arquivo de configuração que acabamos de criar:

# vim /etc/cinder/cinder.conf
...
enabled_backends = rbd

[rbd]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = cinder
rbd_ceph_conf = /etc/cinder/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2
rbd_user = cinder
rbd_secret_uuid = 1d8fe077-d359-40fd-a0e9-4205ce271a25
...

Todas as informações acima irão fazer a integração do Cinder com o Ceph, com exceção do campo rbd_secret_uuid, que existe disponível somente para o Cinder informar como o Nova irá acessar posteriormente o Ceph. Ficará mais claro mais para frente, porém pode ser colocado qualquer valor nesse campo, contanto que grave esse valor para uso posterior.

Por ultimo reinicie o serviço do cinder-volume:

# systemctl restart openstack-cinder-volume

Nesse momento temos o Ceph e o Cinder integrados e funcionando normalmente. Para validar, acesse a CLI do Openstack e crie um volume com o openstack volume create

$ openstack volume create --size 5 volume1

Se tudo der certo, esse volume será criado e poderá posteriormente anexar numa instância.

Integrando Ceph e Nova

A ultima etapa é permitir que o Nova consiga anexar esses novos volumes com as maquinas virtuais que já possui ou que pretende criar posteriormente. Para integrar ambos, envie o arquivo cinder.keyring que criamos anteriormente para todos os servidores que possuem o Nova instalado.

# scp /etc/cinder/cinder.keyring root@compute1:

A integração pode mudar de virtualizador para virtualizador, por isso procure as etapas corretas para o qual estiver utilizando em conjunto com o Nova. No caso desse post iremos demonstrar a integração usando o KVM.

Para integrar com o KVM, abra o arquivo cinder.keyring que enviou e altere o conteúdo dele. Remova todo seu conteúdo deixando somente o valor do campo keyring dentro dele:

# vim cinder.keyring
c89c0a90-9648-49eb-b443-c97adb538f23

Crie um arquivo de XML de chaveiro para o KVM saber como acessar o Ceph. Lembre-se de alterar o campo UUID para o valor que você colocou dentro do campo rbd_secret_uuid:

# vim secret.xml
<secret ephemeral='no' private='no'>
  <uuid>1d8fe077-d359-40fd-a0e9-4205ce271a25</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>

Por ultimo importe o cinder.keyring e o secret.xml para dentro do Ceph através dos comandos abaixo, novamente alterando a opção –secret para o que você informou no campo rbd_secret_uuid:

# virsh secret-define --file secret.xml
# virsh secret-set-value --secret 1d8fe077-d359-40fd-a0e9-4205ce271a25 --base64 $(cat cinder.keyring)

Pronto! Com isso você terá o KVM conectando com o Ceph. Para validar, tente adicionar um volume numa instância dentro dessa compute através do comando openstack server add volume:

# openstack server add volume instancia1 volume1

Somente um ultimo lembrete, esse passo do KVM só funciona na versão entregue pelo Ubuntu, visto que libvirt do CentOS nunca foi compilado para ter suporte ao RBDDrive. Em anexo segue alguns posts que usei de consulta para esse, caso queiram mais informações:

  • http://docs.ceph.com/docs/master/rbd/rbd-openstack/
  • http://superuser.openstack.org/articles/ceph-as-storage-for-openstack/
  • https://www.beyeler.com.br/instalando-o-ceph-em-um-ambiente-mono-node/

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *