Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Máy Ảo

OpenStack có phù hợp với bạn không? Hướng dẫn thực tế để bắt đầu

Đây là một câu hỏi rất hay, và có nhiều lý do cho việc đó. Thứ nhất, OpenStack hiện nay là một từ khóa "buzzword" lớn, ai cũng nghĩ mình là chuyên gia đều khuyên bạn nên dùng nó. Giống như từ "cloud", sự kháng cự là vô nghĩa. Thứ hai, nó liên quan đến ảo hóa, nên bạn có thể muốn tìm hiểu thêm. Thứ ba, bốn... các lý do sẽ rõ ràng hơn trong bài viết này. Nhưng cốt lõi là: bạn có nên và có thể "dính dáng" đến OpenStack không? Tôi đặt câu hỏi này từ góc nhìn một người có trực giác kỹ thuật tự nhiên và kinh nghiệm đáng kể với OpenStack. Bài viết hôm nay sẽ hướng dẫn bạn cách bắt đầu với công nghệ này.

Mong đợi so với thực tế

Vậy là OpenStack. Nhưng bạn có thực sự biết ai, ngoài ba, bốn nhà cung cấp hosting lớn, đang thực sự sử dụng nó không? Mọi người đều nói về nó, nhưng khó tìm thấy ví dụ thực tế. Điều đó khiến tôi tò mò: tại sao lại vậy?

Tôi quyết định bắt đầu hành trình OpenStack để xem có thể nhanh chóng làm chủ công nghệ này và cung cấp hướng dẫn cho bạn. Nhưng rất sớm tôi nhận ra phần mềm này không đơn giản, nó có sức mạnh khiến ngay cả những "geek" 직관 nhất cũng phải cúi đầu. Tôi thay đổi chiến lược: từ hướng dẫn từng bước chuyển sang câu hỏi tồn tại về tính liên quan của OpenStack, cũng như nỗ lực thực sự để lấp đầy khoảng trống giữa mong đợi và thực tế khắc nghiệt.

OpenStack rất khó

Sau nhiều giờ dài đau đớn "phép thuật" dòng lệnh, tôi nhận ra OpenStack không thể "ru" được như KVM hay Docker. Vài ví dụ nhanh, đọc man page và thử sai làm đúng trong shell còn xa mới bắt đầu sử dụng phần mềm. OpenStack như một ngọn núi tuyết, mà tôi chỉ có dép lê để leo.

Càng chơi với nó, tôi càng thấy nó phức tạp và "over-architected" (quá thiết kế) đến mức rối rắm. Càng sửa chữa, nó càng lách cách, trở nên kém hấp dẫn, và câu hỏi tồn tại càng trở nên triết lý hơn.

Những gì không nên làm

Trước khi hướng dẫn bạn bắt đầu, cần làm rõ vài điểm quan trọng. Thứ nhất, kiến trúc: cực kỳ phức tạp, mô-đun hóa cao, mỗi thành phần là một dịch vụ riêng biệt – có nhiều thành phần được coi là tốt. Thứ hai, tính liên quan đến kinh doanh. Tại sao bạn muốn dùng OpenStack? Nó trước hết là dịch vụ hạ tầng. Nếu bạn cần chạy doanh nghiệp, bạn không cần biết OpenStack, chỉ cần sử dụng nó. Bạn có đủ thời gian, tiền bạc, kỹ năng và nhân lực để đầu tư học công nghệ này không? Cần gấp đến đâu, cần sâu đến đâu? Mục tiêu là gì? Bạn sẽ là nhà cung cấp hay người tiêu dùng OpenStack? Nếu dùng cho kinh doanh, quy mô bao lớn? Chục, trăm, ngàn, hay chục ngàn máy ảo?

Đoạn quan trọng này thường bị các quản lý thiếu hiểu biết bỏ qua khi vội vã nhảy vào "xe buzzword", khiến họ và nhân viên nhầm lẫn giữa cung cấp và sử dụng dịch vụ, biến hạ tầng thành kinh doanh mà nó không phải. Kết quả: OpenStack chỉ tồn tại ở hai cực – triển khai quy mô khổng lồ hoặc không có gì.

Những gì nên làm

OpenStack có ý nghĩa nếu bạn muốn đứng đầu công nghệ, xây dựng private/public cloud, định vị là nhà cung cấp dịch vụ, hoặc tìm kiếm sự thống trị trong lĩnh vực cloud (mục tiêu thứ cấp nhưng hợp pháp). Nó cũng hữu ích nếu chỉ muốn test phần mềm và chạy workload lên đó. Bạn có thể coi nó như "hộp đen" hoặc có hiểu biết sơ bộ để troubleshoot khi sự cố xảy ra.

