Thứ Hai, 17 tháng 8, 2015

Tự động các tiến trình với Chef

Gần đây, Chef (cùng với Puppet và các công cụ khác) đã phủ sóng rộng rãi trên các lĩnh vực DevOps và vận chuyển liên tục (continuous delivery). Các công ty lớn, bao gồm HP, chọn Chef như là một công cụ tự động hóa quan trọng của mình. Việc tự động này nhắm tới các vòng đời của phần cứng và phần mềm, và Chef như là một phần của nó vậy.

Rõ ràng là việc biết Chef là một kiến thức hữu dụng trong những ngày này, dù bạn có là một nhà lập trình phần mềm, quản trị mạng, quản trị cơ sở dữ liệu hay là kiêm nhiệm nhiều vị trí trên. Chìa khóa để học Chef đầu tiên là phải hiểu nó là gì. Tiếp theo bạn cần phải học một chút Ruby. Bạn không cần phải là một chuyên gia về Ruby mà cũng sử dụng Chef tốt.


Chef là gì ?

Chính xác thì Chef là gì ? Chef là một công cụ mà thông qua nó bạn có thể viết các scripts để tự động hóa các tiến trình (processes). Các tiến trình gì ? Rất nhiều thứ liên quan đến IT. Hãy nghĩ về những công việc bạn thường lặp đi lặp lại . Dưới đây là một danh sách ngẫu nhiên:

  • Cài đặt một hệ điều hành trên một máy tính mới
  • Nâng cấp một hệ điều hành trên một máy tính mới
  • Cài đặt các thư viện phần mềm
  • Cài đặt Apache
  • Thay đổi cấu hình hiện có của Apache
  • Nâng cấp MySQL
  • Thêm một người dùng vào MySQL
  • Sinh ra các SSH keys trên một server
  • Nâng cấp MySQL trên tất cả các development server 
  • Lấy files trên một server xuống từ một điều khiển nguồn
Hãy nhìn xem danh sách này có thể dài tới đâu ? Có cả triệu hướng khác nhau. Bất kể chuyên môn của bạn là gì, bạn cũng có hưởng lợi từ quá trình tự động hóa. Cùng nhìn vào quá trình làm việc của tôi: tôi làm việc trong một team phát triển phần mềm, tạo ra các ứng dụng web trong node.js. Các ứng dụng chạy trên các servers nhân bản . Theo nhu cầu , các servers mới cần được bổ sung. Bạn có thể thấy được quá trình lặp đi lặp lại ở đó. Tuy nhiên đó là cho các live servers; các development servers có sự lặp lại tương tự.

Chúng tôi cần cung cấp một "clean" development server để thực hiện unit testing.
Trước đây, các developers thương yêu cầu đội IT giúp họ tìm một máy tính có sẵn để làm việc trên đó , bây giờ chúng tôi chỉ cần cấp phát một máy ảo trên nền tảng cloud. Mỗi khi chúng tôi có một clean server cùng với một hệ điều hành được, chúng tôi cần các công cụ của mình. Chúng tôi đang sử dụng node.js , chúng tôi cần tất cả các công cụ cho một node, cùng với vài thứ chúng tôi cần. Vậy ai muốn cài đi cài lại hoài như vậy ?

YES, Chúng ta có thể bắt đầu với một image. Nhưng, trong thực tế khi phát triển phần mềm thì ít nhất một tuần chúng ta cần thay đổi image này một lần. Thêm vào đó, mỗi server ảo có một địa chỉ IP và tên riêng, và các thông số chỉ riêng nó có như là các SSH keys, ...

Vì vậy chúng ta sử dụng các công cụ tự động thay thế. Công cụ này sẽ cấp phát server ảo trên nền tảng đám mây, bao gồm cả cài đặt hệ điều hành, cài đặt các công cụ node.js và các chương trình khác cần thiết (ví dụ, bao gồm cả MySQL và MongoDB); cấu hình tất cả các phần mềm; cấu hình một vài files đơn lẻ,...

Chef và các công cụ tự sẽ đảm đương điều này. Sử dụng Chef, bạn có thể viết các scripts đơn giản (được gọi là các recipes ) và sau đó Chelf sẽ thực hiện tự đông hóa cho bạn. Bạn có thể làm từ các công việc nhỏ cho đến các công việc lớn như tự động hóa các datacenters lớn. Để bắt đầu bạn nên học để viết các script thực hiện các công việc đơn giản, bạn có thể tham khảo tại đây: https://learn.chef.io/

