Deploying multuple Ceph clusters¶
This guide shows how to setup multiple Ceph clusters. One Ceph cluster will be used for k8s RBD storage and while other Ceph cluster will be for tenant facing storage backend for Cinder and Glance.
Ceph Clusters:¶
Ceph for RBD:¶
This Ceph cluster will be used for k8s RBD storage (pvc). This can be used by entire Kubernetes cluster.
k8s namespace: ceph
mon endpoint port: 6789
mgr endpoint port: 7000
metric port: 9283
storage classes: general (rbd based for pvc)
no ceph-mds and ceph-rgw
Ceph for Tenant:¶
This Ceph cluster will be used by Cinder and Glance as storage backend.
k8s namespace: tenant-ceph
mon endpoint port: 6790
mgr endpoint port: 7001
metric port: 9284
no storage classes
no ceph-mds
Env Setup:¶
6 VM based hosts (node1, node2, node3, node4, node5, node6)
k8s node labels:¶
Ceph for RBD related labels:
Labels assigned to nodes: node1, node2, node3:
openstack-control-plane=enabled, ceph-mon=enabled, ceph-mgr=enabled, ceph-rgw=enabled, ceph-mds=enabled, ceph-osd=enabled
Ceph for Tenant related labels:
Labels assigned to nodes: node1, node2, node3:
tenant-ceph-control-plane=enabled, ceph-mon-tenant=enabled, ceph-mgr-tenant=enabled, ceph-rgw-tenant=enabled
Labels assigned to nodes: node4, node5, node6:
openstack-data-plane=enabled, openstack-compute-node=enabled, ceph-osd-tenant=enabled, openstack-data-plane=enabled
k8s node list with labels
After applying above labels, node labels should look like following.
ubuntu@node1:~$ kubectl get nodes --show-labels=true
NAME STATUS ROLES AGE VERSION LABELS
node1 Ready <none> 9m v1.10.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceph-mds=enabled,ceph-mgr-tenant=enabled,ceph-mgr=enabled,ceph-mon-tenant=enabled,ceph-mon=enabled,ceph-osd=enabled,ceph-rgw-tenant=enabled,ceph-rgw=enabled,kubernetes.io/hostname=node1,linuxbridge=enabled,openstack-control-plane=enabled,openstack-helm-node-class=primary,openvswitch=enabled,tenant-ceph-control-plane=enabled
node2 Ready <none> 6m v1.10.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceph-mds=enabled,ceph-mgr-tenant=enabled,ceph-mgr=enabled,ceph-mon-tenant=enabled,ceph-mon=enabled,ceph-osd=enabled,ceph-rgw-tenant=enabled,ceph-rgw=enabled,kubernetes.io/hostname=node2,linuxbridge=enabled,openstack-control-plane=enabled,openstack-helm-node-class=general,openvswitch=enabled,tenant-ceph-control-plane=enabled
node3 Ready <none> 6m v1.10.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceph-mds=enabled,ceph-mgr-tenant=enabled,ceph-mgr=enabled,ceph-mon-tenant=enabled,ceph-mon=enabled,ceph-osd=enabled,ceph-rgw-tenant=enabled,ceph-rgw=enabled,kubernetes.io/hostname=node3,linuxbridge=enabled,openstack-control-plane=enabled,openstack-helm-node-class=general,openvswitch=enabled,tenant-ceph-control-plane=enabled
node4 Ready <none> 7m v1.10.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceph-osd-tenant=enabled,kubernetes.io/hostname=node4,linuxbridge=enabled,openstack-compute-node=enabled,openstack-data-plane=enabled,openstack-helm-node-class=general,openvswitch=enabled
node5 Ready <none> 6m v1.10.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceph-osd-tenant=enabled,kubernetes.io/hostname=node5,linuxbridge=enabled,openstack-compute-node=enabled,openstack-data-plane=enabled,openstack-helm-node-class=general,openvswitch=enabled
node6 Ready <none> 6m v1.10.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceph-osd-tenant=enabled,kubernetes.io/hostname=node6,linuxbridge=enabled,openstack-compute-node=enabled,openstack-data-plane=enabled,openstack-helm-node-class=general,openvswitch=enabled
Test Steps:¶
1) Prepare scripts:¶
OpenStack-Helm multinode guide includes scripts which are used to specify overrides and deploy charts.
Duplicate scripts as shows below for later use.
cd tools/deployment/multinode/
cp 030-ceph.sh 030-tenant-ceph.sh
cp 040-ceph-ns-activate.sh 040-tenant-ceph-ns-activate.sh
cp 090-ceph-radosgateway.sh 090-tenant-ceph-radosgateway.sh
2) Deploy ingress chart:¶
Script to update and execute: 020-ingress.sh
Update script to include namespace tenant-ceph
as shown
below.
for NAMESPACE in openstack ceph tenant-ceph; do
Execute script.
3) Deploy Ceph for RBD:¶
Script to update and execute: 030-ceph.sh
Update script with following overrides. Note: The original RBD provisioner is now deprecated. The CSI RBD provisioner is selected here. If you prefer the original non-CSI RBD provisioner, then set rbd_provisioner to true instead.
deployment:
storage_secrets: true
ceph: true
rbd_provisioner: false
csi_rbd_provisioner: true
cephfs_provisioner: false
client_secrets: false
endpoints:
ceph_mon:
namespace: ceph
port:
mon:
default: 6789
ceph_mgr:
namespace: ceph
port:
mgr:
default: 7000
metrics:
default: 9283
manifests:
deployment_mds: false
bootstrap:
enabled: true
conf:
pool:
target:
osd: 3
storageclass:
rbd:
ceph_configmap_name: ceph-etc
cephfs:
provision_storage_class: false
ceph_mgr_modules_config:
prometheus:
server_port: 9283
monitoring:
prometheus:
enabled: true
ceph_mgr:
port: 9283
Note
cephfs_provisioner: false
and provision_storage_class: false
are set
to false to disable cephfs.
deployment_mds: false
is set to disable ceph-mds
Execute script.
4) Deploy MariaDB, RabbitMQ, Memcached and Keystone:¶
Use default overrides and execute following scripts as per OSH guide steps:
040-ceph-ns-activate.sh
050-mariadb.sh
060-rabbitmq.sh
070-memcached.sh
080-keystone.sh
Result from Steps 2, 3, 4:¶
Ceph Pods
ubuntu@node1:~$ kubectl get pods -n ceph -o wide
NAME READY STATUS RESTARTS AGE IP NODE
ceph-bootstrap-g45qc 0/1 Completed 0 28m 192.168.5.16 node3
ceph-mds-keyring-generator-gsw4m 0/1 Completed 0 28m 192.168.2.11 node2
ceph-mgr-5746dd89db-mmrg4 1/1 Running 0 23m 10.0.0.12 node2
ceph-mgr-5746dd89db-q25lt 1/1 Running 0 23m 10.0.0.9 node3
ceph-mgr-keyring-generator-t4s8l 0/1 Completed 0 28m 192.168.2.9 node2
ceph-mon-6n4hk 1/1 Running 0 28m 10.0.0.9 node3
ceph-mon-b2d9w 1/1 Running 0 28m 10.0.0.12 node2
ceph-mon-check-d85994946-2dcpg 1/1 Running 0 28m 192.168.5.17 node3
ceph-mon-keyring-generator-rmvfz 0/1 Completed 0 28m 192.168.2.10 node2
ceph-mon-svkdl 1/1 Running 0 28m 10.0.0.16 node1
ceph-osd-default-83945928-2mhrj 1/1 Running 0 25m 10.0.0.9 node3
ceph-osd-default-83945928-gqbd9 1/1 Running 0 25m 10.0.0.16 node1
ceph-osd-default-83945928-krrl8 1/1 Running 0 25m 10.0.0.12 node2
ceph-osd-keyring-generator-zg8s5 0/1 Completed 0 28m 192.168.0.195 node1
ceph-rbd-pool-92nbv 0/1 Completed 0 23m 192.168.5.18 node3
ceph-rbd-provisioner-599895579c-jl6qk 1/1 Running 0 21m 192.168.2.15 node2
ceph-rbd-provisioner-599895579c-n4hbk 1/1 Running 0 21m 192.168.5.19 node3
ceph-rgw-keyring-generator-2wv4j 0/1 Completed 0 28m 192.168.5.15 node3
ceph-storage-keys-generator-8vzrx 0/1 Completed 0 28m 192.168.2.12 node2
ingress-796d8cf8d6-9khkm 1/1 Running 0 28m 192.168.2.6 node2
ingress-796d8cf8d6-nznvc 1/1 Running 0 28m 192.168.5.12 node3
ingress-error-pages-54454dc79b-bgc5m 1/1 Running 0 28m 192.168.2.5 node2
ingress-error-pages-54454dc79b-hwnv4 1/1 Running 0 28m 192.168.5.7 node3
Openstack Pods:
ubuntu@node1:~$ kubectl get pods -n openstack -o wide
NAME READY STATUS RESTARTS AGE IP NODE
ceph-openstack-config-ceph-ns-key-generator-mcxrs 0/1 Completed 0 11m 192.168.2.16 node2
ingress-7b4bc84cdd-7wslz 1/1 Running 0 30m 192.168.5.5 node3
ingress-7b4bc84cdd-z6t2z 1/1 Running 0 30m 192.168.2.4 node2
ingress-error-pages-586c7f86d6-7m58l 1/1 Running 0 30m 192.168.5.6 node3
ingress-error-pages-586c7f86d6-n9tzv 1/1 Running 0 30m 192.168.2.3 node2
keystone-api-7974676d5d-5k27d 1/1 Running 0 6m 192.168.5.24 node3
keystone-api-7974676d5d-cd9kv 1/1 Running 0 6m 192.168.2.21 node2
keystone-bootstrap-twfrj 0/1 Completed 0 6m 192.168.0.197 node1
keystone-credential-setup-txf5p 0/1 Completed 0 6m 192.168.5.25 node3
keystone-db-init-tjxgm 0/1 Completed 0 6m 192.168.2.20 node2
keystone-db-sync-zl9t4 0/1 Completed 0 6m 192.168.2.22 node2
keystone-domain-manage-thwdm 0/1 Completed 0 6m 192.168.0.198 node1
keystone-fernet-setup-qm424 0/1 Completed 0 6m 192.168.5.26 node3
keystone-rabbit-init-6699r 0/1 Completed 0 6m 192.168.2.23 node2
keystone-test 0/1 Completed 0 4m 192.168.3.3 node4
mariadb-ingress-84894687fd-wfc9b 1/1 Running 0 11m 192.168.2.17 node2
mariadb-ingress-error-pages-78fb865f84-bg8sg 1/1 Running 0 11m 192.168.5.20 node3
mariadb-server-0 1/1 Running 0 11m 192.168.5.22 node3
memcached-memcached-5db74ddfd5-m5gw2 1/1 Running 0 7m 192.168.2.19 node2
rabbitmq-rabbitmq-0 1/1 Running 0 8m 192.168.2.18 node2
rabbitmq-rabbitmq-1 1/1 Running 0 8m 192.168.5.23 node3
rabbitmq-rabbitmq-2 1/1 Running 0 8m 192.168.0.196 node1
Ceph Status
ubuntu@node1:~$ kubectl exec -n ceph ceph-mon-b2d9w -- ceph -s
cluster:
id: 3e53e3b7-e5d9-4bab-9701-134687f4954e
health: HEALTH_OK
services:
mon: 3 daemons, quorum node3,node2,node1
mgr: node3(active), standbys: node2
osd: 3 osds: 3 up, 3 in
data:
pools: 18 pools, 93 pgs
objects: 127 objects, 218 MB
usage: 46820 MB used, 186 GB / 232 GB avail
pgs: 93 active+clean
Ceph ConfigMaps
ubuntu@node1:~$ kubectl get cm -n ceph
NAME DATA AGE
ceph-client-bin 7 25m
ceph-client-etc 1 25m
ceph-etc 1 23m
ceph-mon-bin 10 29m
ceph-mon-etc 1 29m
ceph-osd-bin 7 27m
ceph-osd-default 1 27m
ceph-osd-etc 1 27m
ceph-provisioners-ceph-provisioners-bin 4 23m
ceph-templates 6 29m
ingress-bin 2 30m
ingress-ceph-nginx 0 30m
ingress-conf 3 30m
ingress-services-tcp 0 30m
ingress-services-udp 0 30m
ceph-mon-etc (ceph.conf)
ubuntu@node1:~$ kubectl get cm -n ceph ceph-mon-etc -o yaml
apiVersion: v1
data:
ceph.conf: |
[global]
cephx = true
cephx_cluster_require_signatures = true
cephx_require_signatures = false
cephx_service_require_signatures = false
fsid = 3e53e3b7-e5d9-4bab-9701-134687f4954e
mon_addr = :6789
mon_host = ceph-mon-discovery.ceph.svc.cluster.local:6789
[osd]
cluster_network = 10.0.0.0/24
ms_bind_port_max = 7100
ms_bind_port_min = 6800
osd_max_object_name_len = 256
osd_mkfs_options_xfs = -f -i size=2048
osd_mkfs_type = xfs
public_network = 10.0.0.0/24
kind: ConfigMap
metadata:
creationTimestamp: 2018-08-27T04:55:32Z
name: ceph-mon-etc
namespace: ceph
resourceVersion: "3218"
selfLink: /api/v1/namespaces/ceph/configmaps/ceph-mon-etc
uid: 6d9fdcba-a9b5-11e8-bb1d-fa163ec12213
Note
Note that mon_addr and mon_host have default mon port 6789.
k8s storageclass
ubuntu@node1:~$ kubectl get storageclasses
NAME PROVISIONER AGE
general ceph.com/rbd 14m
Ceph services
ubuntu@node1:~$ kubectl get svc -n ceph
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ceph-mgr ClusterIP 10.111.185.73 <none> 7000/TCP,9283/TCP 27m
ceph-mon ClusterIP None <none> 6789/TCP 31m
ceph-mon-discovery ClusterIP None <none> 6789/TCP 31m
ingress ClusterIP 10.100.23.32 <none> 80/TCP,443/TCP 32m
ingress-error-pages ClusterIP None <none> 80/TCP 32m
ingress-exporter ClusterIP 10.109.196.155 <none> 10254/TCP 32m
Ceph endpoints
ubuntu@node1:~$ kubectl get endpoints -n ceph
NAME ENDPOINTS AGE
ceph-mgr 10.0.0.12:9283,10.0.0.9:9283,10.0.0.12:7000 + 1 more... 27m
ceph-mon 10.0.0.12:6789,10.0.0.16:6789,10.0.0.9:6789 31m
ceph-mon-discovery 10.0.0.12:6789,10.0.0.16:6789,10.0.0.9:6789 31m
ingress 192.168.2.6:80,192.168.5.12:80,192.168.2.6:443 + 1 more... 32m
ingress-error-pages 192.168.2.5:8080,192.168.5.7:8080 32m
ingress-exporter 192.168.2.6:10254,192.168.5.12:10254 32m
netstat ceph mon port
ubuntu@node1: netstat -ntlp | grep 6789
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 10.0.0.16:6789 0.0.0.0:* LISTEN -
ubuntu@node1: netstat -ntlp | grep 6790
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Ceph secrets
ubuntu@node1:~$ kubectl get secrets -n ceph
NAME TYPE DATA AGE
ceph-bootstrap-mds-keyring Opaque 1 34m
ceph-bootstrap-mgr-keyring Opaque 1 34m
ceph-bootstrap-osd-keyring Opaque 1 34m
ceph-bootstrap-rgw-keyring Opaque 1 34m
ceph-bootstrap-token-w2sqp kubernetes.io/service-account-token 3 34m
ceph-client-admin-keyring Opaque 1 34m
ceph-mds-keyring-generator-token-s9kst kubernetes.io/service-account-token 3 34m
ceph-mgr-keyring-generator-token-h5sw6 kubernetes.io/service-account-token 3 34m
ceph-mgr-token-hr88m kubernetes.io/service-account-token 3 30m
ceph-mon-check-token-bfvgk kubernetes.io/service-account-token 3 34m
ceph-mon-keyring Opaque 1 34m
ceph-mon-keyring-generator-token-5gs5q kubernetes.io/service-account-token 3 34m
ceph-mon-token-zsd6w kubernetes.io/service-account-token 3 34m
ceph-osd-keyring-generator-token-h97wb kubernetes.io/service-account-token 3 34m
ceph-osd-token-4wfm5 kubernetes.io/service-account-token 3 32m
ceph-provisioners-ceph-rbd-provisioner-token-f92tw kubernetes.io/service-account-token 3 28m
ceph-rbd-pool-token-p2nxt kubernetes.io/service-account-token 3 30m
ceph-rgw-keyring-generator-token-wmfx6 kubernetes.io/service-account-token 3 34m
ceph-storage-keys-generator-token-dq5ts kubernetes.io/service-account-token 3 34m
default-token-j8h48 kubernetes.io/service-account-token 3 35m
ingress-ceph-ingress-token-68rws kubernetes.io/service-account-token 3 35m
ingress-error-pages-token-mpvhm kubernetes.io/service-account-token 3 35m
pvc-ceph-conf-combined-storageclass kubernetes.io/rbd 1 34m
Openstack secrets
ubuntu@node1:~$ kubectl get secrets -n openstack
NAME TYPE DATA AGE
ceph-openstack-config-ceph-ns-key-cleaner-token-jj7n6 kubernetes.io/service-account-token 3 17m
ceph-openstack-config-ceph-ns-key-generator-token-5sqfw kubernetes.io/service-account-token 3 17m
default-token-r5knr kubernetes.io/service-account-token 3 35m
ingress-error-pages-token-xxjxt kubernetes.io/service-account-token 3 35m
ingress-openstack-ingress-token-hrvv8 kubernetes.io/service-account-token 3 35m
keystone-api-token-xwczg kubernetes.io/service-account-token 3 12m
keystone-bootstrap-token-dhnb6 kubernetes.io/service-account-token 3 12m
keystone-credential-keys Opaque 2 12m
keystone-credential-rotate-token-68lnk kubernetes.io/service-account-token 3 12m
keystone-credential-setup-token-b2smc kubernetes.io/service-account-token 3 12m
keystone-db-admin Opaque 1 12m
keystone-db-init-token-brzkj kubernetes.io/service-account-token 3 12m
keystone-db-sync-token-xzqj9 kubernetes.io/service-account-token 3 12m
keystone-db-user Opaque 1 12m
keystone-domain-manage-token-48gn5 kubernetes.io/service-account-token 3 12m
keystone-etc Opaque 9 12m
keystone-fernet-keys Opaque 2 12m
keystone-fernet-rotate-token-djtzb kubernetes.io/service-account-token 3 12m
keystone-fernet-setup-token-n9st2 kubernetes.io/service-account-token 3 12m
keystone-keystone-admin Opaque 8 12m
keystone-keystone-test Opaque 8 12m
keystone-rabbit-init-token-pt5b2 kubernetes.io/service-account-token 3 12m
keystone-rabbitmq-admin Opaque 1 12m
keystone-rabbitmq-user Opaque 1 12m
keystone-test-token-z8mb6 kubernetes.io/service-account-token 3 12m
mariadb-db-root-password Opaque 1 17m
mariadb-ingress-error-pages-token-cnrqp kubernetes.io/service-account-token 3 17m
mariadb-ingress-token-gfrg4 kubernetes.io/service-account-token 3 17m
mariadb-secrets Opaque 1 17m
mariadb-token-pr5lp kubernetes.io/service-account-token 3 17m
memcached-memcached-token-gq96p kubernetes.io/service-account-token 3 13m
pvc-ceph-client-key kubernetes.io/rbd 1 17m
rabbitmq-rabbitmq-token-5bj85 kubernetes.io/service-account-token 3 14m
rabbitmq-test-token-w4clj kubernetes.io/service-account-token 3 14m
Openstack PV list
ubuntu@node1:~$ kubectl get pv -n openstack
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-348f4c52-a9b8-11e8-bb1d-fa163ec12213 256Mi RWO Delete Bound openstack/rabbitmq-data-rabbitmq-rabbitmq-0 general 15m
pvc-4418c745-a9b8-11e8-bb1d-fa163ec12213 256Mi RWO Delete Bound openstack/rabbitmq-data-rabbitmq-rabbitmq-1 general 14m
pvc-524d4213-a9b8-11e8-bb1d-fa163ec12213 256Mi RWO Delete Bound openstack/rabbitmq-data-rabbitmq-rabbitmq-2 general 14m
pvc-da9c9dd2-a9b7-11e8-bb1d-fa163ec12213 5Gi RWO Delete Bound openstack/mysql-data-mariadb-server-0 general 17m
Openstack endpoints
ubuntu@node1:~$ openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------------------------------------+
| 480cc7360752498e822cbbc7211d213a | RegionOne | keystone | identity | True | internal | http://keystone-api.openstack.svc.cluster.local:5000/v3 |
| 8dfe4e4725b84e51a5eda564dee0960c | RegionOne | keystone | identity | True | public | http://keystone.openstack.svc.cluster.local:80/v3 |
| 9b3526e36307400b9accfc7cc834cf99 | RegionOne | keystone | identity | True | admin | http://keystone.openstack.svc.cluster.local:80/v3 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------------------------------------+
Openstack services
ubuntu@node1:~$ openstack service list
+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 67cc6b945e934246b25d31a9374a64af | keystone | identity |
+----------------------------------+----------+----------+
5) Deploy Ceph for Tenant:¶
Script to update and execute: 030-tenant-ceph.sh
Make following changes to script:
1 Replace occurrence of ceph-fs-uuid.txt
with tenant-ceph-fs-uuid.txt
2 Replace occurrence of ceph.yaml
with tenant-ceph.yaml
3 For tenant Ceph, no need to deploy ceph-provisioners. Update script
to for CHART in ceph-mon ceph-osd ceph-client; do
Update script’s override section with following:
endpoints:
identity:
namespace: openstack
object_store:
namespace: openstack
ceph_mon:
namespace: tenant-ceph
port:
mon:
default: 6790
ceph_mgr:
namespace: tenant-ceph
port:
mgr:
default: 7001
metrics:
default: 9284
network:
public: ${CEPH_PUBLIC_NETWORK}
cluster: ${CEPH_CLUSTER_NETWORK}
deployment:
storage_secrets: true
ceph: true
rbd_provisioner: false
csi_rbd_provisioner: false
cephfs_provisioner: false
client_secrets: false
labels:
mon:
node_selector_key: ceph-mon-tenant
osd:
node_selector_key: ceph-osd-tenant
rgw:
node_selector_key: ceph-rgw-tenant
mgr:
node_selector_key: ceph-mgr-tenant
job:
node_selector_key: tenant-ceph-control-plane
storageclass:
rbd:
ceph_configmap_name: tenant-ceph-etc
provision_storage_class: false
name: tenant-rbd
admin_secret_name: pvc-tenant-ceph-conf-combined-storageclass
admin_secret_namespace: tenant-ceph
user_secret_name: pvc-tenant-ceph-client-key
cephfs:
provision_storage_class: false
name: cephfs
user_secret_name: pvc-tenant-ceph-cephfs-client-key
admin_secret_name: pvc-tenant-ceph-conf-combined-storageclass
admin_secret_namespace: tenant-ceph
bootstrap:
enabled: true
manifests:
deployment_mds: false
ceph_mgr_modules_config:
prometheus:
server_port: 9284
monitoring:
prometheus:
enabled: true
ceph_mgr:
port: 9284
conf:
ceph:
global:
fsid: ${CEPH_FS_ID}
rgw_ks:
enabled: true
pool:
crush:
tunables: ${CRUSH_TUNABLES}
target:
osd: 3
pg_per_osd: 100
storage:
osd:
- data:
type: directory
location: /var/lib/openstack-helm/tenant-ceph/osd/osd-one
journal:
type: directory
location: /var/lib/openstack-helm/tenant-ceph/osd/journal-one
mon:
directory: /var/lib/openstack-helm/tenant-ceph/mon
Note
Port numbers for Ceph_Mon and Ceph_Mgr are different from default.
We are disabling rbd and cephfs provisioners.
Labels for mon, osd, rgw, mgr and job have been updated for tenant Ceph.
Under storageclass section, values for following have been updated: ceph_configmap_name, admin_secret_name, admin_secret_namespace, user_secret_name
Under storage: mon directory have been updated.
For Tenant Ceph, we will not be provisioning storage classes therefor, update script to not install ceph-provisioners chart as following.
for CHART in ceph-mon ceph-osd ceph-client; do
Execute script.
6) Enable Openstack namespace to use Tenant Ceph:¶
Script to update and execute: 040-tenant-ceph-ns-activate.sh
Update script as following:
...
tee /tmp/tenant-ceph-openstack-config.yaml <<EOF
endpoints:
identity:
namespace: openstack
object_store:
namespace: openstack
ceph_mon:
namespace: tenant-ceph
port:
mon:
default: 6790
network:
public: ${CEPH_PUBLIC_NETWORK}
cluster: ${CEPH_CLUSTER_NETWORK}
deployment:
storage_secrets: false
ceph: false
rbd_provisioner: false
csi_rbd_provisioner: false
cephfs_provisioner: false
client_secrets: true
bootstrap:
enabled: false
conf:
rgw_ks:
enabled: true
storageclass:
rbd:
ceph_configmap_name: tenant-ceph-etc
provision_storage_class: false
name: tenant-rbd
admin_secret_name: pvc-tenant-ceph-conf-combined-storageclass
admin_secret_namespace: tenant-ceph
user_secret_name: pvc-tenant-ceph-client-key
cephfs:
provision_storage_class: false
name: cephfs
admin_secret_name: pvc-tenant-ceph-conf-combined-storageclass
admin_secret_namespace: tenant-ceph
user_secret_name: pvc-tenant-ceph-cephfs-client-key
EOF
helm upgrade --install tenant-ceph-openstack-config ./ceph-provisioners \
--namespace=openstack \
--values=/tmp/tenant-ceph-openstack-config.yaml \
${OSH_EXTRA_HELM_ARGS} \
${OSH_EXTRA_HELM_ARGS_CEPH_NS_ACTIVATE}
#NOTE: Wait for deploy
./tools/deployment/common/wait-for-pods.sh openstack
#NOTE: Validate Deployment info
helm status tenant-ceph-openstack-config
Execute script.
7) Tenant Ceph: Deploy Rados Gateway:¶
Script to update: 090-tenant-ceph-radosgateway.sh
Update script with following overrides:
tee /tmp/tenant-radosgw-openstack.yaml <<EOF
endpoints:
identity:
namespace: openstack
object_store:
namespace: openstack
ceph_mon:
namespace: tenant-ceph
port:
mon:
default: 6790
network:
public: ${CEPH_PUBLIC_NETWORK}
cluster: ${CEPH_CLUSTER_NETWORK}
deployment:
storage_secrets: false
ceph: true
rbd_provisioner: false
csi_rbd_provisioner: false
cephfs_provisioner: false
client_secrets: false
bootstrap:
enabled: false
conf:
rgw_ks:
enabled: true
secrets:
keyrings:
admin: pvc-tenant-ceph-client-key
rgw: os-ceph-bootstrap-rgw-keyring
identity:
admin: ceph-keystone-admin
swift: ceph-keystone-user
user_rgw: ceph-keystone-user-rgw
ceph_client:
configmap: tenant-ceph-etc
EOF
helm upgrade --install tenant-radosgw-openstack ./ceph-rgw \
--namespace=openstack \
--values=/tmp/tenant-radosgw-openstack.yaml \
${OSH_EXTRA_HELM_ARGS} \
${OSH_EXTRA_HELM_ARGS_HEAT}
#NOTE: Wait for deploy
./tools/deployment/common/wait-for-pods.sh openstack
#NOTE: Validate Deployment info
helm status tenant-radosgw-openstack
Execute script
+ openstack service list
+----------------------------------+----------+--------------+
| ID | Name | Type |
+----------------------------------+----------+--------------+
| 0eddeb6af4fd43ea8f73f63a1ae01438 | swift | object-store |
| 67cc6b945e934246b25d31a9374a64af | keystone | identity |
+----------------------------------+----------+--------------+
ubuntu@node1: openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------------+
| 265212a5856e4a0aba8eb294508279c7 | RegionOne | swift | object-store | True | admin | http://ceph-rgw.openstack.svc.cluster.local:8088/swift/v1/KEY_$(tenant_id)s |
| 430174e280444598b676d503c5ed9799 | RegionOne | swift | object-store | True | internal | http://ceph-rgw.openstack.svc.cluster.local:8088/swift/v1/KEY_$(tenant_id)s |
| 480cc7360752498e822cbbc7211d213a | RegionOne | keystone | identity | True | internal | http://keystone-api.openstack.svc.cluster.local:5000/v3 |
| 8dfe4e4725b84e51a5eda564dee0960c | RegionOne | keystone | identity | True | public | http://keystone.openstack.svc.cluster.local:80/v3 |
| 948552a0d90940f7944f8c2eba7ef462 | RegionOne | swift | object-store | True | public | http://radosgw.openstack.svc.cluster.local:80/swift/v1/KEY_$(tenant_id)s |
| 9b3526e36307400b9accfc7cc834cf99 | RegionOne | keystone | identity | True | admin | http://keystone.openstack.svc.cluster.local:80/v3 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------------+
Results from Step 5, 6, 7:¶
Storage on node1, node2, node3:
ubuntu@node1:~$ ls -l /var/lib/openstack-helm/
total 8
drwxr-xr-x 4 root root 4096 Aug 27 04:57 ceph
drwxr-xr-x 3 root root 4096 Aug 27 05:47 tenant-ceph
Storage on node4, node5, node6:
ubuntu@node6:~$ ls -l /var/lib/openstack-helm/
total 4
drwxr-xr-x 3 root root 4096 Aug 27 05:49 tenant-ceph
Ceph Status
ubuntu@node1: kubectl exec -n tenant-ceph ceph-mon-2g6km -- ceph -s
cluster:
id: 38339a5a-d976-49dd-88a0-2ac092c271c7
health: HEALTH_OK
services:
mon: 3 daemons, quorum node3,node2,node1
mgr: node2(active), standbys: node1
osd: 3 osds: 3 up, 3 in
rgw: 2 daemons active
data:
pools: 18 pools, 93 pgs
objects: 193 objects, 37421 bytes
usage: 33394 MB used, 199 GB / 232 GB avail
pgs: 93 active+clean
ubuntu@node1: kubectl get cm -n openstack
NAME DATA AGE
ceph-etc 1 2h
ceph-openstack-config-ceph-prov-bin-clients 2 2h
ceph-rgw-bin 5 3m
ceph-rgw-bin-ks 3 3m
ceph-rgw-etc 1 3m
tenant-ceph-etc 1 1h
tenant-ceph-openstack-config-ceph-prov-bin-clients 2 1h
tenant-radosgw-openstack-ceph-templates 1 3m
...
ubuntu@node1: kubectl get cm -n openstack ceph-rgw-etc -o yaml
apiVersion: v1
data:
ceph.conf: |
[global]
cephx = true
cephx_cluster_require_signatures = true
cephx_require_signatures = false
cephx_service_require_signatures = false
mon_addr = :6790
mon_host = ceph-mon.tenant-ceph.svc.cluster.local:6790
[osd]
cluster_network = 10.0.0.0/24
ms_bind_port_max = 7100
ms_bind_port_min = 6800
osd_max_object_name_len = 256
osd_mkfs_options_xfs = -f -i size=2048
osd_mkfs_type = xfs
public_network = 10.0.0.0/24
kind: ConfigMap
metadata:
creationTimestamp: 2018-08-27T07:47:59Z
name: ceph-rgw-etc
namespace: openstack
resourceVersion: "30058"
selfLink: /api/v1/namespaces/openstack/configmaps/ceph-rgw-etc
uid: 848df05c-a9cd-11e8-bb1d-fa163ec12213
Note
mon_addr and mon_host have non default mon port 6790.
ubuntu@node1: kubectl get secrets -n openstack
NAME TYPE DATA AGE
ceph-keystone-admin Opaque 8 4m
ceph-keystone-user Opaque 8 4m
ceph-keystone-user-rgw Opaque 8 4m
ceph-ks-endpoints-token-crnrr kubernetes.io/service-account-token 3 4m
ceph-ks-service-token-9bnr8 kubernetes.io/service-account-token 3 4m
ceph-openstack-config-ceph-ns-key-cleaner-token-jj7n6 kubernetes.io/service-account-token 3 2h
ceph-openstack-config-ceph-ns-key-generator-token-5sqfw kubernetes.io/service-account-token 3 2h
ceph-rgw-storage-init-token-mhqdw kubernetes.io/service-account-token 3 4m
ceph-rgw-token-9s6nd kubernetes.io/service-account-token 3 4m
os-ceph-bootstrap-rgw-keyring Opaque 1 36m
pvc-ceph-client-key kubernetes.io/rbd 1 2h
pvc-tenant-ceph-client-key kubernetes.io/rbd 1 1h
swift-ks-user-token-9slvc kubernetes.io/service-account-token 3 4m
tenant-ceph-openstack-config-ceph-ns-key-cleaner-token-r6v9v kubernetes.io/service-account-token 3 1h
tenant-ceph-openstack-config-ceph-ns-key-generator-token-dt472 kubernetes.io/service-account-token 3 1h
...
ubuntu@node1: kubectl get svc -n tenant-ceph
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ceph-mgr ClusterIP 10.107.183.4 <none> 7001/TCP,9284/TCP 2h
ceph-mon ClusterIP None <none> 6790/TCP 2h
ceph-mon-discovery ClusterIP None <none> 6790/TCP 2h
ingress ClusterIP 10.109.105.140 <none> 80/TCP,443/TCP 3h
ingress-error-pages ClusterIP None <none> 80/TCP 3h
ingress-exporter ClusterIP 10.102.110.153 <none> 10254/TCP 3h
ubuntu@node1: kubectl get endpoints -n tenant-ceph
NAME ENDPOINTS AGE
ceph-mgr 10.0.0.12:9284,10.0.0.16:9284,10.0.0.12:7001 + 1 more... 2h
ceph-mon 10.0.0.12:6790,10.0.0.16:6790,10.0.0.9:6790 2h
ceph-mon-discovery 10.0.0.12:6790,10.0.0.16:6790,10.0.0.9:6790 2h
ingress 192.168.2.7:80,192.168.5.14:80,192.168.2.7:443 + 1 more... 3h
ingress-error-pages 192.168.2.8:8080,192.168.5.13:8080 3h
ingress-exporter 192.168.2.7:10254,192.168.5.14:10254 3h
ubuntu@node1: kubectl get endpoints -n openstack
NAME ENDPOINTS AGE
ceph-rgw 192.168.2.42:8088,192.168.5.44:8088 20m
ingress 192.168.2.4:80,192.168.5.5:80,192.168.2.4:443 + 1 more... 3h
ingress-error-pages 192.168.2.3:8080,192.168.5.6:8080 3h
ingress-exporter 192.168.2.4:10254,192.168.5.5:10254 3h
keystone 192.168.2.4:80,192.168.5.5:80,192.168.2.4:443 + 1 more... 2h
keystone-api 192.168.2.21:5000,192.168.5.24:5000 2h
mariadb 192.168.2.17:3306 2h
mariadb-discovery 192.168.5.22:4567,192.168.5.22:3306 2h
mariadb-ingress-error-pages 192.168.5.20:8080 2h
mariadb-server 192.168.5.22:3306 2h
memcached 192.168.2.19:11211 2h
rabbitmq 192.168.0.196:15672,192.168.2.18:15672,192.168.5.23:15672 + 6 more... 2h
rabbitmq-dsv-7b1733 192.168.0.196:15672,192.168.2.18:15672,192.168.5.23:15672 + 6 more... 2h
rabbitmq-mgr-7b1733 192.168.2.4:80,192.168.5.5:80,192.168.2.4:443 + 1 more... 2h
radosgw 192.168.2.4:80,192.168.5.5:80,192.168.2.4:443 + 1 more... 20m
ubuntu@node1: kubectl get svc -n openstack
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ceph-rgw ClusterIP 10.102.173.130 <none> 8088/TCP 20m
ingress ClusterIP 10.102.1.71 <none> 80/TCP,443/TCP 3h
ingress-error-pages ClusterIP None <none> 80/TCP 3h
ingress-exporter ClusterIP 10.105.29.29 <none> 10254/TCP 3h
keystone ClusterIP 10.108.94.108 <none> 80/TCP,443/TCP 2h
keystone-api ClusterIP 10.99.50.35 <none> 5000/TCP 2h
mariadb ClusterIP 10.111.140.93 <none> 3306/TCP 2h
mariadb-discovery ClusterIP None <none> 3306/TCP,4567/TCP 2h
mariadb-ingress-error-pages ClusterIP None <none> 80/TCP 2h
mariadb-server ClusterIP 10.101.237.241 <none> 3306/TCP 2h
memcached ClusterIP 10.111.175.130 <none> 11211/TCP 2h
rabbitmq ClusterIP 10.96.78.137 <none> 5672/TCP,25672/TCP,15672/TCP 2h
rabbitmq-dsv-7b1733 ClusterIP None <none> 5672/TCP,25672/TCP,15672/TCP 2h
rabbitmq-mgr-7b1733 ClusterIP 10.104.105.46 <none> 80/TCP,443/TCP 2h
radosgw ClusterIP 10.101.237.167 <none> 80/TCP,443/TCP 20m
ubuntu@node1: kubectl get storageclasses
NAME PROVISIONER AGE
general ceph.com/rbd 1h
8) Deploy Glance:¶
Script to update and execute: 100-glance.sh
Update script overrides as following:
endpoints:
object_store:
namespace: tenant-ceph
ceph_object_store:
namespace: tenant-ceph
ceph_client:
configmap: tenant-ceph-etc
user_secret_name: tenant-pvc-ceph-client-key
ubuntu@node1: openstack service list
+----------------------------------+----------+--------------+
| ID | Name | Type |
+----------------------------------+----------+--------------+
| 0eddeb6af4fd43ea8f73f63a1ae01438 | swift | object-store |
| 67cc6b945e934246b25d31a9374a64af | keystone | identity |
| 81a61ec8eff74070bb3c2f0118c1bcd5 | glance | image |
+----------------------------------+----------+--------------+
ubuntu@node1: openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------------+
| 265212a5856e4a0aba8eb294508279c7 | RegionOne | swift | object-store | True | admin | http://ceph-rgw.openstack.svc.cluster.local:8088/swift/v1/KEY_$(tenant_id)s |
| 3fd88bc6e4774ff78c94bfa8aaaec3cf | RegionOne | glance | image | True | admin | http://glance-api.openstack.svc.cluster.local:9292/ |
| 430174e280444598b676d503c5ed9799 | RegionOne | swift | object-store | True | internal | http://ceph-rgw.openstack.svc.cluster.local:8088/swift/v1/KEY_$(tenant_id)s |
| 47505d5186ab448e9213f67bc833d2f1 | RegionOne | glance | image | True | public | http://glance.openstack.svc.cluster.local:80/ |
| 480cc7360752498e822cbbc7211d213a | RegionOne | keystone | identity | True | internal | http://keystone-api.openstack.svc.cluster.local:5000/v3 |
| 8dfe4e4725b84e51a5eda564dee0960c | RegionOne | keystone | identity | True | public | http://keystone.openstack.svc.cluster.local:80/v3 |
| 937c2eacce8b4159bf918f4005c2b0ab | RegionOne | glance | image | True | internal | http://glance-api.openstack.svc.cluster.local:9292/ |
| 948552a0d90940f7944f8c2eba7ef462 | RegionOne | swift | object-store | True | public | http://radosgw.openstack.svc.cluster.local:80/swift/v1/KEY_$(tenant_id)s |
| 9b3526e36307400b9accfc7cc834cf99 | RegionOne | keystone | identity | True | admin | http://keystone.openstack.svc.cluster.local:80/v3 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------------------------------------------------------+
Note
Above output shows http://ceph-rgw.openstack.svc.cluster.local
which shows
that swift is pointing to tenant-ceph.
9) Deploy Cinder:¶
Script to update and execute: 110-cinder.sh
Update script overrides as following:
backup:
posix:
volume:
class_name: rbd-tenant
ceph_client:
configmap: tenant-ceph-etc
user_secret_name: pvc-tenant-ceph-client-key
+ OS_CLOUD=openstack_helm
+ openstack service list
+----------------------------------+----------+--------------+
| ID | Name | Type |
+----------------------------------+----------+--------------+
| 0eddeb6af4fd43ea8f73f63a1ae01438 | swift | object-store |
| 66bd0179eada4ab8899a58356fd4d508 | cinder | volume |
| 67cc6b945e934246b25d31a9374a64af | keystone | identity |
| 81a61ec8eff74070bb3c2f0118c1bcd5 | glance | image |
| c126046fc5ec4c52acfc8fee0e2f4dda | cinderv2 | volumev2 |
| f89b99a31a124b7790e3bb60387380b1 | cinderv3 | volumev3 |
+----------------------------------+----------+--------------+
+ sleep 30
+ openstack volume type list
+--------------------------------------+------+-----------+
| ID | Name | Is Public |
+--------------------------------------+------+-----------+
| d1734540-38e7-4ef8-b74d-36a2c71df8e5 | rbd1 | True |
+--------------------------------------+------+-----------+
+ helm test cinder --timeout 900
RUNNING: cinder-test
PASSED: cinder-test
ubuntu@node1: kubectl exec -n tenant-ceph ceph-mon-2g6km -- ceph osd lspools
1 rbd,2 cephfs_metadata,3 cephfs_data,4 .rgw.root,5 default.rgw.control,
6 default.rgw.data.root,7 default.rgw.gc,8 default.rgw.log,
9 default.rgw.intent-log,10 default.rgw.meta,
11 default.rgw.usage,12 default.rgw.users.keys,
13 default.rgw.users.email,14 default.rgw.users.swift,
15 default.rgw.users.uid,16 default.rgw.buckets.extra,
17 default.rgw.buckets.index,18 default.rgw.buckets.data,
19 cinder.volumes,
Note
Above output shows that tenant ceph now has 19 pools including one for Cinder.
ubuntu@node1: kubectl exec -n tenant-ceph ceph-mon-2g6km -- ceph -s
cluster:
id: 38339a5a-d976-49dd-88a0-2ac092c271c7
health: HEALTH_OK
services:
mon: 3 daemons, quorum node3,node2,node1
mgr: node2(active), standbys: node1
osd: 3 osds: 3 up, 3 in
rgw: 2 daemons active
data:
pools: 19 pools, 101 pgs
objects: 233 objects, 52644 bytes
usage: 33404 MB used, 199 GB / 232 GB avail
pgs: 101 active+clean
io:
client: 27544 B/s rd, 0 B/s wr, 26 op/s rd, 17 op/s wr