Câu hỏi lớn: làm thế nào để bắt đầu? Quá trình thủ công kinh khủng: cần vài cuốn sách, vài tuần thời gian, hàng loạt lệnh dòng lệnh tạo user, group, role, database, network bridge, container... Chúng ta muốn bỏ qua tất cả đó. Thay vì học tuyến tính, chúng ta bắt đầu bằng cơ chế tự động hóa để chạy mọi thứ, tin tưởng cài đặt tự động. Sau khi cấu hình thành công, chúng ta sẽ quay ngược lại từng bước.

Triển khai OpenStack Ansible (OSAD)

Tìm kiếm web sẽ thấy hàng chục giải pháp tuyên bố là "thánh grail" quản lý/triển khai OpenStack. Chúng tồn tại vì OpenStack quá khó dùng, thay vì sửa lỗi cốt lõi, internet tràn ngập giải pháp overlay ad-hoc. OSAD là một dự án cộng đồng như vậy, ngoài ra còn Fuel, Inception, TripleO, Compass, PackStack... Hướng dẫn này tập trung vào OSAD. Lưu ý: tôi có liên hệ với dự án này, nếu thấy thiên vị hãy bỏ qua bài viết.

Cài đặt cơ bản

Kỹ thuật chỉ cần chạy hai lệnh: tải script master từ GitHub repo, chạy Ansible setup. Ansible là công cụ quản lý cấu hình (giống Puppet, Chef, CFEngine), tự động triển khai chính sách phần mềm trên máy đích. Logic triển khai được mã hóa trong Playbooks dùng cú pháp YAML. Phần mềm parse Playbooks và gửi cấu hình đến các host đích qua SSH.

Cảnh báo!

Tôi không đi sâu vào cách Ansible hoạt động, chỉ nêu khái quát. Cú pháp khá trực quan, khi hiểu được bạn có thể theo dõi logic file yml của OSAD. Ví dụ Playbook từ tài liệu chính thức:

---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
    remote_user: root
  tasks:
    - name: ensure apache is at the latest version
      yum: pkg=httpd state=latest
    - name: write the apache config file
      template: src=/srv/httpd.j2 dest=/etc/httpd.conf
      notify:
        - restart apache
    - name: ensure apache is running (and enable it at boot)
      service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

Giải thích: hosts định nghĩa host chạy Playbook; vars đặt biến; remote_user user thực thi (root); tasks định nghĩa các tác vụ; name tên tác vụ; yum cài gói httpd mới nhất; template copy file cấu hình; notify khai báo trigger restart apache sau khi copy thành công; handlers xử lý restart service.

Sau khi triển khai OSAD, bạn có thể duyệt các file yml để khám phá cài đặt. Sẽ thấy nhiều thứ phức tạp (container, bridge...), nhưng ý tưởng là tránh lộn xộn ban đầu, để người khác lo phần rối rắm.

Bắt đầu

Hai lệnh "yêu quý":

