যদি আপনি একটি OpenStack কন্ট্রিবিউটর হন, তবে আপনি সম্ভবত আপনার অধিকাংশ কাজের জন্য DevStack-এ নির্ভর করেন। DevStack হলো, এবং דיर्घকাল ধরে, ডি-ফ্যাক্টো প্ল্যাটফর্ম যা কন্ট্রিবিউটররা ডেভেলপমেন্ট, টেস্টিং, এবং রিভিউর জন্য ব্যবহার করেন। এই আর্টিকেলে, আমি আপনাকে একটি প্রজেক্টের সাথে পরিচিত করাতে চাই যেন আমি একজন কন্ট্রিবিউটর, যেটি ডাকা হয় openstack-ansible। গত কয়েক মাস ধরে, আমি এই প্রজেক্টটি DevStack-এর বিকল্প হিসেবে ব্যবহার করছি OpenStack আপস্ট্রিম ডেভেলপমেন্টের জন্য, এবং অভিজ্ঞতাটি খুবই পজিটিভ।
DevStack-এ কী সমস্যা?
openstack-ansible-এ ডুব দেওয়ার আগে, আমি সংক্ষিপ্তে আলোচনা করব সেই কারণগুলো যেগুলো আমাকে DevStack-এর বিকল্প খুঁজতে বাধ্য করল। সার্বিকভাবে, DevStack একটি ভালো রাউন্ডেড প্রজেক্ট, কিন্তু কয়েকটি আর্কিটেকচারাল ডিসিশন আছে যা আমাকে বিচকিত করে।
প্রথমত, DevStack একটি মনোলিথিক ইনস্টলারের সাথে আসে। ইনস্টল করতে, আপনি stack.sh চালান এবং এটি কনফিগার করা সকল মডিউল ইনস্টল করে। যদি পরে আপনি মডিউল যোগ বা বাদ দিতে চান, একমাত্র অপশন হলো unstack.sh চালিয়ে সবকিছু আনইনস্টল করা, এবং তারপর আপডেটেড কনফিগারেশনের সাথে stack.sh পুনরায় চালানো। কয়েকবার, যখন আমি একটি মডিউলের সোর্স কোড পরিবর্তন করতাম, আমি অনিচ্ছাকৃতভাবে সেই মডিউলটিকে অস্থিরভাবে আচরণ করতে বাধ্য করতাম। যদি আমি সেটি পরিস্থিতিতে পড়ি, সবচেয়ে নিরাপদ অপশন হলো সেটি রি-ইনস্টল করা, এবং DevStack-এ তা করার একমাত্র উপায় হলো সবকিছু রি-ইনস্টল করা।
DevStack সকল মডিউলের একটি ডেভেলপমেন্ট ইনস্টলেশন করে, যা একটি এনভায়রনমেন্ট তৈরি করে যা প্রোডাকশন ডিপ্লয়মেন্ট থেকে খুব আলাদা। আমার মতামতে, একটি উচিত ডেভেলপমেন্ট এনভায়রনমেন্টে থাকা উচিত যে মডিউলটিতে আমি কাজ করছি সেটি ডেভেলপমেন্টের জন্য ইনস্টল করা, বাকি সব প্রোডাকশনের জন্য ইনস্টল করা। DevStack-এ এটি করা সম্ভব নয়।
DevStack-এ আমার আর একটি সমস্যা ছিল ডিপেন্ডেন্সি একসঙ্গে কনসিস্টেন্ট স্টেটে রাখার ধারাবাহিক লড়াই। DevStack-এ, ডিপেন্ডেন্সি সব মডিউলের মধ্যে শেয়ার করা হয়, তাই একটি মডিউলের জন্য ডিপেন্ডেন্সি সিঙ্ক করার একটি সিম্পল একশন একটি চেইন রিয়্যাকশন শুরু করতে পারে যা সেকালীন অন্য কয়েকটি মডিউল আপডেট করার প্রয়োজন হয়। কিছুটা পর্যন্ত, সাম্প্রতিক DevStack রিলিজে পার-মডিউল ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করে এটি কম করা যায়, কিন্তু, সেটাও সেটি, OS লেভেল প্যাকেজগুলো শেয়ার করা থাকে।
openstack-ansible (OSA) কী?
openstack-ansible প্রজেক্টটি একটি Rackspace ওপেন সোর্স উদ্যোগ যা Ansible-এর শক্তি ব্যবহার করে OpenStack ডিপ্লয় করতে। আপনি এই প্রজেক্টটিকে os-ansible-deployment নামে StackForge-এ শুনতে পেরে থাকতে পারেন এটিকে OpenStack বড় টেন্টে নিয়ে যাওয়ার আগে।
DevStack-এর মত, openstack-ansible সকল OpenStack সার্ভিস তাদের git রিপোজিটরি থেকে সরাসরি ডিপ্লয় করে, কোনো ভেন্ডর প্যাচ বা অ্যাড-অন ছাড়া। কিন্তু বড় পার্থক্য হলো openstack-ansible OpenStack সার্ভিসগুলো LXC কন্টেইনারে ডিপ্লয় করে, তাই সার্ভিসগুলোর মধ্যে সম্পূর্ণ OS লেভেল এবং Python প্যাকেজ আইসোলেশন থাকে যেগুলো একটি নোডে হোস্ট করা থাকে।
DevStack এবং openstack-ansible-এর মধ্যে আরেকটি পার্থক্য হলো Послед वाला একটি প্রোডাকশন ডিস্ট্রিবিউশন। এর সাথে, আপনি এন্টারপ্রাইজ স্কেল প্রাইভেট ক্লাউড ডিপ্লয় করতে পারেন যা কিছু নোড থেকে শুরু করে বড় ক্লাস্টার পর্যন্ত যেতে পারে সैकડা বা হাজার হাজার নোড সহ।
নিচের ডায়াগ্রামটি openstack-ansible প্রাইভেট ক্লাউডের স্ট্রাকচার দেখাচ্ছে:
এটি দেখে, আপনি সম্ভবত মাথা খুঁজছেন কীভাবে এই প্রজেক্টটি DevStack-এর সাদगी ম্যাচ করতে পারে আপস্ট্রিম ডেভেলপমেন্টের জন্য, যেহেতু এটি স্পষ্টভাবে মাল্টি-নোড প্রাইভেট ক্লাউডের দিকে ওরিয়েন্টেড। নিরাশ হবেন না! আমি পরবর্তী সেকশনে এটি কভার করব।
OSA All-In-One
openstack-ansible প্রজেক্ট কন্ট্রিবিউটররা ডে-টু-ডে কাজ এবং গেটিং-এর জন্য সিঙ্গেল-নোড ডিপ্লয়মেন্ট ব্যবহার করে, কারণ এটি অনেক বেশি কনভেনিয়েন্ট এবং রিসোর্স-এফিশিয়েন্ট। এই ডিপ্লয়মেন্ট মেথডের মাধ্যমে, OSA একটি ক্লাউড সার্ভার বা ভার্চুয়াল মেশিনে স্ট্যান্ড আপ করা সম্ভব, তাই এই ফিচারের সুবিধা নেওয়া এই প্রজেক্টটিকে DevStack-এর সাথে তুলনাযোগ্য করে তোলে।
দুঃখের সাথে বলতে হচ্ছে, OSA-এর সিঙ্গেল-নোড ডিপ্লয়মেন্টের হোস্ট রিকোয়ারমেন্ট DevStack-এর চেয়ে বেশি, মূলত কন্টেইনার ইনফ্রাস্ট্রাকচার által আনার ওভারহেডের কারণে। একটি ব্যবহারযোগ্য ইনস্টলেশনের জন্য, হোস্টের 16GB RAM এবং 80GB ডিস্ক স্পেস থাকতে হবে। এই মুহূর্তে, একমাত্র সাপোর্টেড হোস্ট OS হলো Ubuntu 14.04।
OSA-এর DevStack-এর ওপর একটি সুন্দর সুবিধা হলো, কন্টেইনারাইজড আর্কিটেকচারের কারণে, এটি রিডান্ডান্ট সার্ভিসও ডিপ্লয় করতে পারে এমনকি সিঙ্গেল-নোড ইনস্টলে। একটি ডিফল্ট সিঙ্গেল-নোড ডিপ্লয়মেন্টে, galera, rabbitmq, এবং keystone রিডান্ডেন্সি সহ ডিপ্লয় হয়, এবং HAProxy হোস্টে ইনস্টল হয় লোড ব্যালেন্সিং করার জন্য।
আপনি কী হাত গোড়া করার জন্য প্রস্তুত? যদি আপনার কাছে একটি ফ্রেশ Ubuntu 14.04 সার্ভার থাকে যা উপরে উল্লিখিত স্পেক্স পূরণ করে, তবে আপনি OSA রিপোজিটরি ক্লোন করতে পারেন নিচের কমান্ডগুলো দিয়ে:
# apt-get -y install git
# git clone https://github.com/openstack/openstack-ansible /opt/openstack-ansible
আপনাকে প্রজেক্টটি এই ডিরেক্টরিতে ক্লোন করার দরকার নেই। বরং, আপনি যেখানে পছন্দ সেখানে ক্লোন করতে পারেন।
এরপর, একটি সিঙ্গেল-নোড কনফিগারেশন ফাইল জেনারেট করুন। সৌভাগ্যক্রমে, প্রজেক্টটির সাথে একটি স্ক্রিপ্ট আছে যা এটি আপনার জন্য করে:
# cd /opt/openstack-ansible
# scripts/bootstrap-aio.sh
উপরের কমান্ড রান হলে, ডিরেক্টরি /etc/openstack_deploy বেশ কিছু YAML ফরম্যাটে কনফিগারেশন ফাইল দিয়ে পপুলেট হবে। বিশেষ আগ্রহের ফাইল হলো user_secrets.yml, যেটিতে আপনার ইনস্টলেশনে ব্যবহার হওয়া সকল পাসওয়ার্ড থাকে। এই পাসওয়ার্ডগুলো র্যাঞ্ডমলি জেনারেটেড, তাই মনে রাখা কঠিন। আমি সাধারণত অ্যাডমিন পাসওয়ার্ডটি এডিট করি, কারণ আমি এটিকে অনেক ব্যবহার করি। মূলত আমি এটি পরিবর্তন করি:
keystone_auth_admin_password: cY3QHwjMLRdSuZMlKI3OvujScCNeIMdH
এটি করতে:
keystone_auth_admin_password: secrete
বাকি পাসওয়ার্ডগুলো ততটা উপকারী নয়, তাই আমি সেগুলো একাকি রেখে দিই। যাইহোক, আপনি যেকোনো পাসওয়ার্ড যেটি মনে করেন আপনাকে ব্যবহার করতে হতে পারে, সেটি সহজে মনে রাখার মতো কিছুতে পরিবর্তন করতে পারেন।
এরপর, আরেকটি স্ক্রিপ্ট চালান যা হোস্টে Ansible ইনস্টল করে, প্লাস কয়েকটি Ansible এক্সট্রা এবং র্যাপার স্ক্রিপ্ট যা এর ব্যবহার সিম্পল করে:
# scripts/bootstrap-ansible.sh
এই পয়েন্টে, হোস্ট OSA ইনস্টলেশন রিসিভ করার জন্য প্রস্তুত, তাই Ansible প্লেবুকগুলো চালান যা ইনস্টলেশন করিয়ে দেয়:
# scripts/run-playbooks.sh
একটি Rackspace Public Cloud সার্ভারে, সমস্ত প্লেবুক 통해서 একটি ফুল রান প্রায় ৪৫ মিনিট নেয় কমপ্লিট হওয়ায়। Ansible-এ কাজ করার একটি সুন্দর দিক হলো সকল টাস্ক ইডেমপটেন্ট, অর্থাৎ প্লেবুকগুলো একাধিকবার এক্সিকিউট করা যাবে কোনো সমস্যা ছাড়া। যদি একটি টাস্ক ইতিমধ্যে পারফর্মড থাকে, এটি দ্বিতীয়বার রান করলে কিছুই করবে না। এটি আসলে খুব উপকারী, কারণ এটি একটি লাইভ সিস্টেম রি-কনফিগার করা সম্ভব করে শুধু উপযুক্ত কনফিগারেশন ফাইলগুলো পরিবর্তন করে এবং প্লেবুকগুলো পুনরায় চালিয়ে, সবকিছু টিয়ার ডাউন করার প্রয়োজন ছাড়া।
openstack-ansible-এর একটি দ্রুত টুর
এই সেকশনে, আমি OSA সিঙ্গেল-নোড স্ট্রাকচারের একটি ওভারভিউ দিতে চাই, যাতে আপনারা যারা ব cukup সাহসী ছিলেন একটি স্ট্যান্ড আপ করতে, জানেন সব কোথায় আছে।
প্রথমে সব, Horizon ড্যাশবোর্ড ডিপ্লয় করা হয়েছে এবং হোস্টের পাবলিক IP অ্যাড্রেসে অ্যাক্সেসযোগ্য হওয়া উচিত। আপনি admin একাউন্ট ব্যবহার করতে পারেন, /etc/openstack_deploy/user_secrets.yml ফাইলে আপনি যে পাসওয়ার্ড দিয়েছেন সেটি দিয়ে। আপনি যদি এই ফাইলটি এডিট না করেন, তবে আপনাকে এই ফাইলটি খুলতে হবে এবং keystone_auth_admin_password সেটিং খুঁজে বের করতে হবে কী পাসওয়ার্ড ব্যবহার করা হয়েছে।
যেন আমি উপরে বলেছি, সার্ভারগুলো সব LXC কন্টেইনারে ইনস্টল করা হয়েছে। নিচের কমান্ড আপনাকে কন্টেইনারগুলোর লিস্ট দেখাবে:
root@miguel-lxc-server:~# lxc-ls -f
NAME STATE IPV4 IPV6 AUTOSTART
--------------------------------------------------------------------------------------------------------------------------------
aio1_ceilometer_api_container-c8e825de RUNNING 10.0.3.203, 172.29.237.195 - YES (onboot, openstack)
aio1_ceilometer_collector_container-2da3371f RUNNING 10.0.3.10, 172.29.238.178 - YES (onboot, openstack)
aio1_cinder_api_container-88e59c04 RUNNING 10.0.3.125, 172.29.238.106, 172.29.247.183 - YES (onboot, openstack)
aio1_cinder_scheduler_container-69d2bec4 RUNNING 10.0.3.4, 172.29.239.79 - YES (onboot, openstack)
aio1_galera_container-2f36d624 RUNNING 10.0.3.95, 172.29.237.18 - YES (onboot, openstack)
aio1_galera_container-3b8e14d7 RUNNING 10.0.3.18, 172.29.237.166 - YES (onboot, openstack)
aio1_galera_container-618973ae RUNNING 10.0.3.82, 172.29.238.189 - YES (onboot, openstack)
aio1_glance_container-4b41140f RUNNING 10.0.3.21, 172.29.237.77, 172.29.246.233 - YES (onboot, openstack)
aio1_heat_apis_container-40ec9f3e RUNNING 10.0.3.193, 172.29.239.6 - YES (onboot, openstack)
aio1_heat_engine_container-36e270c9 RUNNING 10.0.3.171, 172.29.239.171 - YES (onboot, openstack)
aio1_horizon_container-3497588e RUNNING 10.0.3.33, 172.29.239.114 - YES (onboot, openstack)
aio1_horizon_container-6cac5348 RUNNING 10.0.3.30, 172.29.238.168 - YES (onboot, openstack)
aio1_keystone_container-821e7cf8 RUNNING 10.0.3.38, 172.29.238.105 - YES (onboot, openstack)
aio1_keystone_container-d63c657e RUNNING 10.0.3.69, 172.29.239.208 - YES (onboot, openstack)
aio1_memcached_container-8baf34d5 RUNNING 10.0.3.158, 172.29.237.135 - YES (onboot, openstack)
aio1_neutron_agents_container-21b819b7 RUNNING 10.0.3.233, 172.29.239.130, 172.29.240.182 - YES (onboot, openstack)
aio1_neutron_server_container-b4279bbe RUNNING 10.0.3.52, 172.29.239.216 - YES (onboot, openstack)
aio1_nova_api_metadata_container-79faf41a RUNNING 10.0.3.60, 172.29.239.110 - YES (onboot, openstack)
aio1_nova_api_os_compute_container-fed67563 RUNNING 10.0.3.231, 172.29.239.17 - YES (onboot, openstack)
aio1_nova_cert_container-72f66c56 RUNNING 10.0.3.155, 172.29.237.152 - YES (onboot, openstack)
aio1_nova_conductor_container-7d0f1b0f RUNNING 10.0.3.164, 172.29.239.144 - YES (onboot, openstack)
aio1_nova_console_container-62af2918 RUNNING 10.0.3.106, 172.29.238.236 - YES (onboot, openstack)
aio1_nova_scheduler_container-e6b79b3b RUNNING 10.0.3.250, 172.29.236.153 - YES (onboot, openstack)
aio1_rabbit_mq_container-0e0fe308 RUNNING 10.0.3.86, 172.29.239.93 - YES (onboot, openstack)
aio1_rabbit_mq_container-a4a04124 RUNNING 10.0.3.253, 172.29.237.188 - YES (onboot, openstack)
aio1_rabbit_mq_container-b9c6dce6 RUNNING 10.0.3.22, 172.29.238.111 - YES (onboot, openstack)
aio1_repo_container-6a8377fc RUNNING 10.0.3.102, 172.29.237.47 - YES (onboot, openstack)
aio1_repo_container-b92c563a RUNNING 10.0.3.223, 172.29.239.251 - YES (onboot, openstack)
aio1_rsyslog_container-a6e4f7d4 RUNNING 10.0.3.170, 172.29.237.249 - YES (onboot, openstack)
aio1_swift_proxy_container-9f0130d3 RUNNING 10.0.3.20, 172.29.237.227, 172.29.247.52 - YES (onboot, openstack)
aio1_utility_container-d83fab91 RUNNING 10.0.3.39, 172.29.237.161 - YES (onboot, openstack)
এই লিস্টে যেতে, আপনি দেখতে পাবেন কী সার্ভিসগুলো ডিপ্লয় করা হয়েছে। আপনি একটি কন্টেইনারের ভিতরে যেতে পারেন lxc-attach কমান্ড ব্যবহার করে। একটি বিশেষ আকর্ষণীয় কন্টেইনার হলো লিস্টের নিচে utility নামে থাকা। এই কন্টেইনারে প্রবেশ করার কমান্ডটি:
# lxc-attach -n aio1_utility_container-d83fab91
utility কন্টেইনার উপকারী কারণ এতে সকল OpenStack কমান্ড লাইন ক্লায়েন্ট ইনস্টল করা থাকে, প্লাস অ্যাডমিন একাউন্টের জন্য একটি রেডি-টু-গো openrc ফাইল। নিচের উদাহরণ সেশনে, আমি openstack ইউটিলিটি ব্যবহার করি আমার ডিপ্লয়মেন্টে ইউজার লিস্ট কোয়েরি করতে:
root@miguel-lxc-server:~# lxc-attach -n aio1_utility_container-d83fab91
root@aio1_utility_container-d83fab91:~# source openrc
root@aio1_utility_container-d83fab91:~# openstack user list
+----------------------------------+--------------------+
| ID | Name |
+----------------------------------+--------------------+
| 2257ddc66d4c41ba8500114944cbb852 | dispersion |
| 22f1824610b34eb2a6cfaba09b8feb93 | ceilometer |
| 271f9bd069b2440ebb27c8f460bb3bcf | neutron |
| 2ecb372f6563410ab8138625c45a72e3 | heat |
| 35a7c9373ff640c4ba768963c1f53f02 | keystone |
| 37041c2377c44f5cb84ffafee5bfed6f | cinder |
| 4b7f43c7c2cc443889cd6b5d90a30e49 | glance |
| 6ee6a4abb7e64b3d801f2653efb9c9ec | swift |
| 9b375e06cb0a481a8ed2f94e28e1cb39 | nova |
| b2b90c7eed704c63bbc8ea0eb23f43c4 | admin |
| bd3eed1e0cf54b93a0d7c6a7849be778 | stack_domain_admin |
+----------------------------------+--------------------+
কন্টেইনার থেকে বের হয়ে হোস্টে ফিরে যেতে, exit টাইপ করুন বা Ctrl-D চাপুন।
Ansible-এর আরেকটি সুন্দর ফিচার: এটি আপনাকে একটি সার্ভিস রি-ইনস্টল করতে দেয়, যেমন ডেভেলপমেন্ট중에 ভুলে যাওয়া একটি সার্ভিস। এটি করতে, সহজেই ảnh hưởng পাওয়া কন্টেইনারটি ডেস্ট্রয় করুন:
# lxc-stop -n <container-name>
# lxc-destroy -n <container-name>
বিমার কন্টেইনার ডেস্ট্রয় হলে, প্লেবুকগুলো একবার আরো চালালে একটি ফ্রেশটি রিপ্লেসমেন্ট হিসেবে তৈরি হবে, সময়ের একটি ছোট ভাগে যা সবকিছু স্ক্র্যাচ থেকে ইনস্টল করতে লাগত।
ডেভেলপমেন্ট ওয়ার্কফ্লো
আপনি নিশ্চিতভাবে জানতে চান কীভাবে আমি একটি OSA all-in-one ডিপ্লয়মেন্টকে DevStack-এর প্রতিস্থাপন হিসেবে ব্যবহার করি, প্র্যাক্টিক্যাল টার্মসে। প্রসেসে কিছু সিম্পল স্টেপ জড়িত:
-
OSA-AIO ডিপ্লয় করুন
জাস্টিলি, সবকিছু শুরু হয় একটি সিঙ্গেল-নোড openstack-ansible ক্লাউড ডিপ্লয় করে। আমি সাধারণত একটি Rackspace Public Cloud সার্ভার ব্যবহার করি আমার হোস্ট হিসেবে, কিন্তু আপনি যেকোনো Ubuntu 14.04 হোস্ট ব্যবহার করতে পারেন উপরে লিস্ট করা স্পেক্স সহ।
-
টার্গেট কন্টেইনারে আটैচ করুন
তब আমি সেই কন্টেইনারের ভিতরে যাই যা সার্ভিসটি রান করে যেটিতে আমি কাজ করতে চাই, উপরে দেখানো
lxc-attachকমান্ড ব্যবহার করে। যদি আমি একটি সার্ভিসে কাজ করি যা রিডান্ডেন্সি সহ ডিপ্লয় করা হয়েছে, আমি প্রথমে HAProxy কনফিগারেশন এডিট করি শুধু একটি কন্টেইনার এক্টিভ রেখে। বাকি কন্টেইনারগুলো ব্যাকআপ হিসেবে ব্যবহার করা যেতে পারে যদি সিলেক্টেডটিয়ে কিছু সমস্যা হয়। -
টার্গেট সার্ভিস বন্ধ করুন
কন্টেইনারের ভিতরে সার্ভিসটির একটি প্রোডাকশন ভার্সন চলছে যেটিতে আমি কাজ করতে চাই। কারণ এই সার্ভিসটি আমার জন্য কোনো উপকার নেই, আমি এটি বন্ধ করি স্ট্যান্ডার্ড
service <name> stopকমান্ড ব্যবহার করে। উদাহরণস্বরূপ, যদি আমি heat-engine কন্টেইনারে থাকি, আমিservice heat-engine stopচালাব। -
ডেভেলপমেন্ট ভার্সন ক্লোন করুন
এখন मेरे একটি কন্টেইনার আছে যা টার্গেট সার্ভিস রান করার জন্য প্রস্তুত, তাই আমি একচুটি আসল কোড ক্লোন করতে পারি যেটি আমি কাজ করব। এর জন্য, আমি অফিশিয়াল git রিপোজিটরি, আমার ফর্ক কাস্টম চেঞ্জসহ, বা হয়তো Gerrit থেকে একটি প্যাচ ব্যবহার করতে পারি, যদি আমি একটি রিভিউ করি।
-
ডিপেন্ডেন্সি আপডেট করুন
ডেভেলপমেন্ট ভার্সনটি আশা করি Ansible প্লেবুকগুলো দ্বারা ইনস্টল করা ভার্সন থেকে ভিন্ন ডিপেন্ডেন্সি সেট চাইতে পারে, তাই সেফটি জন্য, আমি কন্টেইনারের ভিতরে
pip install -r requirements.txtচালাই। যেহেতু OSA নিজস্ব প্রাইভেট Python প্যাকেজ রিপোজিটরি তৈরি করে, একটি রিকোয়ার্ড ভার্সন একটি প্যাকেজের সেটা সেখানে উপলব্ধ নাও হতে পারে। যখন এটা ঘটে, আমি কন্টেইনারের /root/.pip/pip.conf ফাইলেno-index = Falseসেট করি pypi-এ অ্যাক্সেস এনাবল করতে, এবং তারপর আবার চেষ্টা করি। -
ডাটাবেস সিঙ্ক করুন
OSA-তে ইনস্টল করা অরিজিনাল ভার্সন এবং আমার ডেভেলপমেন্ট ভার্সনের মধ্যে ডাটাবেস মাইগ্রেশনে আরেকটি সম্ভাব্য পার্থক্য থাকতে পারে, তাই আমি সবসময় ডাটাবেস সিঙ্ক করি, যেন কি চলে। এটি করার কমান্ড সার্ভিসের মধ্যে কিছুটা ভিন্ন, কিন্তু সাধারণত ম্যানেজমেন্ট স্ক্রিপ্ট আহ্বান করতে হয়
db_syncঅপশন দিয়ে। উদাহরণস্বরূপ, Keystone-এ কাজ করার সময়, ডাটাবেস সিঙ্ক করার কমান্ড হলোkeystone-manage db_sync -
অরিজিনাল কনফিগ ফাইলগুলে পরিবর্তন আনুন, যদি প্রয়োজন হয়
প্লেবুকগুলো সকল সার্ভিসের জন্য কনফিগারেশন ফাইল তৈরি করে, তাই, অধিকাংশ কেসে, ইনস্টলার দ্বারা /etc ডিরেক্টরিতে ছেড়ে দেওয়া কনফিগারেশন ডেভেলপমেন্টের জন্য বিনা পরিবর্তন ব্যবহার করা যাবে। আমার কাজের সাথে সম্পর্কিত যেকোনো কাস্টম চেঞ্জ প্রয়োজন হলে, আমি ম্যানুয়ালি টেক্সট এডিটর দিয়ে সেগুলো করি।
-
ম্যানুয়ালি রান করুন, অথবা ইনস্টল করে সার্ভিস হিসেবে রান করুন
শেষে, ডেভেলপমেন্ট ভার্সনটি শুরু করা যাবে। এটি সহজে করতে, শুধু Python অ্যাপ্লিকেশনটি সরাসরি রান করুন। উদাহরণস্বরূপ, যদি আমি heat-engine সার্ভিসে কাজ করি, আমি প্রজেক্টের রুট ডিরেক্টরি থেকে
bin/heat-engineরান করতে পারি সার্ভিসটি ফোরগ্রাউন্ডে শুরু করতে, লগস টার্মিনালে আউটপুট করতে। সার্ভিসটি বন্ধ করতে, আমি Ctrl-C চাপতে পারি, ঠিক DevStack-এর মত।টার্মিনাল-ফ্রেন্ডলি ডিবাগার, যেমন pdb (কমান্ড লাইন) বা pudb (ইন্টারঅ্যাক্টিভ), কন্টেইনারের ভিতরে ইনস্টল করা যাবে এবং খুব ভালো কাজ করে। হোস্ট থেকে কন্টেইনারে SSH ওভার রিমোট ডিবাগিংও সম্ভব, যদি আপনি আরও কমপ্লেক্স ডিবাগার পছন্দ করেন যেমন PyCharm।
অধিকাংশ সার্ভিসের জন্য, ম্যানুয়ালি রান করাই যথেষ্ট DevStack-এর মত কমফোর্টেবলি কাজ করার জন্য। একমাত্র এক্সসেপশন হলো সার্ভিসগুলো যা Python স্ক্রিপ্ট সরাসরি রান করে না, যেমন Keystone, যা সাধারণত Apache-র অধীনে চলে। যদিও Apache প্রোডাকশনে ব্যবহার হয়, ডেভেলপমেন্টের জন্য Python অ্যাপ্লিকেশনটি সরাসরি রান করা সম্পূর্ণরূপে সেফ, যা সম্ভবত ইভেন্টলেট-বেসড ওয়েব সার্ভার রান করবে। যেকোনো কারণ لأ Apache ব্যবহার করতে হলে, বিকল্প হলো ডেভেলপমেন্ট ভার্সন ইনস্টল করা
python setup.py installচালিয়ে এবং তারপর ইতিমধ্যে ইনস্টল করা Apache সার্ভিস রিস্টার্ট করাservice apache2 restartদিয়ে। এটিও সম্ভব অ্যাপ্লিকেশনটি এর সোর্স ডিরেক্টরি থেকে রান করাpython setup.py developদিয়ে ইনস্টল করে এবং তারপর হোম ডিরেক্টরি Apache সাইট কনফিগারেশন ফাইলে যোগ করে।
OSA-AIO: সুবিধা
DevStack-এর পরিবর্তে OSA-র সাথে কাজ করা আমার জন্য অধিকাংশত একটি সুখদ অভিজ্ঞতা। আর ডিপেন্ডেন্সি কনফ্লিক্ট নেই এটা গেয়েট, কারণ OSA-তে, যদি আমি সার্ভিসগুলো রিবেস করি এবং সেটি নতুন ডিপেন্ডেন্সি চায়, অন্য সার্ভিসগুলো তাদের নিজস্ব কন্টেইনারে অনুপ্রভাবিত থাকে।
আমি এছাড়া দেখেছি আমি খুব কম হয় পুরো ডিপ্লয়মেন্ট স্ক্র্যাচ থেকে রিক্রিয়েট করতে। আমি সাধারণত তখন করি যখন আমি পুরো সিস্টেমকে OpenStack-এর একটি নতুন রিলিজে আপগ্রেড করতে চাই, কিন্তু, ডে টু ডে কাজের জন্য, আমি একটি এক্সিস্টিং ইনস্টলেশনে লোকাল আপডেট বা রিপেয়ার করা সহজ পাই। আমি পছন্দ করি একটি কন্টেইনার ডেস্ট্রয় করতে পারা এবং Ansible সেটি আমার জন্য রিজেনারেট করে বাকি সার্ভিসগুলোকে ছুঁয়ে না।
শেষে, আমি খুব পছন্দ করি যে OSA আমাকে বেছে নেওয়া দেয় সিস্টেমের কোন পার্টটি আমি ডেভেলপমেন্ট প্যাকেজ হিসেবে ইনস্টল করব, বাকি OpenStack ক্লাউডটি প্রোডাকশন ইউজের জন্য ইনস্টল এবং কনফিগারড রেখে।
OSA-AIO: অসুবিধা
বelingen, যেন সব কিছুর কেসে, OSA-র সাথে কাজ করার কিছু দিক আছে যা চমৎকার নয়, তাই আমি আপনাকে সেই দিকটিও দেখাতে চাই।
OSA একটি যুবক প্রজেক্ট, এবং, যেনো, এর কমিউনিটি থেকে বিস্তৃত সাপোর্ট নেই যা DevStack উপভোগ করে। এটি বিশেষভাবে গুরুত্বপূর্ণ যদি আপনি কোর OpenStack-এ নন-কোর মডিউলে কাজ করেন। আমি এটি লিখতে thời, OSA সাপোর্ট করে Keystone, Nova, Neutron, Glance, Cinder, Swift, Heat, Ceilometer এবং Horizon ডিপ্লয়। আপনি যদি এই লিস্টে নাই এমন একটি মডিউলে কাজ করতে চান, তবে OSA সম্ভবত আপনার জন্য তত উপকারী নয়। কিন্তু অন্যদিকে, আপনি যদি একটি Ansible প্লেবুক তৈরি করতে চান একটি বর্তমানে অনসাপোর্টেড মডিউলের জন্য, আপনাকে ওপেন আর্মস কাছে স্বাগত জানানো হবে।
সাধারণত, সকল মডিউলের জন্য Ansible ভেরিয়েবল হিসেবে এক্সপোজ করা কনফিগারেশন অপশনের একটি ফেয়ার নম্বর আছে, একটি এক্সসেপশন ছাড়া। Neutron-এর কথা আসলে, কনফিগারেশন তত ফ্লেক্সিবল নয়। নেটওয়ার্ক টানেল কন্টেইনার এবং VM জুড়ে সবসময় Linux Bridge ব্যবহার করে কনফিগার করা থাকে। উদাহরণস্বরূপ, আপনি যদি Open vSwitch-এ কাজ করতে চান, আপনাকে প্লেবুকগুলো চালানোর পর ম্যানুয়ালি কনফিগারেশন মডিফাই করতে হবে, যা মজার নয়। এছাড়া, Neutron প্লাগইনগুলোর কোনোটিই এই সময় সাপোর্টেড নয়।
উপসংহার
আশা করি আপনি openstack-ansible-র সাথে আমার ওয়ার্কফ্লো আকর্ষণীয় পাবেন শিখতে এবং ব্যবহার করতে। এটা আমার সময় বাঁচিয়েছে Heat আপস্ট্রিম ফিচার এবং বাগ ফিক্সে কাজ করার সময়। আমি OSA-র ওপর অনেক নির্ভর করেছি Keystone ফেডারেশন ডিবাগ এবং ট্রাবলশুট করতে।
আপনি যদি OSA ব্যবহার করতে আগ্রহী হন, আমি আপনাকে কিছু সার্চ করার উৎসাহিত করব, কারণ এটি আপনাকে আরও আর্টিকেল এবং ব্লগ পোস্টে নিয়ে যাবে (যেমন এটি বা এই অন্য একটি), যেখানে অন্যান্য OpenStack কন্ট্রিবিউটর ব্যাখ্যা করেছেন কীভাবে তারা OSAকে তাদের নিজস্ব ওয়ার্কফ্লোতে ইনকর্পোরেট করেছেন।