Giới thiệu
Trong bài viết đầu tiên của loạt bài này, chúng ta đã bắt đầu cài đặt OpenStack từ source. Chúng ta đã cài đặt Keystone và điền vào đó một số thông tin cơ bản bao gồm dự án Services và người dùng admin cho cài đặt OpenStack mới. Ngoài ra, trong một script ban đầu, chúng ta đã thiết lập người dùng và thư mục cho các cài đặt sắp tới của dịch vụ Image (Glance), dịch vụ Networking (Neutron), dịch vụ Compute (Nova) và dịch vụ Volume (Cinder). Bây giờ, hãy tiếp tục cài đặt và khởi động tiến trình Glance trên nút điều khiển (controller node).
Kiểm tra biến môi trường
Trong bài viết đầu tiên, chúng ta đã thêm một số thông tin vào file bashrc để thiết lập một vài biến shell để sử dụng trong các bước cài đặt còn lại. Hãy xác thực rằng ít nhất một trong các biến này đã được thiết lập:
echo $MY_IP
Tạo thư mục con cho Glance
Để bắt đầu cài đặt dịch vụ Image (Glance), chúng ta cần tạo một vài thư mục con bổ sung cho Glance và đảm bảo chúng có quyền phù hợp (các thư mục Glance cơ bản đã được tạo bởi script trong bài viết trước):
mkdir -p /var/lib/glance/images
mkdir -p /var/lib/glance/scrubber
mkdir -p /var/lib/glance/image-cache
Tải xuống và cài đặt Glance
Tiếp theo, tải xuống (clone repository) và cài đặt Glance:
git clone https://github.com/openstack/glance.git -b stable/kilo
Lưu ý: Nhớ rằng chúng ta có thể thay đổi để cài đặt từ trunk bằng cách loại bỏ -b stable/kilo khỏi lệnh trên.
cp -R glance/etc/* /etc/glance/
cd glance
python setup.py install
Cấu hình Glance
Cấu hình Glance bằng cách thiết lập một số thông tin cơ bản như thông tin kết nối cơ sở dữ liệu, thông tin message queue và thông tin kết nối Keystone:
sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_PRIVATE_IP/glance|g" /etc/glance/glance-api.conf
sed -i "s/rabbit_host = localhost/rabbit_host = $MY_PRIVATE_IP/g" /etc/glance/glance-api.conf
sed -i "s/auth_host = 127.0.0.1/auth_host = $MY_PRIVATE_IP/g" /etc/glance/glance-api.conf
sed -i 's/%SERVICE_TENANT_NAME%/service/g' /etc/glance/glance-api.conf
sed -i 's/%SERVICE_USER%/glance/g' /etc/glance/glance-api.conf
sed -i 's/%SERVICE_PASSWORD%/glance/g' /etc/glance/glance-api.conf
sed -i 's/#flavor=/flavor = keystone/g' /etc/glance/glance-api.conf
sed -i 's/#show_image_direct_url = False/show_image_direct_url = True/g' /etc/glance/glance-api.conf
Cấu hình Glance-Registry
Cấu hình Glance-Registry với cùng thông tin như trên:
sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_PRIVATE_IP/glance|g" /etc/glance/glance-registry.conf
sed -i "s/auth_host = 127.0.0.1/auth_host = $MY_PRIVATE_IP/g" /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_TENANT_NAME%/service/g' /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_USER%/glance/g' /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_PASSWORD%/glance/g' /etc/glance/glance-registry.conf
sed -i 's/#flavor=/flavor = keystone/g' /etc/glance/glance-registry.conf
sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_IP|g" /etc/glance/glance-api.conf
sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_IP|g" /etc/glance/glance-registry.conf
Tạo cơ sở dữ liệu MySQL cho Glance
Tạo cơ sở dữ liệu MySQL cho Glance và điền các bảng Glance vào cơ sở dữ liệu mới tạo:
mysql -u root -pmysql -e 'CREATE DATABASE glance;'
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';"
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';"
glance-manage db_sync
Cài đặt Glance Image Sync
Mặc dù không cần thiết trong môi trường này, chúng ta sẽ cài đặt glance-image-sync và đặt nó chạy định kỳ. Nếu chúng ta có nhiều nút Glance API, điều này sẽ đồng bộ hóa các image Glance giữa các nút:
git clone https://github.com/rcbops/glance-image-sync
pushd glance-image-sync
mv glance-image-sync.py /usr/local/bin/glance-image-sync
chmod +x /usr/local/bin/glance-image-sync
popd
cat >> /etc/glance/glance-image-sync << EOF
[DEFAULT]
api_nodes = $MY_IP
rsync_user = glance
lock_file = /var/run/glance-image-sync
EOF
cat >> /etc/cron.d/glance-image-syn << EOF
*/5 * * * * glance /usr/local/bin/glance-image-sync
EOF
Cấu hình logrotate cho Glance
Chúng ta phải nhớ xoay vòng (rotate) các file log của Glance:
cat >> /etc/logrotate.d/glance << EOF
/var/log/glance/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
EOF
Lấy chứng chỉ ký Keystone cho Glance
Nếu bạn không lấy chứng chỉ ký dịch vụ Identity (Keystone) cho dịch vụ Image (Glance), các yêu cầu Image API sẽ thất bại. Ngăn chặn điều này bằng cách lấy chứng chỉ ký Keystone cho Glance:
cp /etc/keystone/ssl/certs/ca.pem /var/lib/glance/cacert.pem
cp /etc/keystone/ssl/certs/signing_cert.pem /var/lib/glance/
chown glance:glance /var/lib/glance/*
chmod 600 /var/lib/glance/cacert.pem
chmod 600 /var/lib/glance/signing_cert.pem
Tạo script Upstart cho Glance
Chúng ta gần như sẵn sàng để khởi động Glance, nhưng trước tiên phải tạo các script upstart cho Glance:
Lưu ý: Các script này chỉ được sao chép từ các script mà phiên bản Glance đóng gói của hệ điều hành Ubuntu cài đặt.
cat >> /etc/init/glance-api.conf << EOF
description "Glance API server"
author "Soren Hansen "
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec start-stop-daemon --start --chuid glance --exec /usr/local/bin/glance-api -- --config-file=/etc/glance/glance-api.conf --config-file=/etc/glance/glance-api-paste.ini
EOF
cat >> /etc/init/glance-registry.conf << EOF
description "Glance registry server"
author "Soren Hansen "
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec start-stop-daemon --start --chuid glance --exec /usr/local/bin/glance-registry -- --config-file=/etc/glance/glance-registry.conf --config-file=/etc/glance/glance-registry-paste.ini
EOF
Khởi động và xác minh Glance
Khởi động Glance và xác minh rằng nó đang chạy:
start glance
start glance-registry
Đợi khoảng 15 giây và chạy lệnh sau để xác minh Glance đang chạy:
ps aux | grep glance
Nếu Glance khởi động thành công, chúng ta sẽ thấy một dòng từ lệnh cuối cùng hiển thị thông tin về tiến trình đang chạy. Nếu không xảy ra như vậy và Glance không khởi động hoặc không duy trì chạy, hãy sử dụng các lệnh sau để khởi động thủ công Glance nhằm mục đích khắc phục sự cố:
sudo -u glance glance-api --config-file=/etc/glance/glance-api.conf --config-file=/etc/glance/glance-api-paste.ini > /dev/null 2>&1 &
sudo -u glance glance-registry --config-file=/etc/glance/glance-registry.conf --config-file=/etc/glance/glance-registry-paste.ini > /dev/null 2>&1 &
Lưu ý: Thiết lập giá trị debug = True trong file /etc/glance/glance.conf sẽ tăng cường đầu ra log, giúp ích cho việc debug các lỗi.
Cài đặt image vào Glance
Tiếp theo, cài đặt một image vào Glance để sử dụng khi OpenStack đã được cài đặt hoàn toàn làm cơ sở cho các VM. Có một image đám mây nhỏ dựa trên hệ điều hành Ubuntu có sẵn, tên là Cirros. Với Glance đang chạy, tải xuống image Cirros và tải nó vào Glance:
wget https://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
glance image-create --name=cirros-qcow2 \
--disk-format=qcow2 \
--container-format=bare \
--is-public=true < cirros-0.3.3-x86_64-disk.img
Chuẩn bị cho Neutron
Quá trình thứ hai của chúng ta hiện đang chạy và chúng ta có thể chuyển sang cài đặt dịch vụ Networking (Neutron). Đây là lần đầu tiên trong ba lần cài đặt Neutron mà chúng ta sẽ phải thực hiện: Neutron server trên nút điều khiển và các agent Neutron trên nút mạng và nút compute.
Vì các tiến trình Nova, Neutron và Glance cần đặc quyền root hoặc sudo để thực hiện nhiều tác vụ, chúng ta cần tạo các quyền sudo đặc biệt cho các user tiến trình này. OpenStack cũng giới hạn phạm vi các đặc quyền này thông qua việc sử dụng cấu hình rootwrap. Chạy script sau để thiết lập quyền sudo:
for SERVICE in neutron nova cinder
do
echo $SERVICE
cat > '/etc/sudoers.d/'$SERVICE'_sudoers' << EOF
Defaults:$SERVICE !requiretty
$SERVICE ALL = (root) NOPASSWD: /usr/local/bin/$SERVICE-rootwrap /etc/$SERVICE/rootwrap.conf *
EOF
chmod 440 /etc/sudoers.d/$SERVICE_sudoers
done
chmod 750 /etc/sudoers.d
Cài đặt các gói tiên quyết
Một số điều kiện tiên quyết của pip có một vài gói tiên quyết không được cài đặt tự động. Cài đặt các gói này ngay bây giờ:
apt-get -y install git mysql-client python-dev libxml2-dev libffi-dev
Clone repository Neutron
git clone https://github.com/openstack/neutron.git -b stable/kilo
Sao chép file cấu hình
cp neutron/etc/* /etc/neutron/
Sao chép thư mục cấu hình con
cp -R neutron/etc/neutron/plugins/ml2/* /etc/neutron/plugins/ml2
cp -R neutron/etc/neutron/rootwrap.d/* /etc/neutron/rootwrap.d
Cài đặt Neutron
cd neutron
python setup.py install
cd ~
Tạo cơ sở dữ liệu MySQL cho Neutron
mysql -u root -pmysql -e 'CREATE DATABASE neutron;'
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';"
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';"
Tạo user dịch vụ Neutron trong Keystone
Script dữ liệu mẫu được chạy trong bài viết trước không chèn dữ liệu cho dịch vụ Neutron. Tạo user dịch vụ Neutron trong Keystone:
keystone user-create --tenant service --name neutron --pass neutron
Cấp quyền admin cho user Neutron
keystone user-role-add --user neutron --tenant service --role admin
Xác minh tạo user
Và xác minh rằng việc tạo user đã hoạt động. Liệt kê các user và role dịch vụ và xác minh rằng user neutron tồn tại và có role admin:
keystone user-list --tenant Services
keystone user-role-list --tenant service --user neutron
Bạn nên thấy trong đầu ra của hai lệnh trước đó rằng user neutron đã được tạo và có quyền thích hợp. Bây giờ điền một dịch vụ neutron vào catalog dịch vụ Keystone:
keystone service-create --name=neutron --type=network --description="Neutron Network Service"
Đặt thông tin endpoint Neutron vào catalog dịch vụ Keystone
keystone endpoint-create --region RegionOne --service neutron --publicurl=https://$MY_PUBLIC_IP:9696 --internalurl=https://$MY_PRIVATE_IP:9696 --adminurl=https://$MY_PRIVATE_IP:9696
SERVICE_TENANT_ID=`keystone tenant-get service | awk '/ id / { print $4 }'`
Cấu hình Neutron
Cuối cùng, chúng ta phải cấu hình Neutron. Nếu file cấu hình cơ bản được cung cấp trong quá trình đóng gói package, hãy xóa nó, vì nó rất dài và khó chỉnh sửa. Tiếp theo, chuỗi sau sẽ thay thế nó bằng một file đơn giản hơn (file gốc vẫn còn trong thư mục neutron đã clone nếu chúng ta cần xem lại trong tương lai):
rm /etc/neutron/neutron.conf
cat > /etc/neutron/neutron.conf << EOF
[DEFAULT]
verbose = True
debug = True
core_plugin = ml2
service_plugins = router
auth_strategy = keystone
allow_overlapping_ips = True
dhcp_agents_per_network = 1
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = https://$MY_PRIVATE_IP:8774/v2
nova_admin_username = nova
nova_admin_tenant_id = $SERVICE_TENANT_ID
#nova_admin_tenant_name = service
nova_admin_password = nova
nova_admin_auth_url = https://$MY_PRIVATE_IP:35357/v2.0
[agent]
root_helper=sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
[keystone_authtoken]
auth_uri = https://$MY_PRIVATE_IP:35357/v2.0/
identity_uri = https://$MY_PRIVATE_IP:5000
admin_tenant_name = service
admin_user = neutron
admin_password = neutron
[database]
connection = mysql://neutron:neutron@$MY_PRIVATE_IP/neutron
[oslo_concurrency]
lock_path = /var/lock/neutron
[oslo_messaging_rabbit]
rabbit_host = $MY_PRIVATE_IP
EOF
Cấu hình logrotate cho Neutron
cat >> /etc/logrotate.d/neutron << EOF
/var/log/neutron/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
EOF
Cấu hình plugin ML2
Neutron hỗ trợ nhiều công nghệ mạng lớp 2 thông qua plugin ML2. Cấu hình agent plugin ML2 của Neutron để sử dụng đường hầm GRE cho cách ly mạng dự án. Mặc dù agent này không chạy trên nút điều khiển, Neutron server cần biết về plugin:
rm /etc/neutron/plugins/ml2/ml2_conf.ini
cat > /etc/neutron/plugins/ml2/ml2_conf.ini << EOF
[ml2]
type_drivers = gre
tenant_network_types = gre
mechanism_drivers = openvswitch
[ml2_type_gre]
tunnel_id_ranges = 1:1000
[securitygroup]
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
EOF
chown neutron:neutron /etc/neutron/*.{conf,json,ini}
chown -R neutron:neutron /etc/neutron/plugins
cat > /etc/default/neutron << EOF
--config-file=/etc/neutron/plugins/ml2/ml2_conf.ini
EOF
Xây dựng bảng cơ sở dữ liệu Neutron
Như chúng ta đã làm cho Glance, xây dựng các bảng cơ sở dữ liệu Neutron:
neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
Cấu hình script khởi động Neutron
Trước khi khởi động tiến trình Neutron, chúng ta cần cung cấp cho script khởi động một số thông tin tùy chọn để nó đọc file cấu hình ML2:
cat > /etc/default/neutron-server << EOF
NEUTRON_PLUGIN_CONFIG="/etc/neutron/plugins/ml2/ml2_conf.ini"
EOF
Tạo script Upstart cho Neutron Server
Và cuối cùng, tạo các script upstart được sử dụng để khởi động tiến trình Neutron server:
cat > /etc/init/neutron-server.conf << EOF
# vim:set ft=upstart ts=2 et:
start on runlevel [2345]
stop on runlevel [!2345]
script
[ -r /etc/default/neutron-server ] && . /etc/default/neutron-server
[ -r "\$NEUTRON_PLUGIN_CONFIG" ] && CONF_ARG="--config-file \$NEUTRON_PLUGIN_CONFIG"
exec start-stop-daemon --start --chuid neutron --exec /usr/local/bin/neutron-server -- \
--config-file /etc/neutron/neutron.conf \
--log-file /var/log/neutron/server.log \$CONF_ARG
end script
EOF
Khởi động và xác minh Neutron
Khởi động Neutron server chạy và xác minh rằng nó duy trì chạy. Dòng thứ hai đưa ra thông tin về tiến trình Neutron đang chạy (lại đợi khoảng 15 giây trước khi chạy lệnh thứ hai):
start neutron
ps aux | grep neutron
Nếu Neutron không khởi động, sử dụng dòng sau để khởi động thủ công Neutron. Nếu tiến trình Neutron có lỗi khi khởi động, nó sẽ đưa ra đầu ra để hỗ trợ debug vấn đề.
sudo -u neutron neutron-server --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/ml2/ml2_conf.ini --log-file /var/log/neutron/server.log
Trong bài viết tiếp theo của loạt bài này, chúng ta sẽ cài đặt một vài tiến trình Nova lên nút điều khiển.