Một thứ cần phải ghi nhớ là mặc dù bạn đang sử dụng các máy ảo để thực hiện các ví dụ thử nghiệm, bạn sẽ cần tạo 2 máy ảo: Một máy bạn đang thực hiện Chef development; một máy khác bạn thực hiện cấu hình và theo dõi với Chef . Máy thứ 2 có thể là máy bạn cần tất cả phần mềm chính của mình được cài đặt -- hoặc là các công cụ lập trình cho máy thử nghiệm, hoặc Apache cho một live server. Máy thứ nhất thực hiện giám sát và cấu hình; máy thứ hai là một trong nhiều server bạn quản lý. Trong trường hợp của tutorial này , bạn đang thực sự làm cả 2 trên một virtual machine đơn lẻ, đó là lý do tại sao cần phải nhớ một bức tranh lớn và cách các thứ được sắp xếp trong một môi trường lớn.

Tiếp theo, với Chef bạn có thể quản lý các tài nguyên. Các tài nguyên có thể là máy thứ 2 , nhưng chúng có thể là bất cứ thứ gì , bao gồm những thứ đơn giản như các files . Các tài nguyên có thể biểu diễn bất cứ thứ gì bạn cần quản lý, là phần mềm (các ứng dụng như là Apache, MySQL), phàn cứng (các thiết bị mạng) và máy ảo.

Tại sao cần tự động hóa các công việc đơn giản  ?

Nếu bạn đã đọc đến đây nghĩa là bạn đang có suy nghĩ trong đầu rằng bạn đang tự động hóa các tiến trình. Tại một thời điểm, bạn cần cài đặt Apache server, bạn có thể cài đặt Apache sử dụng các công cụ dựa trên shell đơn giản như apt-get hay là yum, cài đặt Apache chỉ là một phần nhỏ trong một tập cấu hình lớn. Vì vậy, Chef thêm vào khả năng cài đặt Apache cho bạn.

Chúng ta hãy cùng xem xét ý tưởng khi sử dụng Chef, ý tưởng với Chef là bạn khai báo các trạng thái mà bạn muốn các tài nguyên như vậy.  Ví dụ, bạn khai báo trạng thái nên có của một file (nó nên có một dòng văn bản, ví dụ "Hello World") . Với cách lập trình truyền thống, bạn có thể viết một app mở một file, kiểm tra nội dung của file này, nếu không giống như đoạn text cho trước thì thay thế nó bằng đoạn text đã cho, ghi ra file, sau đó đóng file lại.

Đó là lập trình thủ tục, bạn viết ra các thủ tục cần diễn ra. Tuy nhiên, với Chef bạn có một cách tiếp cận khai báo (declarative approach) , ở đây bạn khai các nội dung nên có, và để Chef thực hiện các công việc tiếp theo. Hay là, trong trường hợp Apache , bạn sẽ không nói nhiều hơn việc nói "Làm ơn cài đặt Apache" hay "Đảm bảo Apache được cài đặt". Thậm chí ngắn gọn hơn, bạn có thể chỉ định trạng thái của server như bạn mong muốn "Apache được cài đặt với cấu hình cho trước"

Nói cách khác, bạn không nói về làm thứ gì hay cách làm nó ; đơn giản chỉ là chỉ ra trạng thái của hệ thống mà bạn muốn. Và nếu hệ thống chưa ở trạng thái như vậy, Chef sẽ làm điều đó.

chef-screen1
Hình 1: Thử nghiệm Chef recipe

Hình 1 là một ví dụ đơn giản của một chef recipe , recipe này không mô tả làm những gì, nó mô tả trạng thái của server mà ta đang quản lý. Sau đó, tôi mở một browser và kết nối đến một server đang chạy , tôi thấy kết quả (Hình 2)

chef-screen2
Hình 2: Các kết quả của Chef recipe

Điều này cho ta thấy server ở trong trạng thái mà ta muốn nó đạt tới: Apache đang running, và index file chứa HTML để hiển thị nội dung Welcome to linux.com. Nhớ rằng khi bạn làm việc: máy tính của bạn ở trong một trạng thái , bạn cần một công cụ để trạng thái này trở về trạng thái đúng. Đó là lý do có Chef.

Chờ đã, còn nhiều thứ hơn nữa

Chúng ta đã xem qua cách tự động các tiến trình sử dụng Chef, nhưng Chef còn có thể làm nhiều thứ hơn nữa. Một khía cạnh trong đó là quản lý các hệ thống đang tồn tại. Nó có thể quản lý cả Windows và Linux (gọi là các nodes trong Chef). Nó có thể quản lý các ứng dụng cũng như là các servers. Như tôi đề cập trước đó, Chef đủ mạnh để quản lý toàn bộ một datacenter

Tổng kết

Ai trong số chúng ta muốn sử dụng các công cụ quản lý cấu hình như là Chef ? câu trả lời là bất cứ ai có công việc liên quan đến máy tính. Những nhân viên IT muốn quản lý các mạng và các datacenter. Người phát triển phần mềm cũng cần Chef. Ngày nay, phần mềm cần biết về kiến trúc nội tại của nó, có nghĩa là các developers cần viết code mà biết về kiến trúc. Chef có thể giúp.

Theo Linux,com

Link bài gốc: http://www.linux.com/news/enterprise/systems-management/846221-automating-processes-with-chef