bash <(curl https://git.openstack.org/cgit/stackforge/os-ansible-deployment/plain/scripts/run-aio-build.sh)
/opt/stackforge/os-ansible-deployment/openstack-ansible setup-everything.yml

Quá trình mất khoảng 40-50 phút tùy phần cứng. Cần CPU, RAM, ổ đĩa dồi dào: 4 core, 8GB RAM, 40GB disk là đủ, ngay cả laptop tốt cũng chạy được. Đừng mong hiệu năng cao.

Nếu thấy output như sau là thành công:

...
+ unset -f deactivate
+ exit 0
/opt/stackforge/os-ansible-deployment
----------------------------------------------------------------
- [ Run Time = 2422 seconds || 40 minutes ]
----------------------------------------------------------------
- [ Status: Success ]
----------------------------------------------------------------
+ cat
++ ip -o -4 addr show dev eth0
++ awk -F '[ /]+' '/global/ {print $4}'
+ chmod +x /etc/update-motd.d/20-openstack
+ cat
++ pwd
+ chmod +x /etc/update-motd.d/21-galera

Thử nghiệm với Nova

Bước tiếp theo: chạy vài lệnh Nova. Hệ thống sẽ tạo nhiều interface mạng, bridge, thiết bị ảo khi spawn container (tương tự Docker). Lệnh Nova dài dòng, tốt hơn là thiết lập biến môi trường:

nova --os-user-name admin --os-password secrete --os-tenant-name admin --os-auth-url https://172.29.236.100:5000/v2.0 image-list
+------------------------------------+--------+--------+--------+
| ID | Name | Status | Server |
+------------------------------------+--------+--------+--------+
| 896fa8ca-682b-4f4e-859e-9f08b... | cirros | ACTIVE | |
+------------------------------------+--------+--------+--------+

nova --os-user-name admin --os-password secrete --os-tenant-name admin --os-auth-url https://172.29.236.100:5000/v2.0 hypervisor-list
+----+---------------------+-------+---------+
| ID | Hypervisor hostname | State | Status |
+----+---------------------+-------+---------+
| 1 | server-001 | up | enabled |
+----+---------------------+-------+---------+

Thiết lập biến môi trường:

export OS_USERNAME=admin
export OS_PASSWORD=secrete
export OS_TENANT_NAME=admin
export OS_AUTH_URL=https://172.29.236.100:5000/v2.0

Sau đó dùng lệnh Nova ngắn gọn để boot host. Cần chỉ định image, flavor, tên. Quan trọng: cần SSH key và rule firewall để kết nối VM.

nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
nova keypair-add Dedoimedo > dedoimedo.pem
chmod 0600 dedoimedo.pem
nova boot First --image 896fa8ca-682b-4f4e-859e-9f08b82b47fb --flavor 3 --key-name Dedoimedo

Output bao gồm mật khẩu tự động và IP address. SSH vào VM:

ping -c 1 172.29.248.13
PING 172.29.248.13 (172.29.248.13) 56(84) bytes of data.
64 bytes from 172.29.248.13: icmp_seq=1 ttl=64 time=0.634 ms
ssh -i dedoimedo.pem cirros@172.29.248.14

Nếu thành công, bạn đã chạy được OpenStack, chướng ngại vật đầu tiên đã bị gỡ bỏ.

Các vấn đề có thể gặp

Dù đường thủ công hay tự động, đều có thể gặp sự cố. Phần này liệt kê lỗi thường gặp khi làm việc với OpenStack, Ansible hoặc cả hai.

Lỗi thiếu module Python netaddr:

openstack-ansible setup-everything.yml
Variable files: "-e @/etc/openstack_deploy/user_secrets.yml -e @/etc/openstack_deploy/user_variables.yml "
ERROR: Inventory script (inventory/dynamic_inventory.py) had an execution error: Traceback (most recent call last):
File "/openstack/os-ansible-deployment/playbooks/inventory/dynamic_inventory.py", line 21, in <module>
import netaddr
ImportError: No module named netaddr

Khắc phục: pip install netaddr

Lỗi SSH trong AIO build:

GATHERING FACTS ***************************************************************
fatal: [aio1] => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh
TASK: [apt_package_pinning | Add apt pin preferences] ***************************************************************
FATAL: no hosts matched or all hosts have already failed -- aborting

Có thể do hai bug đã biết, hoặc clone repo vào thư mục không rỗng:

fatal: destination path '/opt/stackforge/os-ansible-deployment' already exists and is not an empty directory.

Tài liệu tham khảo thêm

Nếu hướng dẫn này quá dễ:

  • Một số slide thú vị.
  • Red Hat Distribution of OpenStack (RDO)
  • Mirantis OpenStack Deployment and Management - Fuel

Kết luận

Có quá nhiều "hóa thân" của OpenStack. Nó nhân bản cảnh观 Linux phức tạp, rực rỡ và gây nhầm lẫn vào bốn chiều của riêng nó, và chúng ta có thể phải chịu đựng một thập kỷ dài các buzzword và name-dropping cho đến khi đạt được tiêu chuẩn và sự cân bằng. OSAD ổn, nhưng dựa trên Ubuntu 14.04 + LXC, sản xuất có thể muốn Red Hat/CentOS. Hãy test các công cụ khác sau khi đã "rửa tội" với OpenStack.

Nếu không muốn chờ vài năm bão công nghệ qua đi, hãy bắt đầu chơi với OpenStack ngay, bất kể mục tiêu kinh doanh hay backbone. Bước đầu luôn choáng ngợp, hãy dùng framework hỗ trợ rồi quay ngược lại công nghệ cốt lõi. OSAD là ví dụ tốt, tuy chưa hoàn hảo nhưng vượt năm ánh sáng so với OpenStack thuần túy, thực sự usable và mang lại trực giác kỹ thuật. Hy vọng hướng dẫn này giúp bạn tiến bộ. Không dễ, lộn xộn, tôi cũng không quá thích. Nhưng đó là tốt nhất bạn có thể làm với công cụ hiện có. Tóm lại: đừng suy nghĩ quá nhiều, tránh cài thủ công, dùng Ansible, fix vài lỗi lần đầu, làm quen với Nova và bạn bè. Sau một thời gian, quay lại OpenStack và tinh chỉnh dần cho đến khi "quái thú" được thuần phục.

P.S. Tôi đã trình bày chủ đề này hấp dẫn hơn tại hội nghị CloudOpen năm nay tại Dublin, Ireland. Chi tiết ở sự lựa chọn của bạn. Cheers.