
I improved the cinder chapter of the installation guide as follows: 1) Renamed storage node files, titles, and XML IDs to conform with standards. 2) Rewrote introductory content to increase depth. 3) Clarified requirements for controller and storage nodes. 4) Added steps to configure storage node operating system prior to installing the volume service. 5) Rewrote LVM filter content because the original content was vague and confusing. 6) Added more command output. 7) Added 'cinder list' command to verify section. I eventually want to restructure the architecture and basic environment content to integrate organization and configuration of optional nodes. Adding steps to configure the storage node operating in this chapter temporarily fills a void. Change-Id: Iaa404ee7b3fcbc0a14450cab6ae378f698890d7d Implements: blueprint installation-guide-improvements
287 lines
14 KiB
XML
287 lines
14 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<section xmlns="http://docbook.org/ns/docbook"
|
|
xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
version="5.0"
|
|
xml:id="cinder-install-controller-node">
|
|
<title>Install and configure controller node</title>
|
|
<para>This section describes how to install and configure the Block
|
|
Storage service, code-named cinder, on the controller node. This
|
|
service requires at least one additional storage node that provides
|
|
volumes to instances.</para>
|
|
<procedure os="ubuntu;rhel;centos;fedora;sles;opensuse">
|
|
<title>To configure prerequisites</title>
|
|
<para>Before you install and configure the Block Storage service, you must
|
|
create a database and Identity service credentials including
|
|
endpoints.</para>
|
|
<step>
|
|
<para>To create the database, complete these steps:</para>
|
|
<substeps>
|
|
<step>
|
|
<para>Use the database access client to connect to the database
|
|
server as the <literal>root</literal> user:</para>
|
|
<screen><prompt>$</prompt> <userinput>mysql -u root -p</userinput></screen>
|
|
</step>
|
|
<step>
|
|
<para>Create the <literal>cinder</literal> database:</para>
|
|
<screen><userinput>CREATE DATABASE cinder;</userinput></screen>
|
|
</step>
|
|
<step>
|
|
<para>Grant proper access to the <literal>cinder</literal>
|
|
database:</para>
|
|
<screen><userinput>GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
|
|
IDENTIFIED BY '<replaceable>CINDER_DBPASS</replaceable>';</userinput>
|
|
<userinput>GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
|
|
IDENTIFIED BY '<replaceable>CINDER_DBPASS</replaceable>';</userinput></screen>
|
|
<para>Replace <replaceable>CINDER_DBPASS</replaceable> with
|
|
a suitable password.</para>
|
|
</step>
|
|
<step>
|
|
<para>Exit the database access client.</para>
|
|
</step>
|
|
</substeps>
|
|
</step>
|
|
<step>
|
|
<para>Source the <literal>admin</literal> credentials to gain access to
|
|
admin-only CLI commands:</para>
|
|
<screen><prompt>$</prompt> <userinput>source admin-openrc.sh</userinput></screen>
|
|
</step>
|
|
<step>
|
|
<para>To create the Identity service credentials, complete these
|
|
steps:</para>
|
|
<substeps>
|
|
<step>
|
|
<para>Create a <literal>cinder</literal> user:</para>
|
|
<screen><prompt>$</prompt> <userinput>keystone user-create --name cinder --pass <replaceable>CINDER_PASS</replaceable></userinput>
|
|
<computeroutput>+----------+----------------------------------+
|
|
| Property | Value |
|
|
+----------+----------------------------------+
|
|
| email | |
|
|
| enabled | True |
|
|
| id | 881ab2de4f7941e79504a759a83308be |
|
|
| name | cinder |
|
|
| username | cinder |
|
|
+----------+----------------------------------+</computeroutput></screen>
|
|
<para>Replace <replaceable>CINDER_PASS</replaceable> with a suitable
|
|
password.</para>
|
|
</step>
|
|
<step>
|
|
<para>Link the <literal>cinder</literal> user to the
|
|
<literal>service</literal> tenant and <literal>admin</literal>
|
|
role:</para>
|
|
<screen><prompt>$</prompt> <userinput>keystone user-role-add --user cinder --tenant service --role admin</userinput></screen>
|
|
<note>
|
|
<para>This command provides no output.</para>
|
|
</note>
|
|
</step>
|
|
<step>
|
|
<para>Create the <literal>cinder</literal> services:</para>
|
|
<screen><prompt>$</prompt> <userinput>keystone service-create --name cinder --type volume \
|
|
--description "OpenStack Block Storage"</userinput>
|
|
<computeroutput>+-------------+----------------------------------+
|
|
| Property | Value |
|
|
+-------------+----------------------------------+
|
|
| description | OpenStack Block Storage |
|
|
| enabled | True |
|
|
| id | 1e494c3e22a24baaafcaf777d4d467eb |
|
|
| name | cinder |
|
|
| type | volume |
|
|
+-------------+----------------------------------+</computeroutput>
|
|
<prompt>$</prompt> <userinput>keystone service-create --name cinderv2 --type volumev2 \
|
|
--description "OpenStack Block Storage"</userinput>
|
|
<computeroutput>+-------------+----------------------------------+
|
|
| Property | Value |
|
|
+-------------+----------------------------------+
|
|
| description | OpenStack Block Storage |
|
|
| enabled | True |
|
|
| id | 16e038e449c94b40868277f1d801edb5 |
|
|
| name | cinderv2 |
|
|
| type | volumev2 |
|
|
+-------------+----------------------------------+</computeroutput></screen>
|
|
<note>
|
|
<para>The Block Storage service requires two different services
|
|
to support API versions 1 and 2.</para>
|
|
</note>
|
|
</step>
|
|
<step>
|
|
<para>Create the Block Storage service endpoints:</para>
|
|
<screen><prompt>$</prompt> <userinput>keystone endpoint-create \
|
|
--service-id $(keystone service-list | awk '/ volume / {print $2}') \
|
|
--publicurl http://<replaceable>controller</replaceable>:8776/v1/%\(tenant_id\)s \
|
|
--internalurl http://<replaceable>controller</replaceable>:8776/v1/%\(tenant_id\)s \
|
|
--adminurl http://<replaceable>controller</replaceable>:8776/v1/%\(tenant_id\)s \
|
|
--region regionOne</userinput>
|
|
<computeroutput>+-------------+-----------------------------------------+
|
|
| Property | Value |
|
|
+-------------+-----------------------------------------+
|
|
| adminurl | http://controller:8776/v1/%(tenant_id)s |
|
|
| id | d1b7291a2d794e26963b322c7f2a55a4 |
|
|
| internalurl | http://controller:8776/v1/%(tenant_id)s |
|
|
| publicurl | http://controller:8776/v1/%(tenant_id)s |
|
|
| region | regionOne |
|
|
| service_id | 1e494c3e22a24baaafcaf777d4d467eb |
|
|
+-------------+-----------------------------------------+</computeroutput>
|
|
<prompt>$</prompt> <userinput>keystone endpoint-create \
|
|
--service-id $(keystone service-list | awk '/ volumev2 / {print $2}') \
|
|
--publicurl http://<replaceable>controller</replaceable>:8776/v2/%\(tenant_id\)s \
|
|
--internalurl http://<replaceable>controller</replaceable>:8776/v2/%\(tenant_id\)s \
|
|
--adminurl http://<replaceable>controller</replaceable>:8776/v2/%\(tenant_id\)s \
|
|
--region regionOne</userinput>
|
|
<computeroutput>+-------------+-----------------------------------------+
|
|
| Property | Value |
|
|
+-------------+-----------------------------------------+
|
|
| adminurl | http://controller:8776/v2/%(tenant_id)s |
|
|
| id | 097b4a6fc8ba44b4b10d4822d2d9e076 |
|
|
| internalurl | http://controller:8776/v2/%(tenant_id)s |
|
|
| publicurl | http://controller:8776/v2/%(tenant_id)s |
|
|
| region | regionOne |
|
|
| service_id | 16e038e449c94b40868277f1d801edb5 |
|
|
+-------------+-----------------------------------------+</computeroutput></screen>
|
|
<note>
|
|
<para>The Block Storage service requires two different endpoints
|
|
to support API versions 1 and 2.</para>
|
|
</note>
|
|
</step>
|
|
</substeps>
|
|
</step>
|
|
</procedure>
|
|
<procedure os="ubuntu;rhel;centos;fedora;sles;opensuse">
|
|
<title>To install and configure Block Storage controller components</title>
|
|
<step>
|
|
<para>Install the packages:</para>
|
|
<screen os="ubuntu"><prompt>#</prompt> <userinput>apt-get install cinder-api cinder-scheduler python-cinderclient</userinput></screen>
|
|
<screen os="rhel;centos;fedora"><prompt>#</prompt> <userinput>yum install openstack-cinder python-cinderclient python-oslo-db</userinput></screen>
|
|
<screen os="sles;opensuse"><prompt>#</prompt> <userinput>zypper install openstack-cinder-api openstack-cinder-scheduler python-cinderclient</userinput></screen>
|
|
</step>
|
|
<step>
|
|
<para>Edit the <filename>/etc/cinder/cinder.conf</filename> file and
|
|
complete the following actions:</para>
|
|
<substeps>
|
|
<step>
|
|
<para>In the <literal>[database]</literal> section, configure
|
|
database access:</para>
|
|
<programlisting language="ini">[database]
|
|
...
|
|
connection = mysql://cinder:<replaceable>CINDER_DBPASS</replaceable>@controller/cinder</programlisting>
|
|
<para>Replace <replaceable>CINDER_DBPASS</replaceable> with the
|
|
password you chose for the Block Storage database.</para>
|
|
</step>
|
|
<step>
|
|
<para>In the <literal>[DEFAULT]</literal> section, configure
|
|
<application>RabbitMQ</application> message broker access:</para>
|
|
<programlisting language="ini">[DEFAULT]
|
|
...
|
|
rpc_backend = rabbit
|
|
rabbit_host = <replaceable>controller</replaceable>
|
|
rabbit_password = <replaceable>RABBIT_PASS</replaceable></programlisting>
|
|
<para>Replace <replaceable>RABBIT_PASS</replaceable> with the
|
|
password you chose for the <literal>guest</literal> account in
|
|
<application>RabbitMQ</application>.</para>
|
|
</step>
|
|
<step>
|
|
<para>In the <literal>[DEFAULT]</literal> and
|
|
<literal>[keystone_authtoken]</literal> sections,
|
|
configure Identity service access:</para>
|
|
<programlisting language="ini">[DEFAULT]
|
|
...
|
|
auth_strategy = keystone
|
|
|
|
[keystone_authtoken]
|
|
...
|
|
auth_uri = http://<replaceable>controller</replaceable>:5000/v2.0
|
|
identity_uri = http://<replaceable>controller</replaceable>:35357
|
|
admin_tenant_name = service
|
|
admin_user = cinder
|
|
admin_password = <replaceable>CINDER_PASS</replaceable></programlisting>
|
|
<para>Replace <replaceable>CINDER_PASS</replaceable> with the
|
|
password you chose for the <literal>cinder</literal> user in the
|
|
Identity service.</para>
|
|
<note>
|
|
<para>Comment out any <literal>auth_host</literal>,
|
|
<literal>auth_port</literal>, and
|
|
<literal>auth_protocol</literal> options because the
|
|
<literal>identity_uri</literal> option replaces them.</para>
|
|
</note>
|
|
</step>
|
|
<step>
|
|
<para>In the <literal>[DEFAULT]</literal> section, configure the
|
|
<literal>my_ip</literal> option to use the management interface IP
|
|
address of the controller node:</para>
|
|
<programlisting language="ini">[DEFAULT]
|
|
...
|
|
my_ip = 10.0.0.11</programlisting>
|
|
</step>
|
|
<step>
|
|
<para>(Optional) To assist with troubleshooting,
|
|
enable verbose logging in the <literal>[DEFAULT]</literal>
|
|
section:</para>
|
|
<programlisting language="ini">[DEFAULT]
|
|
...
|
|
verbose = True</programlisting>
|
|
</step>
|
|
</substeps>
|
|
</step>
|
|
<step>
|
|
<para>Populate the Block Storage database:</para>
|
|
<screen><prompt>#</prompt> <userinput>su -s /bin/sh -c "cinder-manage db sync" cinder</userinput></screen>
|
|
</step>
|
|
<step os="ubuntu">
|
|
<para>Due to a packaging bug, the Block Storage service cannot
|
|
execute commands with administrative privileges using the
|
|
<command>sudo</command> command. Run the following command to
|
|
resolve this issue:</para>
|
|
<screen><prompt>#</prompt> <userinput>cp /etc/sudoers.d/cinder_sudoers /etc/sudoers.d/cinder_sudoers.orig</userinput>
|
|
<prompt>#</prompt> <userinput>sed -i 's,/etc/cinder/rootwrap.conf,/etc/cinder/rootwrap.conf *,g' \
|
|
/etc/sudoers.d/cinder_sudoers</userinput></screen>
|
|
<para>For more information, see the
|
|
<link xlink:href="https://bugs.launchpad.net/ubuntu/+source/cinder/+bug/1380425"
|
|
>bug report</link>.</para>
|
|
</step>
|
|
</procedure>
|
|
<procedure os="debian">
|
|
<title>To install and configure Block Storage controller components</title>
|
|
<step>
|
|
<para>Install the packages:</para>
|
|
<screen><prompt>#</prompt> <userinput>apt-get install cinder-api cinder-scheduler python-cinderclient</userinput></screen>
|
|
</step>
|
|
<step>
|
|
<para>Respond to the prompts for
|
|
<link linkend="debconf-dbconfig-common">database management</link>,
|
|
<link linkend="debconf-keystone_authtoken">Identity service
|
|
credentials</link>,
|
|
<link linkend="debconf-api-endpoints">service endpoint
|
|
registration</link>, and
|
|
<link linkend="debconf-rabbitmq">message broker
|
|
credentials</link>.</para>
|
|
</step>
|
|
</procedure>
|
|
<procedure>
|
|
<title>To finalize installation</title>
|
|
<step os="ubuntu;debian">
|
|
<para>Restart the Block Storage services:</para>
|
|
<screen><prompt>#</prompt> <userinput>service cinder-scheduler restart</userinput>
|
|
<prompt>#</prompt> <userinput>service cinder-api restart</userinput></screen>
|
|
</step>
|
|
<step os="rhel;centos;fedora;sles;opensuse">
|
|
<para>Start the Block Storage services and configure them to start when
|
|
the system boots:</para>
|
|
<screen os="rhel;centos;fedora"><prompt>#</prompt> <userinput>systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service</userinput>
|
|
<prompt>#</prompt> <userinput>systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service</userinput></screen>
|
|
<para os="sles">On SLES:</para>
|
|
<screen os="sles"><prompt>#</prompt> <userinput>service openstack-cinder-api start</userinput>
|
|
<prompt>#</prompt> <userinput>service openstack-cinder-scheduler start</userinput>
|
|
<prompt>#</prompt> <userinput>chkconfig openstack-cinder-api on</userinput>
|
|
<prompt>#</prompt> <userinput>chkconfig openstack-cinder-scheduler on</userinput></screen>
|
|
<para os="opensuse">On openSUSE:</para>
|
|
<screen os="opensuse"><prompt>#</prompt> <userinput>systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service</userinput>
|
|
<prompt>#</prompt> <userinput>systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service</userinput></screen>
|
|
</step>
|
|
<step os="ubuntu">
|
|
<para>By default, the Ubuntu packages create an SQLite database.</para>
|
|
<para>Because this configuration uses a SQL database server, you can
|
|
remove the SQLite database file:</para>
|
|
<screen><prompt>#</prompt> <userinput>rm -f /var/lib/cinder/cinder.sqlite</userinput></screen>
|
|
</step>
|
|
</procedure>
|
|
</section>
|