CSC LAB

NUTANIX CALM: WebServer – MySQL – HAProxy

OVERVIEW

Thời gian ước tính: 45-60 phút

Bài lab sẽ cover các phần chính như:

  • Giới thiệu Nutanix Calm UI
  • Tạo blueprint để triển khai mô mình ứng dụng WebServer trên LinuxOS
  • Triển khai Linux, Nginx, MySQL và PHP (mô hình LEMP stack)
  • Tạo HAProxy cho Nginx Server
  • Click-Click-Click

CALM OVERVIEW

Như đã đề cập trong bài trước, Nutanix Calm cho phép bạn tạo, provision và quản lý ứng dụng của bạn trên cả Public lẫn Private Cloud. Nutanix Calm cung cấp vòng đời ứng dụng, monitoring và khả năng troubleshoot dễ dàng nhờ tính năng Audit. Hỗ trợ self-service và tự động hoá đa nền tảng từ VMWare, AWS, Azure,…để quản lý tất cả hạ tầng của bạn.

Trong nhiều công ty, tổ chức “quy trình” DevOps chưa được áp dụng, dẫn đến có sự xa cách khá lớn giữa team phát triển và team hạ tầng. Với Nutanix Calm, nó là sợi dây gắn kết giúp 2 teams dễ dàng trao đổi, giảm thiểu tối đa thời gian cho các tác vụ không cần thiết. Team hạ tầng sẽ tạo ra các blueprints để triển khai phần code từ team developer, việc này giúp 2 teams có tiếng nói chung và triển khai được nhanh chóng.

NETWORK VERIFICATION

Trước khi bắt đầu, chúng ta sẽ kiểm tra xem cluster có thể tạo được máy ảo hay không (hiển nhiên nhưng là bước tối quan trọng)

  • Login vào Prism Element (chúng ta sẽ gọi là PE trong toàn bộ bài lab này)
  • Sau khi đăng nhập, bạn sẽ thấy biểu tượng “Config” ở góc trên cùng bên phải và ấn vào, sau đó chọn Network Configuration

Đảm bảo đã bạn có đường một Network, nếu không hãy tạo mới


Note

Recommend cấu hình mạng sử dụng IP Address Management để cấp phát địa chỉ IP cho các VMs được tạo ra từ các blueprints sau này

PROJECT VERIFICATION

Login vào Prism Central (giờ sẽ gọi tắt là PC), Select -> Service -> Calm

Tạo Project

Về cơ bản sẽ có 3 phần setup chính trong mục Project này

Trong Accounts, đảm bảo có ít nhất 1 local network được chọn (trước đó ta đã tạo network có tên Nutanix-Calm, giờ chọn nó) và set tài nguyên được tối đa cho Account này

Ngoài ra Calm còn có thể triển khai trên đa nền tảng bao gồm cả VMware vSphere (mình đã tạo trước đó) như trong mục Environment bên dưới

CREATING A BLUEPRINT

Là một framework cho mỗi ứng dụng được triển khai bởi Calm. Nó là templete miêu tả các bước cần thiết để provision, cấu hình, thực thi các tasks trên dịch vụ và ứng dụng mà nó tạo.

Bạn có thể sử dụng blueprints để provision các VM model từ đơn giản như Single-VM đến mô hình phức tạp hơn Muilti-tier VM (multi-tier application)

  1. Tại Prism Central -> Service -> Calm
  2. Chọn Blueprints trong thanh công cụ bên trái
  3. Tạo Blueprint > Multi VM/Pod Blueprint

Note

Khi làm theo bài lab này, sẽ có nhiều mục cần khai báo ví dụ tên dịch vụ hoặc VM. Bởi vậy mình recommend các bạn nên copy và paste các tham số như trong phần demo tránh tối đa các lỗi có thể xảy ra, đảm bảo bài lab chạy thành công.

Note

