এই সিরিজের প্রথম আর্টিকেলে, আমরা সোর্স থেকে OpenStack ইনস্টলেশন শুরু করেছিলাম। আমরা Keystone ইনস্টল করেছিলাম এবং কিছু βασিক তথ্য দিয়ে পপুলেট করেছিলাম, যার মধ্যে একটি Services প্রজেক্ট এবং আমাদের নতুন OpenStack ইনস্টলেশনের জন্য একটি অ্যাডমিন ইউজার ছিল। এছাড়া, একটি প্রাথমিক স্ক্রিপ্টে আমরা ইমেজ সার্ভিস (Glance), নেটওয়ার্কিং সার্ভিস (Neutron), কম্পিউট সার্ভিস (Nova) এবং ভলিউম সার্ভিস (Cinder) এর আগামী ইনস্টলেশনের জন্য ইউজার এবং ডিরেক্টরি সেটআপ করেছিলাম। এখন, কন্ট্রোলার নোডে Glance প্রসেস ইনস্টল এবং শুরু করা যাক।
পরিবেশ ভেরিয়েবল যাচাই
প্রথম আর্টিকেলে, আমরা আমাদের bashrc ফাইলে কিছু শেল ভেরিয়েবল সেট করেছিলাম বাকি সেটগুলোর জন্য ব্যবহার করার উদ্দেশ্যে। নিশ্চিত করুন যে কমপক্ষে একটি ভেরিয়েবল সেট আছে:
echo $MY_IP
Glance ডিরেক্টরি এবং পারমিশন তৈরি
ইমেজ সার্ভিস (Glance) ইনস্টল শুরু করতে, আমাদের কিছু অতিরিক্ত Glance সাব-ডিরেক্টরি তৈরি করতে হবে এবং নিশ্চিত করতে হবে যে সেগুলোর সঠিক পারমিশন আছে (মূল Glance ডিরেক্টরিগুলো আগের আর্টিকেলের একটি স্ক্রিপ্ট দ্বারা তৈরি করা হয়েছিল):
mkdir -p /var/lib/glance/images
mkdir -p /var/lib/glance/scrubber
mkdir -p /var/lib/glance/image-cache
Glance ডাউনলোড এবং ইনস্টল
পরবর্তীভাবে, Glance রিপোজিটরি ক্লোন এবং ইনস্টল করুন:
git clone https://github.com/openstack/glance.git -b stable/kilo
নোট: মনে রাখবেন যে আমরা `-b stable/kilo` বাদ দিয়ে উপরের কমান্ড থেকে ট্রাঙ্ক থেকে ইনস্টল করতে পারি।
cp -R glance/etc/* /etc/glance/
cd glance
python setup.py install
Glance কনফিগারেশন
ডাটাবেস কানেকশন, মেসেজ কিউ এবং Keystone কানেকশন তথ্য সহ কিছু বেসিক ইনফরমেশন দিয়ে Glance কনফিগার করুন:
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
Glance Registry কনফিগারেশন
উপরের মতো একই তথ্য দিয়ে Glance-Registry কনফিগার করুন:
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
MySQL ডাটাবেস তৈরি এবং পপুলেট
Glance-এর জন্য MySQL ডাটাবেস তৈরি করুন এবং নতুন তৈরি ডাটাবেসকে Glance টেবিল দিয়ে পপুলেট করুন:
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
Glance Image Sync ইনস্টল (ঐচ্ছিক)
এই এনভায়রনমেন্টে প্রয়োজন নাও হলে, আমরা glance-image-sync ইনস্টল করব এবং এটি নিয়মিত চালানোর জন্য সেট করব। যদি একাধিক Glance API নোড থাকত, তবে এটি নোডগুলোর মধ্যে Glance ইমেজ সিঙ্ক করত।
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
Glance লগ ফাইল রোটেশন
Glance লগ ফাইলগুলো রোটেট করা ভুলবেন না:
cat >> /etc/logrotate.d/glance << EOF
/var/log/glance/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
EOF
Keystone সাইনিং সার্টিফিকেট সংগ্রহ
যদি আপনি ইমেজ সার্ভিসের জন্য আইডেন্টিটি সার্ভিসের সাইনিং সার্টিফিকেট না পান, তবে ইমেজ API রিকোয়েস্ট ফেইল করবে। Glance-এর জন্য Keystone সাইনিং সার্ট সংগ্রহ করে এই সমস্যা প্রতিরোধ করুন:
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
Glance Upstart স্ক্রিপ্ট তৈরি
Glance শুরু করার আগে, আমাদের Glance upstart স্ক্রিপ্টগুলো তৈরি করতে হবে:
নোট: এই স্ক্রিপ্টগুলো Ubuntu অপারেটিং সিস্টেমের প্যাকেজড ভার্শন Glance ইনস্টল করে যে স্ক্রিপ্টগুলো ইনস্টল করে, সেগুলো থেকে কপি করা।
cat >> /etc/init/glance-api.conf << EOF
description "Glance API server"
author "Soren Hansen <soren@linux2go.dk>"
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 <soren@linux2go.dk>"
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
Glance শুরু এবং যাচাই
Glance শুরু করুন এবং যাচাই করুন যে এটি চলছে:
start glance
start glance-registry
প্রায় ১৫ সেকেন্ড অপেক্ষা করুন এবং নিচের কমান্ড চালিয়ে যাচাই করুন যে Glance চলছে:
ps aux|grep glance
যদি Glance শুরু হয়, তবে লাস্ট কমান্ডের আউটপুটে রানিং প্রসেস সম্পর্কে ইনফরমেশন দেখবেন। যদি না হয় এবং Glance শুরু না হয় বা চলতে না পারে, তবে ট্রাবলশুট করার জন্য ম্যানুয়ালি Glance শুরু করতে নিচের কমান্ড ব্যবহার করুন:
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 &
নোট: /etc/glance/glance.conf ফাইলে debug = True ভ্যালু সেট করলে লগ আউটপুট বাড়বে, যা ফেইলার ডিবাগ করতে সাহায্য করবে।
Glance-এ ইমেজ ইনস্টল
এখন, OpenStack পুরোপুরি ইনস্টল হয়ে যাওয়ার পর VM-এর ভিত্তি হিসেবে ব্যবহার করার জন্য Glance-এ একটি ইমেজ ইনস্টল করুন। Ubuntu-ভিত্তিক একটি ছোট ক্লাউড ইমেজ উপলব্ধ যার নাম Cirros। Glance চলাকালীন Cirros ইমেজ ডাউনলোড করুন এবং 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
Neutron ইনস্টলেশনের দিকে অগ্রসর
আমাদের দ্বিতীয় প্রসেস এখন চলছে এবং এখন আমরা নেটওয়ার্কিং সার্ভিস (Neutron) ইনস্টল করার দিকে মনোযোগ দিতে পারি। এটি তিনটি Neutron ইনস্টলেশনের প্রথমটি যা আমাদের করতে হবে - কন্ট্রোলার নোডে Neutron সার্ভার এবং নেটওয়ার্ক ও কম্পিউট নোডে Neutron এজেন্ট।
Sudo পারমিশন সেটআপ
যেহেতু Nova, Neutron এবং Glance প্রসেসগুলো বিভিন্ন কাজের জন্য রুট বা sudo প্রivilেজ প্রয়োজন, আমাদের এই প্রসেস ইউজারদের জন্য স্পেশাল sudo পারমিশন তৈরি করতে হবে। OpenStack রুটওয়্রাপ কনফিগারেশন ব্যবহার করে এই প্রivilেজের সীমা নির্দিষ্ট করে। 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
Pip প্রিরেকвизиট প্যাকেজ ইনস্টল
Pip প্রিরেকвизиটগুলোর কিছু প্যাকেজ প্রিরেকвизиট আছে যা অটোমেটিক্যালি ইনস্টল হয় না। এখন সেগুলো ইনস্টল করুন:
apt-get -y install git mysql-client python-dev libxml2-dev libffi-dev
Neutron রিপো ক্লোন
git clone https://github.com/openstack/neutron.git -b stable/kilo
কনফিগারেশন ফাইল কপি
cp neutron/etc/* /etc/neutron/
কনফিগারেশন সাবডিরেক্টরি কপি
cp -R neutron/etc/neutron/plugins/ml2/* /etc/neutron/plugins/ml2
cp -R neutron/etc/neutron/rootwrap.d/* /etc/neutron/rootwrap.d
Neutron ইনস্টল
cd neutron
python setup.py install
cd ~
Neutron-এর জন্য MySQL ডাটাবেস তৈরি
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';"
Keystone-এ Neutron সার্ভিস ইউজার তৈরি
পূর্বের আর্টিকেলে চলানো স্যাম্পল ডেটা স্ক্রিপ্ট Neutron সার্ভিসের জন্য ডেটা ইনসার্ট করে না। Keystone-এ Neutron সার্ভিস ইউজার তৈরি করুন:
keystone user-create --tenant service --name neutron --pass neutron
Neutron সার্ভিস ইউজারকে 'admin' রোল দিন
keystone user-role-add --user neutron --tenant service --role admin
ইউজার তৈরি যাচাই
সার্ভিস ইউজার এবং রোল লিস্ট করে যাচাই করুন যে neutron ইউজারটি তৈরি হয়েছে এবং এডমিন রোল আছে:
keystone user-list --tenant Services
keystone user-role-list --tenant service --user neutron
Keystone সার্ভিস ক্যাটালগে Neutron সার্ভিস পপুলেট
keystone service-create --name=neutron --type=network --description="Neutron Network Service"
Keystone সার্ভিস ক্যাটালগে Neutron এন্ডপয়েন্ট ইনফো
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 }'`
Neutron কনফিগারেশন
যদি বেসিক কনফিগারেশন ফাইল প্যাকেজ ক্লোজ প্রসেসে দিয়ে থাকে, তবে সেটি রিমুভ করুন, কারণ এটি খুব বড় এবং এডিট করা কঠিন। নিচের সিকোয়েন্স এটি একটি সিম্পলার ফাইলের সাথে রিপ্লেস করবে (মূল ফাইলটি এখনও ক্লোন করা neutron ডিরেক্টরিতে আছে যদি ভবিষ্যতে দরকার পড়ে):
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
Neutron লগ ফাইল রোটেশন
cat >> /etc/logrotate.d/neutron << EOF
/var/log/neutron/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
EOF
ML2 প্লাগইন কনফিগারেশন
Neutron ML2 প্লাগইন দিয়ে একাধিক নেটওয়ার্কিং লেয়ার ২ টেকনোলজি সাপোর্ট করে। Neutron ML2 প্লাগইন এজেন্টকে GRE টানেল ব্যবহার করে প্রজেক্ট নেটওয়ার্ক আইসোলেশনের জন্য কনফিগার করুন। যদিও এই এজেন্ট কন্ট্রোলার নোডে না চলে, Neutron সার্ভারকে প্লাগইন সম্পর্কে জানতে হবে:
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
Neutron ডাটাবেস টেবিল বিল্ড
Glance-এর মতো, Neutron ডাটাবেস টেবিল বিল্ড করুন:
neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
Neutron স্টার্টআপ স্ক্রিপ্ট অপশন
Neutron প্রসেস শুরু করার আগে, স্টার্টআপ স্ক্রিপ্টকে কিছু অপশন ইনফো দিতে হবে যাতে এটি ML2 কনফিগারেশন ফাইল পড়ে:
cat > /etc/default/neutron-server << EOF
NEUTRON_PLUGIN_CONFIG="/etc/neutron/plugins/ml2/ml2_conf.ini"
EOF
Neutron Server Upstart স্ক্রিপ্ট
অবশেষে, Neutron সার্ভার প্রসেস শুরু করতে ব্যবহৃত upstart স্ক্রিপ্ট তৈরি করুন:
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
Neutron Server শুরু এবং যাচাই
Neutron server চালু করুন এবং যাচাই করুন যে এটি চলছে। দ্বিতীয় লাইন চলমান neutron প্রসেসের ইনফো দেবে (আবার প্রায় ১৫ সেকেন্ড অপেক্ষা করুন দ্বিতীয় কমান্ড চালানোর আগে):
start neutron
ps aux|grep neutron
যদি Neutron শুরু না হয়, তবে ম্যানুয়ালি Neutron শুরু করতে নিচের লাইন ব্যবহার করুন। যদি Neutron প্রসেস শুরু করার সময় এরর হয়, তবে ডিবাগ করতে আউটপুট मिलবে।
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
এই সিরিজের পরবর্তী আর্টিকেলে, আমরা কন্ট্রোলার নোডে বেশ কিছু Nova প্রসেস ইনস্টল করব।