এই সিরিজের প্রথম নিবন্ধে, আমরা উৎস থেকে OpenStack ইনস্টল করা শুরু করেছি। আমরা কীস্টোন ইনস্টল করেছি এবং আমাদের নতুন OpenStack ইনস্টলের জন্য একটি পরিষেবা প্রকল্প এবং একজন প্রশাসক ব্যবহারকারী সহ কিছু মৌলিক তথ্য দিয়ে এটিকে পপুলেট করেছি। উপরন্তু, একটি প্রাথমিক স্ক্রিপ্টে আমরা ইমেজ সার্ভিস (গ্লান্স), নেটওয়ার্কিং সার্ভিস (নিউট্রন), কম্পিউট সার্ভিস (নোভা) এবং ভলিউম সার্ভিস (সিন্ডার) এর আসন্ন ইনস্টলেশনের জন্য ব্যবহারকারী এবং ডিরেক্টরি সেটআপ করি। এখন, চলুন চালিয়ে যাওয়া যাক এবং কন্ট্রোলার নোডে এক নজরে ইনস্টল করা এবং শুরু করা যাক।
প্রথম নিবন্ধে, অবশিষ্ট সেটগুলিতে ব্যবহার করার জন্য কয়েকটি শেল ভেরিয়েবল সেট করতে আমরা আমাদের bashrc ফাইলে কিছু তথ্য যোগ করেছি.. যাচাই করুন যে এই ভেরিয়েবলগুলির মধ্যে অন্তত একটি সেট করা আছে:
echo $MY_IP
ইমেজ সার্ভিস (গ্লান্স) ইনস্টল করা শুরু করার জন্য, আমাদের কিছু অতিরিক্ত গ্ল্যান্স সাব-ডিরেক্টরি তৈরি করতে হবে এবং তাদের যথাযথ অনুমতি আছে কিনা তা নিশ্চিত করতে হবে (আগের নিবন্ধে একটি স্ক্রিপ্ট দ্বারা মৌলিক নজরদারিগুলি তৈরি করা হয়েছিল):
mkdir -p /var/lib/glance/images
mkdir -p /var/lib/glance/scrubber
mkdir -p /var/lib/glance/image-cache
এরপরে, ডাউনলোড করুন (রেপো ক্লোন করুন) এবং এক নজরে ইনস্টল করুন:
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
ডাটাবেস সংযোগ তথ্য, বার্তা সারি তথ্য এবং কীস্টোন সংযোগ তথ্যের মতো কিছু প্রাথমিক তথ্য সেট করে এক নজরে কনফিগার করুন:
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 কনফিগার করুন:
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 ডাটাবেস তৈরি করুন এবং নতুন তৈরি করা ডাটাবেসকে গ্ল্যান্স টেবিলের সাহায্যে তৈরি করুন:
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
যদিও এই পরিবেশে প্রয়োজন নেই, আমরা গ্ল্যান্স-ইমেজ-সিঙ্ক ইনস্টল করব এবং এটিকে নিয়মিত চালানোর জন্য সেট করব। আমাদের একাধিক গ্ল্যান্স এপিআই নোড থাকলে এটি নোডের মধ্যে গ্ল্যান্স ইমেজগুলিকে সিঙ্ক করবে:
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
আমাদের অবশ্যই এক নজরে লগ ফাইলগুলি ঘোরানোর কথা মনে রাখতে হবে:
cat >> /etc/logrotate.d/glance << EOF
/var/log/glance/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
EOF
আপনি যদি ইমেজ সার্ভিসের জন্য আইডেন্টিটি সার্ভিস সাইনিং সার্টিফিকেট না পান, তাহলে ইমেজ এপিআই অনুরোধ ব্যর্থ হয়। এক নজরে কীস্টোন সাইনিং শংসাপত্র পেয়ে এটি প্রতিরোধ করুন:
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
আমরা একদৃষ্টে শুরু করার জন্য প্রায় প্রস্তুত, কিন্তু আমাদের অবশ্যই প্রথমে গ্ল্যান্স আপস্টার্ট স্ক্রিপ্ট তৈরি করতে হবে:
দ্রষ্টব্য:এই স্ক্রিপ্টগুলি শুধুমাত্র সেই স্ক্রিপ্টগুলি থেকে অনুলিপি করা হয়েছে যেগুলি উবুন্টু অপারেটিং সিস্টেম প্যাকেজ সংস্করণ এক নজরে ইনস্টল করে৷
cat >> /etc/init/glance-api.conf << EOF
description "Glance API server"
author "Soren Hansen <[email protected]>"
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 <[email protected]>"
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
এক নজরে শুরু করুন এবং যাচাই করুন যে চলছে:
start glance
start glance-registry
প্রায় 15 সেকেন্ড অপেক্ষা করুন এবং এক নজরে চলছে তা যাচাই করতে নিম্নলিখিতটি চালান:
ps aux|grep 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 &
দ্রষ্টব্য: মান সেট করা হচ্ছে debug = True
/etc/glance/glance.conf
ফাইলে ডিবাগিং ব্যর্থতায় সহায়তার জন্য লগিং আউটপুট বৃদ্ধি করবে।
এরপরে, একবার VM-এর ভিত্তি হিসাবে OpenStack সম্পূর্ণরূপে ইনস্টল হয়ে গেলে ব্যবহারের জন্য এক নজরে একটি চিত্র ইনস্টল করুন। উবুন্টু অপারেটিং সিস্টেমের উপর ভিত্তি করে একটি ছোট ক্লাউড ইমেজ পাওয়া যায়, যার নাম সিরোস। এক নজরে চলমান সিরোস ইমেজ ডাউনলোড করুন এবং এক নজরে লোড করুন:
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
আমাদের দ্বিতীয় প্রক্রিয়া এখন চলছে এবং আমরা এখন নেটওয়ার্কিং পরিষেবা (নিউট্রন) ইনস্টল করার দিকে আমাদের মনোযোগ দিতে পারি। এটি তিনটি নিউট্রন ইনস্টলের মধ্যে প্রথম যা আমাদের করতে হবে, কন্ট্রোলার নোডে নিউট্রন সার্ভার এবং নেটওয়ার্ক এবং কম্পিউট নোডের নিউট্রন এজেন্ট৷
যেহেতু নোভা, নিউট্রন এবং গ্ল্যান্স প্রক্রিয়াগুলির বিভিন্ন কাজ সম্পাদন করার জন্য রুট বা সুডো সুবিধার প্রয়োজন, তাই আমাদের এই প্রক্রিয়া ব্যবহারকারীদের জন্য বিশেষ সুডো অনুমতি তৈরি করতে হবে। ওপেনস্ট্যাক রুট র্যাপ কনফিগারেশন ব্যবহারের মাধ্যমে এই সুবিধাগুলির সীমাও সীমাবদ্ধ করে। সুডো অনুমতি সেট আপ করতে নিম্নলিখিত স্ক্রিপ্টটি চালান:
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
কিছু পিপ পূর্বশর্তের কয়েকটি প্যাকেজ পূর্বশর্ত রয়েছে, যেগুলি স্বয়ংক্রিয়ভাবে ইনস্টল করা হয় না। এই প্যাকেজগুলি এখনই ইনস্টল করুন:
apt-get -y install git mysql-client python-dev libxml2-dev libffi-dev
নিউট্রন রেপন ক্লোন করুন:
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
এখন নিউট্রন ইনস্টল করুন:
cd neutron
python setup.py install
cd ~
নিউট্রনের জন্য 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 user-create --tenant service --name neutron --pass neutron
নতুন তৈরি নিউট্রন পরিষেবা ব্যবহারকারীকে 'প্রশাসন' ভূমিকা প্রদান করুন:
keystone user-role-add --user neutron --tenant service --role admin
এবং যাচাই করুন যে ব্যবহারকারী তৈরি কাজ করেছে। পরিষেবা ব্যবহারকারী এবং ভূমিকা তালিকাভুক্ত করুন এবং যাচাই করুন যে নিউট্রন ব্যবহারকারী বিদ্যমান এবং প্রশাসক ভূমিকা রয়েছে:
keystone user-list --tenant Services
keystone user-role-list --tenant service --user neutron
আপনার আগের দুটি কমান্ডের আউটপুটে দেখতে হবে যে নিউট্রন ব্যবহারকারী তৈরি করা হয়েছে এবং তার যথাযথ অনুমতি রয়েছে। এখন কীস্টোন পরিষেবা ক্যাটালগে একটি নিউট্রন পরিষেবা পূরণ করুন:
keystone service-create --name=neutron --type=network --description="Neutron Network Service"
কীস্টোন পরিষেবা ক্যাটালগে নিউট্রন এন্ডপয়েন্ট তথ্য রাখুন:
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 }'`
অবশেষে, আমাদের অবশ্যই নিউট্রন কনফিগার করতে হবে। যদি প্যাকেজ ক্লোজ প্রক্রিয়ায় মৌলিক কনফিগারেশন ফাইল সরবরাহ করা হয়, তবে এটি সরিয়ে ফেলুন, কারণ এটি খুব দীর্ঘ এবং সম্পাদনা করা কঠিন। এর পরে, নিম্নলিখিত ক্রমটি এটিকে একটি সরল দিয়ে প্রতিস্থাপন করবে (মূলটি এখনও ক্লোন করা নিউট্রন ডিরেক্টরিতে রয়েছে যদি আমাদের ভবিষ্যতে এটি দেখার প্রয়োজন হয়):
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
নিউট্রন লগ ফাইলগুলি ঘোরান:
cat >> /etc/logrotate.d/neutron << EOF
/var/log/neutron/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
EOF
নিউট্রন ML2 প্লাগইনের মাধ্যমে একাধিক নেটওয়ার্কিং লেয়ার 2 প্রযুক্তি সমর্থন করে। প্রোজেক্ট নেটওয়ার্ক আইসোলেশনের জন্য GRE টানেল ব্যবহার করতে নিউট্রন ML2 প্লাগইন এজেন্ট কনফিগার করুন। যদিও এই এজেন্ট কন্ট্রোলার নোডে চলে না, নিউট্রন সার্ভারকে প্লাগইন সম্পর্কে জানতে হবে:
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-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
আমরা নিউট্রন প্রক্রিয়া শুরু করার আগে, আমাদের স্টার্টআপ স্ক্রিপ্টকে কিছু বিকল্প তথ্য দিতে হবে যাতে এটি ml2 কনফিগারেশন ফাইলটি পড়তে পারে:
cat > /etc/default/neutron-server << EOF
NEUTRON_PLUGIN_CONFIG="/etc/neutron/plugins/ml2/ml2_conf.ini"
EOF
এবং, অবশেষে, আপস্টার্ট স্ক্রিপ্ট তৈরি করুন যা নিউট্রন সার্ভার প্রক্রিয়া শুরু করতে ব্যবহৃত হয়:
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
নিউট্রন সার্ভার চলমান শুরু করুন এবং এটি চলমান আছে কিনা তা যাচাই করুন। দ্বিতীয় লাইনটি চলমান নিউট্রন প্রক্রিয়া সম্পর্কে তথ্য দেয় (আবার দ্বিতীয় কমান্ড চালানোর আগে প্রায় 15 সেকেন্ড অপেক্ষা করুন):
start neutron
ps aux|grep 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
এই সিরিজের পরবর্তী নিবন্ধে, আমরা কন্ট্রোলার নোডে বেশ কয়েকটি নোভা প্রক্রিয়া ইনস্টল করব।