Hướng dẫn cài đặt OpenStack IceHouse 3 nodes với Neutron GRE tunnel

Nguồn: http://docs.openstack.org/icehouse/install-guide/install/apt/content/

1. Chuẩn bị

  • IP
 LVS/NATLVS/TUNLVS/DR
ServerAnyTunnelingNon-app
Server GatewayLoad BalancerOwn RouterOwn Router
Server NetworkPrivateLAN/WANLAN
Server Number10-20100100
  • Cấu hình các máy:

i) Controller: 1 CPU, 2GB RAM, 20 GB storage disk 1, 5 GB storage disk 2
ii) Network: 1 CPU, 512MB RAM, 10 GB storage disk
iii) Compute: 1 CPU, 2 GB RAM, 20 GB storage disk

  • Hệ điều hành: Ubuntu 14.04
  • Mật khẩu sử dụng trong mô hình cài đặt. Bạn nên cấu hình lại bằng mật khẩu mạnh hơn.
[table “3” not found /]

2. Cấu hình cơ bản

2.1 Network Time Protocol (NTP)
Cài đặt ntp:
# apt-get install ntp

  • Để cho phép Network và Compute node đồng bộ thời gian với Controller node, sửa file /etc/ntp.conf

Comment các dòng (thêm dấu #)
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

Sửa dòng server ntp.ubuntu.com thành server 10.10.10.11
Lưu thay đổi và khởi động lại dịch vụ NTP

#service ntp restart

2.2 Database
2.2.1 Cài đặt DB tại Controller

#apt-get install python-mysqldb mysql-server

  • Sửa file /etc/mysql/my.cnf:

bind-address = 10.10.10.11

Lưu thay đổi và khởi động lại dịch vụ MySQL
#service mysql restart

Xóa anonymous user, test database, đặt mật khẩu root cho MySQL
#mysql_secure_installation

2.2.2 Cài đặt ở 2 node còn lại
#apt-get install python-mysqldb

2.3 Messaging server ( RabbitMQ)

  • Tại Controller node:

#apt-get install rabbitmq-server

  • Đổi mật khẩu guest user

#rabbitmqctl change_password guest RABBIT_PASS

2.4 Cấu hình file /etc/hosts tại 3 nodes

10.10.10.11  controller
10.10.10.21  network
10.10.10.31  compute

2.5 Cấu hình IP
2.5.1 Controller node

# Management network interface
auto eth0
iface eth0 inet static
address 10.10.10.11
netmask 255.255.255.0

#API network interface
auto eth1
iface eth1 inet static
address 192.168.100.11
netmask 255.255.255.0
gateway 192.168.100.2
dns-nameservers 8.8.8.8

2.5.2 Network node

# Management network interface
auto eth0
iface eth0 inet static
address 10.10.10.21
netmask 255.255.255.0

#Data-Tenant network interface
auto eth1
iface eth1 inet static
address 10.20.20.21
netmask 255.255.255.0

#Public network interface
auto eth2
iface eth2 inet static
address 192.168.100.21
netmask 255.255.255.0
gateway 192.168.100.2
dns-nameservers 8.8.8.8

2.5.3 Compute node

# Management network interface
auto eth0
iface eth0 inet static
address 10.10.10.31
netmask 255.255.255.0

#Data-Tenant network interface
auto eth1
iface eth1 inet static
address 10.20.20.31
netmask 255.255.255.0

#Public network interface  # Dùng để kết nối Internet nhằm cài đặt các gói, sau khi cài đặt hoàn tất nên gỡ bỏ.
auto eth2
iface eth2 inet static
address 192.168.100.31
netmask 255.255.255.0
gateway 192.168.100.2
dns-nameservers 8.8.8.8

3 Identity Service-Keystone

3.1 Cài đặt keystone

  • Cài đặt dịch vụ keystone ở Controller node:

#apt-get install keystone

  • Sửa dòng cấu hình kết nối database trong file /etc/keystone/keystone.conf

#nano /etc/keystone/keystone.conf

connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone

  • Xóa database mặc định của Ubuntu cho keystone

#rm /var/lib/keystone/keystone.db

  • Tạo database trong MySQL cho keystone

#mysql -u root -p

<Nhập mật khẩu root của mysql>

mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> exit

  • Tạo các bảng trong database của keystone

#su -s /bin/sh -c “keystone-manage db_sync” keystone

  • Cấu hình token để bảo mật kết nối giữa dịch vụ Identity và các dịch vụ khác. Sửa file /etc/keystone/keystone.conf và cập nhật dòng:

#nano /etc/keystone/keystone.conf
admin_token = ADMIN_TOKEN

  • Cấu hình thư mục chứa log cho keystone. Sửa file /etc/keystdongfkeystone.conf và cập nhật dòng:

log_dir = /var/log/keystone

  • Khởi động lại dịch vụ keystone

#service keystone restart

3.2 Cài đặt các user, tenant và role

  • Thiết đặt các biến môi trường để chứng thực việc sử dụng lệnh keystone (keystone’s CLI)

#export OS_SERVICE_TOKEN=ADMIN_TOKEN
#export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

  • Tạo user admin

#keystone user-create --name=admin --pass=ADMIN_PASS --email=admin@example.com

  • Tạo admin role

#keystone role-create --name=admin

  • Tạo admin tenant

keystone tenant-create --name=admin --description="Admin Tenant"

  • Liên kết admin user, admin role và admin tenant

#keystone user-role-add --name=admin --tenant=admin --role=admin

  • Liên kết admin user, _member_ role và admin tenant

#keystone user-role-add --user=admin --role=_member_ --tenant=admin

  • Tạo demo user

#keystone user-create --name=demo --pass=DEMO_PASS --email=demo@example.com

  • Tạo demo tenant

#keystone tennant-create --name=demo --description="Demo Tenant"

  • Liên kết demo user, _member_ role và demo tenant

#keystone user-role-add --user=demo --role=_member_ --tenant=demo

  • Các dịch vụ OpenStack yêu cầu một username, tenant và role để truy cập đến các dịch vụ OpenStack. Trong cài đặt cơ bản, các dịch vụ OpenStack chia sẽ một tenant duy nhất tên là service. Tạo service tenant

#keystone tenant-create --name=service --description="Service Tenant"

3.3 Xác định dịch vụ và API endpoint

Để dịch vụ Identity có thể kiểm tra các dịch vụ OpenStack đã được cài đặt và địa chỉ truy cập của chúng trên mạng, bạn phải đăng ký cho mỗi dịch vụ. Để đăng ký một dịch vụ, chạy các lệnh sau:

keystone service-create: định nghĩa dịch vụ

keystone endpoint-create: liên kết API endpoint với dịch vụ

*API endpoint: một tiến trình chạy ẩn (daemon), một công việc (worker), hoặc một dịch vụ mà một client  giao tiếp để truy cập vào một API. API endpoint có thể cung cấp bất kỳ số liệu về một dịch vụ, như chứng thực, dữ liệu sử dụng, số liệu hiệu suất…. Một API endpoint trong OpenStack bao gồm các URLs cho public API, internal API và admin API.

  • Đăng ký dịch vụ Identity.

#keystone service-create --name=keystone --type=identity --description="OpenStack identity"

ID của dịch vụ sẻ được sinh ngẫu nhiên và duy nhất.

  • Tạo API endpoint cho dịch vụ Identity bằng cách sử dụng Identity ID. Lưu ý răng dịch vụ Identity sử dụng một cổng khác cho admin API.

#keystone endpoint-create --service-id=$(keystone service-list | awk '/ identity / {print $2}')
--publicurl=http://192.168.100.11:5000/v2.0
--internalurl=http://controller:5000/v2.0
--adminurl=http://controller:35357/v2.0

  • Tạo file openrc.sh chứa các biến môi trường nhằm chứng thực cho việc sử dụng CLI sau này

export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_TENAT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0

Nhập biến môi trường bằng lệnh:
#source openrc.sh

4. Image Service-Glance

4.1 Cài đặt dịch vụ glance

  • Cài đặt dịch vụ Image trên Controller node

#apt-get install glance python-glanceclient

  • Sửa cấu hình kết nối database ở các file /etc/glance/glance-api.conf và /etc/glance/glance-registry.conf

connection = mysql://glance:GLANCE_DBPASS@controller/glance

  • Mặc định, Ubuntu tạo một SQLite database cho glance. Xóa glance.sqlite file

#rm /var/lib/glance/glance.sqlite

  • Tạo database trong MySQL cho glance

#mysql -u root -p

<Nhập mật khẩu root của MySQL>

mysql> CREATE DATABASE GLANCE;
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_PASS';

  • Tạo các database tables cho dịch vụ Image

su -s /bin/sh -c "glance-manage db_sync" glance

  • Tạo một glance user trong keystone để dịch vụ Image có thể chứng thực với dịch vụ Identity. Sử dụng service tenant và admin role

#keystone user-create --name=glance --pass=GLANCE_PASS --email=glance@example.com
#keystone user-role-add -user=glance --tenant=service --role=admin

  • Cấu hình dịch vụ Image sử dụng dịch vụ Identity để chứng thực. Sửa các file /etc/glance/glance-api.conf và /etc/glance/glance-registry.conf

– Sửa các dòng dưới phần [keystone_authtoken]:
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = GLANCE_PASS

– Sửa flavor dưới phần [paste_deploy]:
[paste_deploy]
flavor = keystone

  • Đăng ký và tạo endpoint cho dịch vụ Image

#keystone service-create --name=glance --type=image --description="OpenStack Image Service"
#keystone endpoint-create --service-id=$(keystone service-list | awk '/ image / {print $2}')
--publicurl=http://192.168.100.11:9292
--internalurl=http://controller:9292
--adminurl=http://controller:9292

  • Khởi động lại dịch vụ glance để cập nhật cấu hình mới

#service glance-registry restart
#service glance-api restart

4.2 Upload file ảnh

  • Tải CirrOS image

#mkdir images
#cd images
#wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img

  • Upload lên dịch vụ Image

#glance --image-create --name="Cirros=0.3.2 64bit" --disk-format=qcow2 --container-format=bare --is-public=true < cirros-0.3.2-x86_64-disk.img

  • Kiểm tra file ảnh CirrOS vừa upload

#glance image-list

5. Compute Service-Nova

5.1 Cài đặt dịch vụ Compute ở Controller node

  • Cài đặt các gói của dịch Compute

#apt-get install nova-api nova-cert nova-conductor nova-consoleauth nova-nonvcproxy nova-scheduler python-novaclient

  • Cấu hình kết nối database trong file /etc/nova/nova.conf

Thêm phần [database] vào cuối file:

[database]
connection = mysql://nova:NOVA_DBPASS@controller/nova

  • Cấu hình RabbitMQ trong file /etc/nova/nova.conf

[DEFAULT]
....
rpc_backend = rabbit
rabbit_host = controller
rabbit_passwod = RABBIT_PASS

  • Cấu hình vnc trong file /etc/nova/nova.conf

[DEFAULT]
....
my_ip = 10.10.10.11
vncserver_listen = 10.10.10.11
vncserver_proxyclient_address = 10.10.10.11

  • Xóa SQLite database mặc định của Ubuntu tạo cho nova

#rm /var/lib/nova/nova.sqlite

  • Tạo database cho nova trong MySQL

#mysql -u root -p

<Nhập mật khẩu root của MySQl>
mysql> CREATE DATABASE nova;
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';

  • Tạo database tables cho nova

#su -s /bin/sh -c "nova-manage db sync" nova

  • Tạo một nova user trong keystone để dịch vụ Compute có thể chứng thực với dịch vụ Identity. Sử dụng service tenant và admin role

#keystone user-create --name=nova --pass=NOVA_PASS --email=nova@example.com
#keystone user-role-add --user=nova --tenant=service --role=admin

  • Cấu hình Compute sử dụng các chứng chỉ của dịch vụ Identity. Cấu hình file /etc/nova/nova.conf

[DEFAULT]
....
auth_strategy = keystone

+ Thêm phần [keystone_authtoken] vào cuối file
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = NOVA_PASS

  • Đăng ký và tạo endpoint cho dịch vụ Compute

#keystone service-create --name=nova --type=compute --description="OpenStack Compute Service"
#keystone endpoint-create --service-id=$(keystone service-list | awk '/ compute / {print $2}')
--publicurl=http://192.168.100.11:8774/v2/%(tenant_id)s
--internalurl=http://controller:8774/v2/%(tenant_id)s
--adminurl=http://controller:8774/v2/%(tenant_id)s

  • Khởi động lại dịch vụ Compute

#service nova-api restart
#service nova-cert restart
#service nova-consoleauth restart
#service nova-scheduler restart
#service nova-conductor restart
#service nova-novncproxy restart

5.2 Cài đặt và cấu hình ở Compute node

  • Cài đặt các gói của dịch vụ Image

#apt-get install nova-compute-kvm python-guestfs

  • Vì các lý do bảo mật, nhân của Linux không có khả năng đọc (readeable) các hypervisor hạn chế như qemu và libguestfs. Để nhân hiện tại có thể đọc, chạy lệnh

#dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-$ (uname -r)

+ Để chắc chắn cấu hình trên sẽ áp dụng với các kernel sẽ update trong tương lai, tạo file /etc/kernel/postinst.d/statoverride chứa các dòng:
#/bin/sh
version="$1"
[ -z "${version}" ] && exit 0
dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-S{version}

+ Cung cấp khả năng thực thi cho file vừa tạo
#chmod +x /etc/kernel/postinst.d/statoverride

  • Cấu hình các dòng sau trong file /etc/nova/nova.conf

[DEFAULT]
...
auth_strategy = keystone
...
[database]
connection = mysql://nova:NOVA_DBPASS@controller/nova
...
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = NOVA_PASS

  • Cấu hình RabbitMQ trong file /etc/nova/nova.conf

[DEFAULT]
....
rpc_backend = rabbit
rabbit_host = controller
rabbit_passwod = RABBIT_PASS

  • Cấu hình vnc trong file /etc/nova/nova.conf

[DEFAULT]
....
my_ip = 10.10.10.31
vnc_enable = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 10.10.10.31
novncproxy_base_url = http://controller:6080/vnc_auto.html

  • Xác định host chạy dịch vụ Image trong file /etc/nova/nova.conf

[DEFAULT]
...
glance_host = controller

  • Xóa SQLite database

#rm /var/lib/nova/nova.sqlite

  • Khởi động lại dịch vụ Compute

#service nova-compute restart

6. Networking Service-Neutron

6.1 Cài đặt trên Controller node

  • Tạo database cho neutron trong MySQL

#mysql -u root -p

<Nhập mật khẩu root của MySQl>
mysql> CREATE DATABASE neutron;
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';

  • Tạo một neutron user trong keystone để dịch vụ Networking có thể chứng thực với dịch vụ Identity. Sử dụng service tenant và admin role

#keystone user-create --name=neutron --pass=NEUTRON_PASS --email=neutron@example.com
#keystone user-role-add --user=neutron --tenant=service --role=admin

  • Đăng ký và tạo endpoint cho dịch vụ Networking

#keystone service-create --name=neutron --type=netowrk --description="OpenStack Networking Service"
#keystone endpoint-create --service-id=$(keystone service-list | awk '/ neutron / {print $2}')
--publicurl=http://192.168.100.11:9696
--internalurl=http://controller:9696
--adminurl=http://controller:9696

  • Cài đặt các thành phần của dịch vụ Networking

#apt-get install netron-server neutron-plugin-ml2

  • Cấu hình kết nối database trong file /etc/neutron/neutron.conf

[database]
...
connection = mysql://neutron:NEUTRON_PASS@controller/neutron

  • Cấu hình kết nối chứng thực đến dịch vụ Identity trong file /etc/neutron/neutron.conf

[DEFAULT]
...
auth_strategy = keystone
...
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS

  • Cấu hình RabbitMQ trong file /etc/neutron/neutron.conf

[DEFAULT]
...
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = controller
rabbit_password = RABBIT_PASS

  • Cấu hình dịch vụ Networking thông báo cho dịch vụ Compute về thay đổi topology

+ Lấy service tenant id bằng lệnh:
#keystone tenant-get service

+ Cấu hình trong file /etc/neutron/neutron.conf

[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://controller:8774/v2
nova_admin_username = nova
nova_admin_tenant_id = <service_tenant_id>
nova_admin_passwod = NOVA_PASS
nova_admin_auth_url = http://controller:353587/v2.0

  • Cấu hình Networking sử dụng Modular Layer 2 (ML2) plugin trong file /etc/neutron/neutron.conf

[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

  • Comment (thêm dấu #) vào bất kỳ dòng nào trong phần [service_providers]  trong file /etc/neutron/neutron.conf
  • Cấu hình file /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
...
type_drivers = gre
tenant_network_types = gre
mechanism_driver = openvswitch
...
[ml2_type_gre]
...
tunnel_id_ranges = 1:1000
...
[securitygroup]
...
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enabel_security_group = True

  • Cấu hình dịch vụ Compute sử dụng dịch vụ Networking trong file /etc/nova/nova.conf

[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
neutron_url = http://controller:9696
neutron_auth_strategy = keystone
neutron_admin_tenant_username = service
neutron_admin_username = neutron
neutron_admin_password = NEUTRON_PASS
neutron_admin_auth_url = http://controller:35357/v2.0
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
security_group_api = neutron

*Chú ý: Mặc định, dịch vụ Compute sử dụng một dịch vụ firewall bên trong. Khi dịch vụ Networking chứa dịch vụ Firewall (Firewall as a Service -FwaaS), bạn phải tắt dịch vụ firewall của Compute.

  • Khởi động lại các dịch vụ Compute và Networking

 

service nova-api restart
service nova-scheduler restart
service nova-conductor restart
service neutron-server restart

6.2 Cài đặt trên Network node

  • Cấu hình cho phép forward IP và bỏ qua lọc gói trong file /etc/sysctl.conf

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

Lưu thay đổi:

#sysctl -p

  • Cài đặt các thành phần của dịch vụ Networking

#apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent neutron-l3-agent neutron-dhcp-agent

  • Cấu hình kết nối chứng thực đến dịch vụ Identity trong file /etc/neutron/neutron.conf

[DEFAULT]
...
auth_strategy = keystone
...
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS

  • Cấu hình RabbitMQ trong file /etc/neutron/neutron.conf

[DEFAULT]
...
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = controller
rabbit_password = RABBIT_PASS

  • Cấu hình Networking sử dụng Modular Layer 2 (ML2) plugin trong file /etc/neutron/neutron.conf

[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

  • Comment (thêm dấu #) vào bất kỳ dòng nào trong phần [service_providers] trong file /etc/neutron/neutron.conf
  • Cấu hình file /etc/neutron/dhcp_agent.ini

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True

  • Cấu hình file /etc/neutron/l3_agent.ini

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True

  • Cấu hình file /etc/neutron/metadata_agent.ini

[DEFAULT]
...
auth_url = http://controller:5000/v2.0
auth_region = regionOne
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET

* Nên thay thế chuỗi METADATA_SECRET bằng chuỗi ký tự bí mật của bạn

  • Trở lại Controller node, cấu hình file /etc/nova/nova.conf

[DEFAULT]
...
service_neutron_metadata_proxy = True
neutron_metadata_proxy_shared_secret = METADATA_SECRET

+ Khởi động lại nova-api
#service nova-api restart

  • Cấu hình file /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
...
type_drivers = gre
tenant_network_types = gre
mechanism_driver = openvswitch
...
[ml2_type_gre]
...
tunnel_id_ranges = 1:1000
...
[securitygroup]
...
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enabel_security_group = True
...
[ovs]
local_ip = 10.20.20.21
tunnel_type = gre
enable_tunneling = True

  • Khởi động lại dịch vụ OVS

#service openvswitch-switch restart

  • Thêm integration bridge

#ovs-vsctl add-br br-int

  • Thêm external bridge

#ovs-vsctl add-br br-ex

  • Thêm eth2 vào br-ex

#ovs-vsctl add-port br-ex eth2

  • Sau khi thêm eth2 vào br-ex, kết nối mạng của Network node sẽ mất. Cấu hình lại file /etc/network/interfaces

...
auto eth2
iface eth2 inet manual
up ip link set dev $IFACE up
down ip link set dev $IFACE down

auto br-ex
iface br-ex inet static
address 192.168.100.21
netmask 255.255.255.0
gateway 192.168.100.2
dns-nameservers 8.8.8.8

  • Tắt Generic Receive Offload (GRO)

#ethtool -K eth2 gro off

  • Khởi động lại các dịch vụ Networking

service neutron-plugin-openvswitch-agent restart
service neutron-l3-agent restart
service neutron-dhcp-agent restart
service neutron-metadata-agent restart

6.3 Cài đặt trên Compute node

  • Cấu hình cho phép bỏ qua lọc gói trong file /etc/sysctl.conf

net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

Lưu thay đổi:
#sysctl -p

  • Cài đặt các thành phần của dịch vụ Networking

apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent neutron-common

  • Cấu hình kết nối chứng thực đến dịch vụ Identity trong file /etc/neutron/neutron.conf

[DEFAULT]
...
auth_strategy = keystone
...
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS

  • Cấu hình RabbitMQ trong file /etc/neutron/neutron.conf

[DEFAULT]
...
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = controller
rabbit_password = RABBIT_PASS

  • Cấu hình Networking sử dụng Modular Layer 2 (ML2) plugin trong file /etc/neutron/neutron.conf

[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

  • Comment (thêm dấu #) vào bất kỳ dòng nào trong phần [service_providers] trong file /etc/neutron/neutron.conf
  • Cấu hình file /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
...
type_drivers = gre
tenant_network_types = gre
mechanism_driver = openvswitch
...
[ml2_type_gre]
...
tunnel_id_ranges = 1:1000
...
[securitygroup]
...
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enabel_security_group = True
...
[ovs]
local_ip = 10.20.20.31
tunnel_type = gre
enable_tunneling = True

  • Khởi động lại dịch vụ OVS

#service openvswitch-switch restart

  • Thêm integration bridge

#ovs-vsctl add-br br-int

  • Cấu hình dịch vụ Compute sử dụng dịch vụ Networking trong file /etc/nova/nova.conf

[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
neutron_url = http://controller:9696
neutron_auth_strategy = keystone
neutron_admin_tenant_username = service
neutron_admin_username = neutron
neutron_admin_password = NEUTRON_PASS
neutron_admin_auth_url = http://controller:35357/v2.0
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
security_group_api = neutron

  • Khởi động lại dịch vụ Compute và OVS

service nova-compute restart
service neutron-plugin-openvswitch-agent restart

7. Dashboard-Horizon

  • Tại Controller node:

apt-get install apache2 memcached libapache2-mod-wsgi openstack-dashboard

  • Gỡ theme mặc định của Ubuntu

apt-get remove --purge openstack-dashboard-ubuntu-theme

  • Khởi động lại Apache và memcached

service apache2 restart
service memcached restart

8. Block Storage Service-Cinder

* Tại Controller node:

  • Cài đặt các gói

apt-get install cinder-api cinder-scheduler

  • Cấu hình kết nối database trong file /etc/cinder/cinder.conf

+ Thêm phần [database] vào cuối file và thêm dòng
[database]
connection = mysql://cinder:CINDER_DBPASS@controller/cinder

  • Tạo database cho cinder

mysql -u root -p

<Nhập mật khẩu root của MySQl>

mysql> CREATE DATABASE cinder;
mysql> GRANT ALL PRIVILEGES ON cinder.* TO ‘cinder’@’localhost’ IDENTIFIED BY ‘CINDER_DBPASS’;
mysql> GRANT ALL PRIVILEGES ON cinder.* TO ‘cinder’@’%’ IDENTIFIED BY ‘CINDER_DBPASS’;

  • Tạo database tables cho dịch vụ Block Storage

#su -s /bin/sh -c “cinder-manage db sync” cinder

  • Tạo một cinder user trong keystone để dịch vụ Block Storage có thể chứng thực với dịch vụ Identity. Sử dụng service tenant và admin role

keystone user-create --name=cinder --pass=CINDER_PASS --email=cinder@example.com
keystone user-role-add --user=cinder --tenant=service --role=admin

  • Cấu hình kết nối chứng thực với keystone  trong file /etc/cinder/cinder.conf

+ Thêm phần [keystone_authtoken] vào cuối file và thêm các dòng
...
[keystone]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = cinder
admin_password = CINDER_PASS

  • Cấu hình RabbitMQ trong file /etc/cinder/cinder.conf

[DEFAULT]
...
rpc_backend = cinder.openstack.common.rpc.impl_kombu
rabbit_host = controller
rabbit_port = 5672
rabbit_userid = guest
rabbit_password = RABBIT_PASS

  • Đăng ký và tạo endpoint cho dịch vụ Block Storage

keystone service-create --name=cinder --type=volume --description="OpenStack Block Storage Service"
keystone endpoint-create --service-id=$(keystone service-list | awk '/ volume / {print $2}')
--publicurl=http://192.168.100.11:8776/v1/%(tenant_id)s
--internalurl=http://controller:8776/v1/%(tenant_id)s
--adminurl=http://controller:8776/v1/%(tenant_id)s

  • Đăng ký và tạo endpoint cho dịch vụ Block Storage version2

keystone service-create --name=cinderv2 --type=volumev2 --description="OpenStack Block Storage Service version 2"
keystone endpoint-create --service-id=$(keystone service-list | awk '/ volumev2 / {print $2}')
--publicurl=http://192.168.100.11:8776/v2/%(tenant_id)s
--internalurl=http://controller:8776/v2/%(tenant_id)s
--adminurl=http://controller:8776/v2/%(tenant_id)s

  • Khởi động lại dịch vụ Block Storage

service cinder-scheduler restart
service cinder-api restart

  • Cài đặt các gói

apt-get install lvm2 cinder-volume

  • Tạo các volume LVM vật lý và logic, sử dụng đĩa lưu trữ số 2 /dev/sdb

pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb

  • Cấu hình file /etc/lvm/lvm.conf

devices {
...
filter = ["a/sda1/", "a/sdb/", "r/.*/"]
...
}

  • Cấu hình dịch vụ Block Storage sử dụng dịch vụ Image trong file /etc/cinder/cinder.conf

[DEFAULT]
...
glance_host = controller

  • Khởi động lại dịch vụ Block Storage

service cinder-volume restart
service tgt restart

9. Orchestration Service-Heat

* Tại Controller node

  • Cài đặt các gói

apt-get install heat-api heat-api-cfn heat-engine

  • Cấu hình kết nối database trong file /etc/heat/heat.conf

[database]
connection = mysql://heat:HEAT_DBPASS@controller/heat

  • Xóa Heat SQLite database

rm /var/lib/heat/heat.sqlite

  • Tạo database cho heat

mysql -u root -p
<Nhập mật khẩu root của MySQl>
mysql> CREATE DATABASE heat;
mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' IDENTIFIED BY 'HEAT_DBPASS';
mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY 'HEAT_DBPASS';

  • Tạo database tables cho dịch vụ Orchestration

su -s /bin/sh -c "heat-manage db_sync" heat

* Bỏ qua các cảnh báo lỗi

  • Cấu hình log trong file /etc/heat/heat.conf

[DEFAULT]
...
verbose = True
...
log_dir = /var/log/heat

  • Cấu hình RabbitMQ trong file /etc/heat/heat.conf

rabbit_host = controller
rabbit_password = RABBIT_PASS

  • Tạo một heat user trong keystone để dịch vụ Orchestration có thể chứng thực với dịch vụ Identity. Sử dụng service tenant và admin role

#keystone user-create –name=heat –pass=HEAT_PASS –email=heat@example.com

#keystone user-role-add –user=heat –tenant=service –role=admin

  • Cấu hình kết nối chứng thực với keystone  trong file /etc/heat/heat.conf

[keystone]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = heat
admin_password = HEAT_PASS

  • Đăng ký và tạo API Endpoint cho heat và CloudFormation APIs

keystone service-create --name=heat --type=orchestration --description="OpenStack Orchestration Service"
keystone endpoint-create --service-id=$(keystone service-list | awk '/ orchestration / {print $2}')
--publicurl=http://192.168.100.11:8004/v1/%(tenant_id)s
--internalurl=http://controller:8004/v1/%(tenant_id)s
--adminurl=http://controller:8004/v1/%(tenant_id)s
keystone service-create --name=heat-cfn --type=cloudformation --description="Orchestration CloudFormation"
keystone endpoint-create --service-id=$(keystone service-list | awk '/ cloudformation / {print $2}')
--publicurl=http://192.168.100.11:8000/v1
--internalurl=http://controller:8000/v1
--adminurl=http://controller:8000/v1

  • Khởi động lại các dịch vụ

service heat-api restart
service heat-api-cfn restart
service heat-engine restart

10. Telemetry Service-Ceilometer

10.1 Cài đặt Telemetry

  • Cài đặt dịch vụ Telemetry tại Controller node

apt-get install ceilometer-api ceilometer-collector ceilometer-agent-central
ceilometer-alarm-evaluator ceilometer-alarm-notifier python-ceilometerclient

  • Cài đặt MongoDB

apt-get install mongodb-server

  • Cấu hình file /etc/mongodb.conf

bind_ip = 10.10.10.11

  • Khởi động lại MongoDB

service mongodb restart

  • Tạo database cho ceilometer

mongo --host controller --eval '
db = db.getSiblingDB("ceilometer");
db.addUser({user: "ceilometer",
pwd: "CEILOMETER_DBPASS",
role: [ "readWrite", "dbAdmin"]})'

  • Cấu hình kết nối database trong file /etc/ceilometer/ceilometer.conf

[database]
connection = mongodb://ceilometer:CEILOMETER_DBPASS@controller:27017/ceilometer

  • Cấu hình bảo mật kết nối cho ceilometer trong file /etc/ceilometer/ceilometer.conf

[publisher]

metering_secret = CEILOMETER_TOKEN

  • Cấu hình RabbitMQ trong file /etc/ceilometer/ceilometer.conf

rabbit_host = controller
rabbit_password = RABBIT_PASS

  • Cấu hình log trong file /etc/ceilometer/ceilometer.conf

log_dir = /var/log/ceilometer

  • Tạo một ceilometer user trong keystone để dịch vụ Telemetry có thể chứng thực với dịch vụ Identity. Sử dụng service tenant và admin role

keystone user-create --name=ceilometer --pass=CEILOMETER_PASS
--email=ceilometer@example.com
keystone user-role-add --user=ceilometer --tenant=service --role=admin

  • Cấu hình kết nối chứng thực với keystone  trong file /etc/ceilometer/ceilometer.conf

[keystone]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = ceilometer
admin_password = CEILOMETER_PASS
...
[service_credentials]
os_auth_url = http://controller:5000/v2.0
os_username = ceilometer
os_tenant_name = service
os_password = CEILOMETER_PASS

  • Đăng ký và tạo API Endpoint cho ceilometer

keystone service-create --name=ceilometer --type=metering --description="OpenStack Telemetry Service"
keystone endpoint-create --service-id=$(keystone service-list | awk '/ metering / {print $2}')
--publicurl=http://192.168.100.11:8777
--internalurl=http://controller:8777
--adminurl=http://controller:8777

  • Khởi động lại dịch vụ

service ceilometer-agent-central restart
service ceilometer-api restart
service ceilometer-collector restart
service ceilometer-alarm-evaluator restart
service ceilometer-alarm-notifier restart

10.2 Cài đặt Compute agent

  • Cài đặt các gói tại Compute node

#apt-get install ceilometer-agent-compute

  • Cấu hình file /etc/nova/nova.conf

[DEFAULT]
...
instance_usage_audit = True
instance_usage_audit_period = hour
notify_on_state_change = vm_and_task_state
notification_driver = nova.openstack.common.notifier.rpc_notifier
notification_driver = ceilometer.compute.nova_notifier

  • Khởi động lại dịch vụ

#service nova-compute restart

  • Cấu hình bảo mật kết nối cho ceilometer trong file /etc/ceilometer/ceilometer.conf

[publisher]

metering_secret = CEILOMETER_TOKEN

  • Cấu hình RabbitMQ trong file /etc/ceilometer/ceilometer.conf

rabbit_host = controller
rabbit_password = RABBIT_PASS

  • Cấu hình log trong file /etc/ceilometer/ceilometer.conf

log_dir = /var/log/ceilometer

  • Cấu hình kết nối chứng thực với keystone  trong file /etc/ceilometer/ceilometer.conf

[keystone]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = ceilometer
admin_password = CEILOMETER_PASS
...
[service_credentials]
os_auth_url = http://controller:5000/v2.0
os_username = ceilometer
os_tenant_name = service
os_password = CEILOMETER_PASS

  • Khởi động lại dịch vụ

service ceilometer-agent-compute restart

10.3 Cấu hình Image Service

  • Tại Controller node, cấu hình file /etc/glance/glance-api,conf

[DEFAULT]
...
notification_driver = messaging
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS

  • Khởi động lại dịch vụ

service glance-registry restart
service glance-api restart

10.4 Cài đặt Block Storage service agent

  • Tại Controller node cấu hình file /etc/cinder/cinder.conf

[DEFAULT]
...
control_exchange = cinder
notification_driver = cinder.openstack.common.notifier.rpc_notifier

  • Khởi động lại dịch vụ

service cinder-api restart
service cinder-scheduler restart
service cinder-volume restart

:)

6 bình luận về “Hướng dẫn cài đặt OpenStack IceHouse 3 nodes với Neutron GRE tunnel

  1. Chào bạn,
    Mình không biết cài đặt IP cho 3 nodes controller, compute, network như thế nào (cài đặt eth0, eth1, ..). Bạn có thể giúp mình được không?
    Cảm ơn bạn.

      1. Khi mình cài đặt trong /etc/network/interfaces thì sau khi khởi động lại mình kg thể truy cập mạng được. Mình phải làm sao?
        Bạn cho mình hỏi luôn là trong Ubuntu, mình chỉ có 1 card mạng, nhưng yêu cầu cài đặt tới 3 IP, vậy mình phải làm thế nào.
        Xin cảm ơn.

Bình luận