Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Cơ Sở Dữ Liệu

Cài đặt OpenStack từ Source: Thiết lập Glance (Phần 2)

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.