將虛擬機器跑在ceph之中

FuShudi發表於2024-07-14

目錄
  • openStack對接ceph
    • 1. cinder對接ceph
      • 1.1 ceph建立儲存池
      • 1.2 ceph授權
      • 1.3 下發ceph檔案
      • 1.4 修改globals檔案
      • 1.5 部署cinder
      • 1.6 建立卷
      • null
    • 2. nova對接ceph
      • 2.1 建立卷
      • 2.2 更新cinder許可權
      • 2.3 修改globals檔案
      • 2.4 建立目錄
      • 2.5 升級nova
    • 3. 驗證nova
      • 3.1 檢查儲存池
      • 3.2 建立虛擬機器
      • 3.3 建立卷
      • 3.4 虛擬機器掛載卷

openStack對接ceph

在前面,我們只是將glance對接到了ceph,也就是隻有映象的儲存在ceph上的,如果nova的計算節點掛掉了,那麼執行在這個上面的虛擬機器的資料也就隨之丟失了,所以我們也可以將nova虛擬機器的資料也儲存在ceph上,包括cinder提供的卷也是可以對接的,接下來我們就來看看如何操作

1. cinder對接ceph

配置cinder與ceph整合,需要同步配置nova與ceph整合,使用cinder相同的ceph帳號,否則nova無許可權訪問cinder在ceph上建立的卷

由於我們之前使用kolla安裝openstack的時候並沒有讓他安裝cinder元件,所以我們現在需要修改配置檔案,來讓他部署cinder元件,並且ceph需要建立儲存池

1.1 ceph建立儲存池

在ceph上操作,由於我們需要開啟cinder的卷備份,所以我們需要2個儲存池,一個是資料池volumes,另一個是備份池backups

[root@ceph ~]# ceph osd pool create volumes
pool 'volumes' created
[root@ceph ~]# ceph osd pool application enable volumes rbd
enabled application 'rbd' on pool 'volumes'
[root@ceph ~]# ceph osd pool create backups
pool 'backups' created
[root@ceph ~]# ceph osd pool application enable backups rbd
enabled application 'rbd' on pool 'backups'
[root@ceph ~]# rbd pool init volumes
[root@ceph ~]# rbd pool init backups

1.2 ceph授權

因為是2個池,所以我們需要給到2個使用者來操作,不要使用一個使用者能夠直接操作這2個池

[root@ceph ceph]# ceph auth get-or-create client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes' -o /etc/ceph/ceph.client.cinder.keyring
[root@ceph ceph]# ceph auth get-or-create client.cinder-backups mon 'profile rbd' osd 'profile rbd pool=backups' -o /etc/ceph/ceph.client.cinder-backups.keyring

1.3 下發ceph檔案

我們需要將ceph的配置檔案以及使用者的認證檔案傳送到部署節點,部署節點必須提前建立好目錄

# 部署節點建立目錄
[root@openstack01 ~]# mkdir /etc/kolla/config/cinder/{cinder-backup,cinder-volume} -p

在部署節點上的目錄結構是這樣的

[root@openstack01 cinder]# tree
.
├── cinder-backup
│   ├── ceph.client.cinder-backups.keyring
│   ├── ceph.client.cinder.keyring
│   └── ceph.conf
└── cinder-volume
    ├── ceph.client.cinder.keyring
    └── ceph.conf

注意,一定要將這些檔案裡面的縮排給刪掉或者替換成空格,不然會報錯!

ceph的工作就做完了,接下來我們回到部署節點

1.4 修改globals檔案

[root@openstack01 ~]# vim /etc/kolla/globals.yml 
ceph_cinder_user: "cinder"
ceph_cinder_keyring: "client.{{ ceph_cinder_user }}.keyring"
ceph_cinder_pool_name: "volumes"
ceph_cinder_backup_user: "cinder-backup"
ceph_cinder_backup_keyring: "client.{{ ceph_cinder_backup_user }}.keyring"
ceph_cinder_backup_pool_name: "backups"
enable_cinder: "yes"
enable_cinder_backup: "yes"
cinder_backend_ceph: "yes"
cinder_backup_driver: "ceph"

1.5 部署cinder

(kolla) [root@openstack01 ~]# kolla-ansible -i /etc/kolla/multinode -t cinder deploy

因為我們之前沒有部署cinder,所以這裡的指令是cinder,如果已經部署了要修改配置檔案,那麼這裡就是upgrade,接下來等待cinder部署完畢

1.6 建立卷