(http://@@{HAProxy.address}@@/)  hay  @@{Variable}@@. Đây được gọi là “Calm Macro” sẽ tự động điền những tham số tương ứng cho ứng dụng khi chạy. Ví dụ @@{HAProxy.address}@@ sẽ được truyền địa chỉ IP của máy ảo HA Proxy bởi vậy chúng ta chỉ cần copy và paste chính xác các biến hiển thị bên dưới. Calm được tích hợp sẵn nhiều Macro, nếu muốn tìm hiểu thêm bạn có thể truy cập tại đây Calm Macros

CREATING A BLUEPRINT

Đầu tiên, chúng ta tạo một credential được sử dụng để xác thực Calm cho các máy ảo CentOS mà bạn sẽ triển khai. Có 2 options cho cả Windows lẫn Linux là Password hoặc SSH Private Key. Credentials nên được tạo cho mỗi Blueprint vì lý do bảo mật, nó sẽ bị ẩn sau khi chúng lưu cấu hình Credential. Mỗi Blueprint bắt buộc phải được gán với ít nhât 1 Credential.

Bài lab này sử dụng “Generic Cloud” CentOS image (định dạng file .qwcow2). Đây là file định dạng phổ biến của Linux bởi nó nhẹ, hỗ trợ cấu hình Cloud-Init (bạn không cần phải cấu hình OS khi chạy như thông thường nữa) và sử dụng cặp khoá xác thực SSH (Public/Private) thay vì password trong nhiều môi trường Public Cloud

  1. Chọn Credentials.
  2. Tiếp tục chọn Credential và điền thông tin dưới đây
    • Credential Name– CENTOS
    • Username – centos
    • Secret Type – SSH Private Key
    • Key – Paste in your own private key, or use:
Copy to Clipboard

DEFINDING VARIABLE

Các biến cho phép khả năng mở rộng của Blueprints, có nghĩa là một Blueprint có thể được sử dụng cho nhiều mục đích và môi trường tùy thuộc vào cấu hình của các biến của nó. Các biến có thể là các giá trị tĩnh được lưu như một phần của Blueprints hoặc chúng có thể được chỉ định trong Runtime (khi Blueprints chạy). Các biến dành riêng cho một Application Profile (chúng ta sẽ đề cập bên dưới) nhất định, là nền tảng mà Blueprints được triển khai. Ví dụ: Blueprintcó khả năng được triển khai cho cả AHV và AWS sẽ có 2 Application Profile. Mỗi cấu hình có thể có các biến và cấu hình VM riêng lẻ.

Theo mặc định, các biến được lưu trữ dưới dạng plain text và hiển thị trong Configuration Pane.  Ngoài ra bạn có thể chọn tính năng Secret để ẩn giá trị của biến ví dụ như mật khẩu.

Các biến có thể được sử dụng trong các tập lệnh được thực thi dựa trên các đối tượng bằng cách sử dụng cấu trúc @@{variable_name}@@. Calm sẽ mở rộng và thay thế biến bằng giá trị thích hợp trước khi gửi đến VM.

  1. Tại Configuration Pane bên phải của Blueprint Editor, bạn sẽ thấy phần Variables, thêm các biến dưới đây
Variable Name Value Secret Run time
User_initials cuong           X
Mysql_user root      X
Mysql_password Nutanix/4u
Database_name homestead
INSTANCE_PUBLIC_KEY Nhập public key của bạn hoặc sử dụng key bên dưới (nhưng bạn sẽ không SSH vào được các máy ảo này, lúc này là các application)
Copy to Clipboard

THÊM DOWNLOADABLE IMAGE

Với Calm, ta có thể chọn một Downloadable Image từ đường link URI làm disk image. Trong suốt quá trình depoy ứng dụng, PC sẽ tự động download và khởi tạo image này từ đường link đó. Nếu một image cùng tên đã tồn tại trên cluster, nó sẽ sử dụng luôn image này.

  1. Từ thanh công cụ góc trên, chọn Configuration > Downloadable Image Configuration và điền thông tin sau:

Note

Generic Cloud Image được sử dụng chủ yếu trong Nutanix Pre-Seeded Application Blueprints

2. Save và Back

Tạo Database Service

  1. Application Overview > Services, tạo mới

Service là các máy ảo được tạo mới hoặc đã có từ trước hoặc Bare-metal. Lab này chúng ta sẽ tạo các Services: Database, WebServer và Load balancer tương ứng với mỗi máy ảo

  1. Thêm các thông tin sau:
  • Service Name– MySQL
  • Name– MySQLAHV
  • Cloud– Nutanix
  • OS– Linux
  • VM Name– @@{User_initials}@@-MYSQL-@@{calm_array_index}@@-@@{calm_time}@@

Note

Chúng ta sử dụng biến @@{User_initials}@@ đã được khai báo ở trên để tạo tên VM. Đồng thời sử dụng mảng index cho scale out services @@{calm_array_index}@@ và mốc thời gian @@{calm_time}@@

  • Image– CentOS_7_Cloud
  • Device Type – Disk
  • Device Bus – SCSI
  • Chọn Bootable
  • vCPUs – 2
  • Cores per vCPU – 1
  • Memory (GiB) – 4
  • Chọn Guest Customization
    • Type – Cloud-init
    • Script –
Copy to Clipboard

Note

Chúng ta khai báo SSH public key trong Cloud-Init như một biến, nghĩa là giờ đây ta sẽ truy cập máy ảo bằng SSH

  • Chọn Network Adapters (NICs)
  • NIC 1 – Là đường Network chúng ta đã tạo trước đó Nutanix-Calm
  • Credential – CENTOS

3. Ấn lưu

4. Biểu tượng MySQL sẽ xuất hiện ngay khi bạn thêm tên Service, cuộn lên đầu Configuration Pane và chọn Package tab.

Package là cấu hình (các) ứng dụng được cài đặt trên Services, là nơi để viết code và thực thi một tập lệnh trên Service VM.

5. Điền MySQL_PACKAGE vào Package Name, sau đó ấn Configure Install

6. Chọn “+ Task” và điền thông tin dưới đây vào Configuration Pane để định nghĩa script mà Calm sẽ thực thi trên MySQL Service VM:

  • Task Name – Install_sql
  • Type – Execute
  • Script Type – Shell
  • Credential – CENTOS
  • Script –
Copy to Clipboard

Xem lại tập lệnh cài đặt MySQL, cấu hình thông tin đăng nhập và tạo database liệu dựa trên các biến được chỉ định trước đó.

7. Ấn MySQL service icon để trở lại Workspace Pane, chọn Package tab trong Configuration Pane (CP)

8. Chọn Configure uninstall

9. Chọn + Task, và điền:

    • Task Name – Uninstall_sql
    • Type – Execute
    • Script Type – Shell
    • Credential – CENTOS
    • Script –
Copy to Clipboard

Tập lệnh gỡ cài đặt có thể được sử dụng để gỡ bỏ các gói, cập nhật các dịch vụ mạng như DHCP và DNS, xóa các mục nhập khỏi Active Directory,…nhưng nó không được sử dụng trong bài lab này.

10. Lưu

Vậy là ta đã tạo xong một Service chạy MySQL với đầy đủ thông tin như tên, RAM, Disk Image, Script,…Tiếp theo chúng ta sẽ tạo thêm 2 Service tương tự là WebServer và HAProxy

TẠO WEBSERVER SERVICE

Về cơ bản các bước khá giống với MySQL, ta chỉ cần thay đổi 1 vài thông số sau:

1. Application View > Service > tạo thêm 1 Service

2. Tại CP, ta điền:

  • Service Name – WebServer
  • Name – WebServerAHV
  • Cloud – Nutanix
  • OS – Linux
  • VM Name – @@{User_initials}@@-WebServer-@@{calm_array_index}@@
  • Image – CentOS_7_Cloud
  • Device Type – Disk
  • Device Bus – SCSI
  • Chọn Bootable
  • vCPUs – 2
  • Cores per vCPU – 1
  • Memory (GiB) – 4
  • Chọn Guest Customization
    • Type – Cloud-init
    • Script –
Copy to Clipboard
  • Chọn  Network Adapters (NICs)
  • NIC 1 – Nutanix-Calm
  • Credential – CENTOS

3. Chọn Package tab

4. Chọn Package Name và click Configure install

  • Package Name – WebServer_PACKAGE

5. Chọn + Task, và điền trong CP:

  • Name Task – Install_WebServer
  • Type – Execute
  • Script Type – Shell
  • Credential – CENTOS
  • Script –
Copy to Clipboard

Script này cài đặt PHP và Nginx để tạo một WebServer sau đó là ứng dụng dựa trên Laravel. Nó sẽ tự cấu hình theo script, bao gồm update DB_HOST với địa chỉ IP của MySQL bằng cách truy cập tới tập lệnh @@{MySQL.address}@@

6. Chọn Package tab và chọn Configure uninstall

7. Chọn + Task và điền:

  • Name Task – Uninstall_WebServer
  • Type – Execute
  • Script Type – Shell
  • Credential – CENTOS
  • Script –
Copy to Clipboard

8. Ngoài ra bạn có thể nhân bản WebServer ra tuỳ theo nhu cầu phù hợp với tài nguyên của bạn

Cuộn lên CP, chọn Service tab

9. Lưu

TẠO LOAD BALANCER SERVICE

Để tận dụng khả năng scale-out web, ứng dụng của bạn cần có khả năng tải các kết nối load balancer trên nhiều Server VMs. HAProxy là một trình cân bằng tải TCP / HTTP mã nguồn mở miễn phí được sử dụng để phân chia lưu lượng traffic trên nhiều máy chủ. Nó có thể được sử dụng ở mọi nơi, từ các triển khai nhỏ, đơn giản đến các môi trường web-scale lớn như GitHub, Instagram và Twitter.

Tại bước này, chúng ta có 2 lựa chọn:

  • Tạo thủ công Service VM như đã làm trước đó với MySQL và WebServer
  • Clone Service VM từ 1 trong 2 máy trên rồi thay đổi cấu hình, script nếu mô hình của bạn đủ lớn

Nhưng trong bài lab này chúng ta nên tạo thủ công để hiểu rõ hơn về Calm

1. Application Overview > Services

2. Tạo mới Service và điền thông tin sau vào CP:

    • Service Name – HAProxy
    • Name – HAPROXYAHV
    • Cloud – Nutanix
    • OS – Linux
    • VM Name – @@{User_initials}@@-HAProxy-@@{calm_array_index}@@
    • Image – CentOS_7_Cloud
    • Device Type – Disk
    • Device Bus – SCSI
    • Chọn Bootable
    • vCPUs – 2
    • Cores per vCPU – 1
    • Memory (GiB) – 4
    • Chọn Guest Customization
      • Type – Cloud-init
      • Script –
Copy to Clipboard
    • Chọn Network Adapters (NICs)
    • NIC 1 – Nutanix-Calm
    • Credential – CENTOS

3. Package Name – HAPROXY_PACKAGE

4. Chọn + Task và điền:

  • Name Task – Install_HAProxy
  • Type – Execute
  • Script Type – Shell
  • Credential – CENTOS
  • Script –
Copy to Clipboard

Lưu ý việc sử dụng macro @@{WebServer.address}@@ trong tập lệnh ở trên. Macro trả về một danh sách được phân tách bằng dấu phẩy của tất cả các IP của các máy ảo trong dịch vụ đó. Sau đó, tập lệnh sử dụng lệnh “tr” để thay thế dấu phẩy bằng dấu xuống dòng. Kết quả là một mảng, $ hosts, chứa các chuỗi của tất cả các địa chỉ IP của WebServer. Sau đó, mỗi địa chỉ được thêm vào tệp cấu hình HAProxy.

5. Chọn Pakage tab và click Configure uninstall

  • Name Task – Uninstall_HAProxy
  • Type – Execute
  • Script Type – Shell
  • Credential – CENTOS
  • Script –
Copy to Clipboard

6. Lưu

THÊM DEPENDENCIES

Vì ứng dụng của chúng ta yêu cầu database chạy trước khi máy chủ web khởi động, nên Blueprint của chúng ta yêu cầu dependency để thực thi thứ tự.

Application Overview > Application Profile , mở Default Application Profile và chọn Create Action.

1. Lưu ý rằng Orange Orchestration Edge nối từ tác vụ MySQL Start đến tác vụ WebServer Package Install. Các đường này được tạo tự động bởi Calm do tham chiếu macro @@{MySQL.address}@@ trong tác vụ WebServer Package Install. Vì hệ thống cần biết địa chỉ IP của MySQL Service trước khi có thể tiến hành tác vụ WebServer Package Install, nên Calm có thể tạo điều phối cho bạn một cách thông minh. Điều này yêu cầu MySQL Service phải được khởi động trước khi chuyển sang tác vụ WebServer Package Install.

2. Quay lại tác vụ HAProxy Package Install, tại sao các đường điều phối được tạo tự động giữa các dịch vụ WebServer và HAProxy?

Gợi ý là tra Script rồi thử tìm câu trả lời nhé hehe

3. Lưu Blueprint và chuẩn bị chạy nào

LAUNCHING VÀ MANAGING THE APPLICATION

1. Từ thanh công cụ phía trên trong Blueprint Editor, nhấp vào Lauch.

2. Tại tên ứng dụng (ví dụ: Mo4) và giá trị biến User_initials Runtime của bạn để đặt tên máy ảo.

3. Nhấp vào Deploy.

4. Ấn vào Application để xem các thông tin về Blueprint đã được triển khai

Tab Audit có thể được sử dụng để theo dõi quá trình triển khai ứng dụng.

Trạng thái Running tức là các ứng dụng đã được triển khai thành công

Tại sao tất cả các máy ảo này trên CentOS không triển khai song song sau khi tải xuống disk image?

Khi ứng dụng chạy đến trạng thái Running, hãy điều hướng đến Services tab và HAProxy để xác định địa chỉ IP của bộ cân bằng tải của bạn.

Tại Services tab ta dễ dàng thấy thông tin của 3 ứng ụng được cài trên VMs bao gồm WebServer – MySQL – HAProxy. Ví dụ Service HAProxy có tên là cuong-HAProxy-0  và địa chỉ là 192.168.1.18

Giờ chúng ta sẽ truy cập địa chỉ của HAProxy  192.168.1.18 này xem nó có hoạt động hay không

Chạy rồi! Như vậy chúng ta đã thực hành thành công bài lab xây dựng mô hình LEMP stack! Giờ ta sẽ thử SSH vào các máy ảo này.

Đã SSH được vào máy ảo HAProxy  192.168.1.18.

TAKEAWAYS

Những điều quan trọng bạn nên biết về Nutanix Calm là gì?

Nutanix Calm là một native component của Prism, được xây dựng và mang lại những lợi ích cho nền tảng này. Sự đơn giản của Acropolis cho phép Calm tối ưu để triển khai các ứng dụng, loại bỏ sự phức tạp quản lý hạ tầng bên dưới.

Trong 45-60 phút, chúng ta đã đi từ con số không đến việc triển khai đầy đủ các stack của hạ tầng. Vì Calm sử dụng các ngôn ngữ để cấu hình như bash, PowerShell, Python,…là những ngôn ngữ phổ biến và khá dễ để làm quen.

Một ngân hàng ở Ấn Độ đang sử dụng Calm để triển khai single-VM, giảm thời gian triển khai các ứng dụng từ 3 ngày xuống còn 2 giờ. Ngày nay nhiều khách hàng có rất ít hoặc gần không có tự động hóa (hoặc có nhưng rất phức tạp / khó hiểu, do đó hạn chế việc áp dụng). Điều này có nghĩa là Calm có thể là một giải pháp tuyệt vời cho họ ngay bây giờ, ngay hôm nay, ngay lập tức.

“Tự động hóa ứng dụng multi-cloud và quản lý vòng đời” nghe có vẻ to tát và đáng sợ. ‘Tương lai’ nghe có vẻ tuyệt vời, nhưng nhiều công ty, tổ chức gặp phải rất nhiều khó khăn để triển khai. Lắng nghe những gì khách hàng đang gặp khó khăn ngày hôm nay (backup yêu cầu kỹ năng chuyên môn, triển khai VM mất nhiều thời gian, khó nâng cấp).

Blueprint Editor cung cấp một giao diện người dùng đơn giản để lập mô hình các ứng dụng phức tạp.

Blueprint gắn liền với các SSP Projects có thể được sử dụng để thực thi và kiểm soát truy cập dựa trên vai trò (Role-Based Access Control).

Có nhiều cách xác thực với máy ảo (khóa hoặc mật khẩu), điều này phụ thuộc vào hình ảnh nguồn.

Trạng thái ứng dụng có thể được theo dõi trong thời gian thực.

Các ứng dụng thường trải dài trên nhiều máy ảo, mỗi máy chịu trách nhiệm cho các dịch vụ khác nhau. Calm có khả năng tự động hóa và sắp xếp các ứng dụng.

Người dùng có thể nhanh chóng cung cấp toàn bộ stack ứng dụng để test hoặc reuse  mà không mất thời gian cho việc cấu hình thủ công.

Trên đây là một bài lab về Nutanix Calm automation triển khai mô hình LEMP stack. Đón chờ xem các bài viết hay ho khác tại đây nhé!