Hello Folks! Artikel ini lebih seperti catatan untuk diri sendiri, tetapi ini mungkin membantu jika anda mencari cara untuk mengintegrasikan Openstack Swift dengan Ceph Object Storage yaitu Ceph Rados Gateway.
Pendahuluan
OpenStack Swift adalah project open-source Openstack yang menyediakan layanan Object Store. Swift ideal untuk menyimpan data yang bersifat tidak terstruktur, seperti file gambar, video, dan data arsip.
Ceph RADOS Gateway (RadosGW) adalah komponen dari sistem penyimpanan terdistribusi Ceph, yang menyediakan antarmuka RESTful untuk mengakses dan menyimpan objek dalam Ceph Storage Cluster.
Pada integrasi antara Openstack Swift dengan RadosGW, sebenarnya Swift tidak dideploy sama sekali. Saya akan memanfaatkan kompatibilitas API Swift pada Rados Gateway dan juga API S3 jika diinginkan.
Sehingga endpoint dari layanan Object Store Swift langsung diarahkan ke RadosGW milik Ceph. Saya akan menggunakan Ceph dan API Swift, namun tidak menggunakan Swift itu sendiri.
End-user tidak akan melihat perbedaan dengan vanilla Swift deployment, tetap menggunakan Swift API, tetap melakukan autentikasi dengan Keystone.
Prasyarat
Saya tidak akan menjelaskan bagaimana cara deploy Openstack dan Ceph pada artikel ini. Untuk Deployment Openstack dan Ceph bisa disesuaikan saja sesuai environment masing-masing.
Pada environment saya, Openstack Deployment menggunakan kolla-ansible dan Ceph dengan ceph-ansible sebagai backend storage.
!! Perlu diperhatikan bahwa Deployment Ceph menggunakan ceph-ansible sudah deprecated pada saat Artikel ini dibuat, disarankan untuk migrasi ke cephadm !!
Requirements
- Openstack Yoga berjalan normal
- Ceph Quincy berjalan normal
Setup dan Instalasi RadosGW
Instalasi dan Konfigurasi Ceph Rados Gateway pada Ceph.
Instalasi RadosGW
- Edit konfigurasi rgws.yml pada ceph-ansible
source ~/ceph/ceph-venv/bin/activate
cd ~/ceph/ceph-ansible/group_vars
cp rgws.yml.sample rgws.yml
vim group_vars/rgws.yml
---
copy_admin_key: true
radosgw_interface: ens7
2. Edit inventory untuk include rgws saat deployment ceph dengan ceph-ansible
vim hosts
---
[mons]
democtrl0[1:3]
[mgrs]
democtrl0[1:3]
[osds]
democmpt0[1:3]
[clients]
democmpt0[1:3]
[mdss]
democtrl0[1:3]
# Tambahkan Parameter dibawah
[rgws]
democtrl0[1:3]
3. Jalankan ceph-ansible deployment
ansible-playbook -v -i hosts site.yml
4. Verifikasi hasil, pastikan service rgws sudah tampil dan active
pada ceph status terdeteksi 3 karena saya menginstall rgw pada tiga node controller.
(Optional) Setup Haproxy untuk RadosGW
Jika ceph rgw dideploy pada lebih dari satu node, maka bisa menambahkan konfigurasi Load Balancer (disini saya akan menggunakan haproxy dari kolla-ansible).
vim /etc/kolla/haproxy/services.d/ceph-rgw.cfg
----
frontend ceph_rgw_internal_front
mode http
http-request del-header X-Forwarded-Proto
option httplog
option forwardfor
http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Forwarded-Proto https
bind 10.24.12.150:8080 ssl crt /etc/haproxy/haproxy-internal.pem
default_backend ceph_rgw_back
frontend ceph_rgw_external_front
mode http
http-request deny if { path -i -m beg /server-status }
http-request del-header X-Forwarded-Proto
option httplog
option forwardfor
http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Forwarded-Proto https
bind 10.24.11.150:8080 ssl crt /etc/haproxy/haproxy.pem
default_backend ceph_rgw_back
backend ceph_rgw_back
balance source
mode http
server democtrl01 10.24.14.101:8080 check inter 2000 rise 2 fall 5
server democtrl02 10.24.14.102:8080 check inter 2000 rise 2 fall 5
server democtrl03 10.24.14.103:8080 check inter 2000 rise 2 fall 5
for i in {1..3};do ssh 10.24.12.10$i docker restart haproxy; done
ss -tulpn |grep 8080
Integrasi RadosGW dengan OpenStack Swift
Integrasi RadosGW dengan Openstack Swift dengan pembuatan endpoint untuk Swift pada Openstack.
Konfigurasi ceph.conf Agar Terhubung dengan Keystone
1. Edit file /etc/ceph/ceph.conf
pada setiap node ceph rgw dengan menambahkan konfigurasi seperti dibawah.
cp /etc/ceph/ceph.conf /etc/ceph/ceph.conf.bak
vim /etc/ceph/ceph.conf
---
[client.rgw.<hostname>.rgw0]
host = <hostname>
keyring = /var/lib/ceph/radosgw/ceph-rgw.<hostname>.rgw0/keyring
log file = /var/log/ceph/ceph-rgw-<hostname>.rgw0.log
rgw frontends = beast endpoint=<ip-address>:8080
rgw thread pool size = 512
rgw keystone api version = 3
rgw keystone url = https://10.24.12.150:35357
rgw keystone admin user = admin
rgw keystone admin password = <admin-password>
rgw keystone admin tenant = admin
rgw keystone accepted roles = admin, _member_, member
rgw keystone admin domain = default
rgw keystone token cache size = 500
rgw keystone revocation interval = 300
rgw keystone implicit tenants = true
rgw swift account in url = true
rgw s3 auth use keystone = true
rgw_enable_apis = swift, s3
rgw_keystone_verify_ssl = false
Note: rgw s3 auth use keystone = true
digunakan jika ingin menggunakan S3 API
2. Restart ceph radosgw pada masing-masing controller
systemctl restart ceph-radosgw@rgw.<hostname>.rgw0.service
Konfigurasi Openstack Endpoint
1. Buat Service Swift pada Openstack
openstack service create --name swift \
--description "OpenStack Object Storage" object-store
2. Buat swift internal, public, dan admin endpoint
openstack endpoint create --region RegionOne \
object-store public \
'https://public.demo.lab:8080/swift/v1/AUTH_%(tenant_id)s'
openstack endpoint create --region RegionOne \
object-store admin \
'https://admin.demo.lab:8080/swift/v1'
openstack endpoint create --region RegionOne \
object-store internal \
'https://internal.demo.lab:8080/swift/v1/AUTH_%(tenant_id)s'
Jika pembuatan endpoint sudah selesai, pada Openstack Horizon akan muncul menu Object Storage
.
Tes Operasional Swift
Jika ingin menggunakan swift command perlu install dependensi berikut. Jika tidak, bisa langsung pakai dari command openstack.
pip3 install python-swiftclient
Upload Object
Pengujian operasional swift upload dengan membuat container (istilah dalam swift) / bucket bernama firstdemo
dan mencoba upload beberapa file kedalam container tersebut.
openstack container create firstdemo
cd openstack/images
echo "rj testing" > test.txt
swift upload firstdemo test.txt
swift upload firstdemo cirros-0.6.1-x86_64-disk.img
Download Object
Pengujian operasional swift download dengan download file yang sudah diupload sebelumnya ke container firstdemo
dan verifikasi hasil checksum.
swift list firstdemo
swift download firstdemo test.txt
swift download firstdemo cirros-0.6.1-x86_64-disk.img
Integrasi S3
Pengujian operasional swift terintegrasi dengan S3 dengan menggunakan s3cmd
command.
Pertama, buat ec2 credentials melalui Openstack untuk mendapatkan access
& secret
keys
openstack ec2 credentials create
Selanjutnya dari sisi Client, konfigurasi s3cmd
agar menggunakan access
& secret
keys yang sudah dibuat serta Endpoint dari swift
mkdir swift ; cd swift
apt install s3cmd -y
cat<<EOF > ~/.s3cfg
[default]
access_key = 03f0fe31e1e4428098be77f88e882789
secret_key = 2a527e7149ed446e80e2b2e9dc87d46f
host_base = https://public.demo.lab:8080
host_bucket = https://public.demo.lab:8080
check_ssl_certificate = False
EOF
Download file menggunakan s3cmd
s3cmd ls
s3cmd get -r s3://firstdemo