(kolla) [root@openstack01 ~]# openstack volume create --size 10 volume01
(kolla) [root@openstack01 ~]# openstack volume list
+-------------------------------+----------+-----------+------+-------------+
| ID                            | Name     | Status    | Size | Attached to |
+-------------------------------+----------+-----------+------+-------------+
| c1983d42-8897-4cef-           | volume01 | available |   10 |             |
| bf53-02bdc57b5855             |          |           |      |             |
+-------------------------------+----------+-----------+------+-------------

卷可以正常建立,但是建立出來的卷不可以被nova的虛擬機器掛載,因為nova並沒有訪問ceph的許可權,所以我們現在需新使用者的許可權,需要說明的是,nova元件與cinder元件使用的是同一個使用者,所以我們並不用新建立使用者,只需要對cinder的使用者重新授權就可以了

2. nova對接ceph

因為nova目前無法使用卷,我們現在開始用nova對接ceph,一併讓虛擬機器的資料直接儲存在ceph上,並且可以使用卷

2.1 建立卷

[root@ceph ~]# ceph osd pool create vms
pool 'vms' created
[root@ceph ~]# ceph osd pool application enable vms rbd
enabled application 'rbd' on pool 'vms'
[root@ceph ~]# rbd pool init vms

2.2 更新cinder許可權

nova與cinder使用同一個使用者

[root@ceph ~]# ceph auth caps  client.cinder  mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms'

直接更新就可以了,不用將認證檔案傳過去,因為key並沒有變,只是許可權變了而已

2.3 修改globals檔案

(kolla) [root@openstack01 ~]# vim /etc/kolla/globals.yml
ceph_nova_keyring: "{{ ceph_cinder_keyring }}"
ceph_nova_user: "{{ ceph_cinder_user }}"
ceph_nova_pool_name: "vms"
nova_backend_ceph: "yes"

2.4 建立目錄

(kolla) [root@openstack01 ~]# mkdir /etc/kolla/config/nova
(kolla) [root@openstack01 ~]# cd /etc/kolla/config/nova
(kolla) [root@openstack01 nova]# scp ../cinder/cinder-volume/* .

2.5 升級nova

(kolla) [root@openstack01 nova]# kolla-ansible -i /etc/kolla/multinode -t nova upgrade 

等待他完成部署

3. 驗證nova

3.1 檢查儲存池

現在我們來驗證nova虛擬機器的根磁碟檔案是否儲存在ceph的vms池上

[root@ceph ~]# rbd ls vms
[root@ceph ~]# 

現在在ceph上是沒有資料在vms池的,接下來我們建立虛擬機器

3.2 建立虛擬機器

(kolla) [root@openstack01 ~]# openstack server create ecs01 --flavor m1.tiny --image cirros --network demo-net
(kolla) [root@openstack01 ~]# openstack server list
+-------------------+-------+--------+-------------------+--------+---------+
| ID                | Name  | Status | Networks          | Image  | Flavor  |
+-------------------+-------+--------+-------------------+--------+---------+
| a2d3bfaf-62f8-435 | ecs01 | ACTIVE | demo-             | cirros | m1.tiny |
| a-b9bc-35979de58e |       |        | net=10.0.0.112    |        |         |
| 00                |       |        |                   |        |         |
+-------------------+-------+--------+-------------------+--------+---------

現在虛擬機器已經正常執行了,接下來回到ceph節點檢視池

[root@ceph ~]# rbd ls vms
a2d3bfaf-62f8-435a-b9bc-35979de58e00_disk

看到了嗎?咱們剛剛建立的虛擬機器的ID是a2d3啥的,現在ceph的vms儲存池裡面就有一個這樣的資料,字尾是disk,接下來我們建立一個卷並掛載給虛擬機器

3.3 建立卷

(kolla) [root@openstack01 ~]# openstack volume create --size 5 volume02

卷建立出來之後我們將他掛載給ecs01

3.4 虛擬機器掛載卷

(kolla) [root@openstack01 ~]# openstack server add volume ecs01 volume02
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| ID                    | 79bb70bf-1cb4-42fc-8d9a-99c9cf940dd2 |
| Server ID             | a2d3bfaf-62f8-435a-b9bc-35979de58e00 |
| Volume ID             | 79bb70bf-1cb4-42fc-8d9a-99c9cf940dd2 |
| Device                | /dev/vdb                             |
| Tag                   | None                                 |
| Delete On Termination | False                                |
+-----------------------+--------------------------------------+

透過他的回顯,我們可以得知他將volume對映到了ecs的/dev/vdb,我們來到圖形介面看看是不是有這麼一個裝置了

現在我們的open stack的資料基本上已經全部儲存到了ceph叢集中,這樣就不會擔心openstack單點故障導致虛擬機器資料丟失了

相關文章