Thứ sáu, 31/10/2014 | 00:00 GMT+7

Cách quản lý cụm của bạn với Chef và Knife trên Ubuntu

Chef là một hệ thống quản lý cấu hình - nó được thiết kế để cung cấp cho bạn một bộ công thức có thể lặp lại để xây dựng cơ sở hạ tầng của bạn, cho phép bạn tự động hóa, version và kiểm tra cơ sở hạ tầng của bạn theo cách giống như mã ứng dụng của bạn.

Đây là hướng dẫn thứ sáu trong loạt bài Bắt đầu quản lý cơ sở hạ tầng của bạn bằng Chef . Trong hướng dẫn này, ta sẽ giả định bạn đã hoàn thành năm hướng dẫn khác và như vậy bạn đã có một server Chef, máy trạm và một hoặc nhiều nút đang hoạt động.

Mục tiêu của ta

Dao là một công cụ dòng lệnh được đóng gói với Chef. Bạn có thể đã sử dụng dao để tạo và quản lý sách nấu ăn, túi dữ liệu hoặc role của Đầu bếp. Khi bạn ra lệnh bằng dao, bạn thường gõ một cái gì đó dọc theo các dòng:

knife cookbook create 

Lệnh ví dụ trên sử dụng lệnh con dao cookbook trong cookbook . Hướng dẫn này sẽ giới thiệu cho bạn một số lệnh con dao mới để ra lệnh và nhận thông tin về cụm Chef của bạn.

Ta sẽ bao gồm:

  • knife status
  • knife ssh
  • knife node

Yêu cầu

Hướng dẫn này giả sử bạn đã làm theo cho đến hướng dẫn thứ năm, Cách sử dụng Plugin DigitalOcean cho Knife để quản lý server trong Chef , trong loạt bài Bắt đầu quản lý cơ sở hạ tầng của bạn bằng Chef .

Tạo các role và server mẫu

Nếu bạn chưa có cụm Chef được cài đặt hoặc bạn muốn làm theo hướng dẫn này chặt chẽ và thấy kết quả tương tự, ta có thể cài đặt một số role và server mẫu.

Đầu tiên, trên máy trạm của bạn, hãy thay đổi thành folder chef-repo của bạn:

cd ~/chef-repo 

Ta sẽ thêm một role backend vào role web_server hiện có của ta . Hiện tại, nó sẽ trống, nhưng sau này bạn có thể biến nó thành một database hoặc server ứng dụng.

nano roles/backend.rb 

Thêm nội dung này vào file backend.rb :

name "backend" description "Backend for application servers" 

Sau đó, tải role mới lên server Chef của bạn.

knife role from file roles/backend.rb 

Khi bạn đã hoàn thành việc đó, ta có thể tạo một số nút mẫu bằng cách sử dụng plugin DigitalOcean Knife.

(Lưu ý: Plugin này không còn tồn tại kể từ tháng 10 năm 2014. Việc bạn có muốn bắt đầu sử dụng nó hay không là tùy thuộc vào bạn.)

knife digital_ocean server create --server-name frontend01 --image 6918990 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[web_server]"  knife digital_ocean server create --server-name frontend02 --image 6918990 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[web_server]"  knife digital_ocean server create --server-name backend01 --image 6918990 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[backend]"  knife digital_ocean server create --server-name backend02 --image 6918990 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[backend]" 

Lưu ý: Nếu domain của bạn cho các server khác nhau trong cụm Chef của bạn không phân giải bên ngoài và bạn đang làm cho chúng kết nối với nhau bằng các file /etc/hosts đã chỉnh sửa, thì việc cấp phép sẽ không hoạt động, vì version server mới sẽ được cung cấp file /etc/hosts mặc định.

Bạn vẫn có thể có một số nút đang hoạt động mà bạn đã tạo trong loạt bài hướng dẫn Đầu bếp. Điều đó nghĩa là một số lệnh ta sẽ chạy trong hướng dẫn này sẽ có thêm dòng hoặc thông tin. Nếu bạn muốn theo dõi chính xác, bạn luôn có thể xóa các node này bằng cách nhấp vào Nút> Xóa khỏi giao diện web của server Chef của bạn.

Hiển thị Trạng thái với trạng thái dao

Lệnh con status được thiết kế để hiển thị thông tin trạng thái về các node của bạn. Để sử dụng knife status , chỉ cần thay đổi sang folder chef-repo của bạn và nhập:

knife status 

Bạn sẽ thấy danh sách các node mà server Chef của bạn biết, bao gồm thời gian chạy chef-client cuối cùng của họ, tên nút, domain đủ điều kiện, địa chỉ IP và nền tảng.

3 minutes ago, frontend01, fe1.yourdomain.com, 111.111.111.111, ubuntu 14.04. 3 minutes ago, frontend02, fe2.yourdomain.com, 222.222.222.222, ubuntu 14.04. 20 hours ago,  backend01, be1.yourdomain.com, 333.333.333.333, ubuntu 14.04. 3 minutes ago, backend02, be2.youdomain.com, 333.333.333.333, ubuntu 14.04. 

Từ điều này, ta có thể thấy ngay rằng ta cần xem xét kỹ hơn backend01 - nó đã không chạy thành công chef-client (“đã đăng ký” theo cách nói của Chef) trong repository ảng 20 giờ.

Nếu bạn gặp một nút trong tình huống tương tự, hãy kiểm tra log lỗi chef-client của bạn hoặc sử dụng Báo cáo> Lịch sử chạy từ giao diện web của server Chef.

Ra lệnh bằng dao ssh

Ta có thể sử dụng knife ssh để đưa ra lệnh cho các node của ta (hoặc một số tập hợp con của các node ) cùng một lúc. Ví dụ: ta có thể sử dụng knife ssh để khởi động lại Nginx trên tất cả các node của ta với giao diện user role .

Bạn cần một user được ủy quyền để SSH vào server (tức là bạn có thể chạy ssh yourusername@fe1.yourdomain.com và nhận một shell). Nếu bạn chưa cài đặt SSH key , bạn có thể sử dụng tùy chọn -P để nhắc nhập password .

knife ssh "role:web_server" "service nginx restart" -x yourusername -a ipaddress 

Bạn sẽ nhận được kết quả giống như sau:

111.111.111.111  * Restarting nginx nginx      [ OK ]  222.222.222.222  * Restarting nginx nginx      [ OK ]  

Ta vừa chạy một lệnh trên tất cả các server giao diện user của bạn bằng cách đưa ra một lệnh dao duy nhất. Hãy tách các lập luận ra và tìm hiểu thêm một chút về cách thức hoạt động của knife ssh .

knife ssh "web_server" "service nginx restart" -x yourusername -a ipaddress 

Đối số đầu tiên cho knife ssh là truy vấn tìm kiếm Chef - thông thường bạn cần thông tin như role:YOUR_ROLE_NAME , nhưng bạn cũng có thể tìm kiếm thông qua nhiều thuộc tính khác (và kết hợp chúng với toán tử Boolean). Ví dụ: để chạy một lệnh chỉ trên các node có ubuntu trong thuộc tính nền tảng của chúng, bạn có thể chạy:

knife ssh "platform:ubuntu*" "service nginx restart" -x yourusername -a ipaddress 

Dấu * ở trên là một ký tự đại diện. Nó sẽ trùng với không hoặc nhiều ký tự trong giá trị thuộc tính. Trong trường hợp này, nó sẽ cho phép ta trùng với giá trị ubuntu 14.04 như trong kết quả knife status mà ta đã xem trước đó.

knife ssh "role:web_server" "service nginx restart" -x yourusername -a ipaddress 

Đối số thứ hai cho knife ssh là lệnh bạn muốn chạy trên server ( trùng với truy vấn tìm kiếm). Nó có thể là hầu hết mọi thứ bạn gõ vào shell. Bạn thậm chí có thể nối các lệnh bằng dấu chấm phẩy ( ; ).

knife ssh "role:web_server" "uptime;date" -x yourusername -a ipaddress 

Điều này sẽ xuất ra thông tin như :

111.111.111.111  12:53:36 up 2 days, 15:25,  1 user,  load average: 0.08, 0.03, 0.05 111.111.111.111 Wed Oct 22 12:53:36 UTC 2014 222.222.222.222  12:53:30 up 2 days, 15:21,  1 user,  load average: 0.00, 0.01, 0.05 222.222.222.222 Wed Oct 22 12:53:30 UTC 2014 

Đối số -x mà ta đã đề cập - đó là tên user SSH để sử dụng để đăng nhập.

Đối số -a chỉ định thuộc tính nút nào sẽ được sử dụng làm địa chỉ cho SSH. Theo mặc định, đó là FQDN của nút của bạn (hãy nhớ rằng bạn có thể tìm thấy điều này bằng lệnh knife status được hiển thị trước đó), vì vậy nếu bạn có thể giải quyết các server của bạn bằng cách truy cập http://fe1.yourdomain.com , thì bạn có thể bỏ qua -a tùy chọn.

Dao tương tác ssh

knife ssh cũng có khả năng đưa bạn vào một shell tương tác, nơi bạn có thể đưa ra một loạt lệnh và xem kết quả rất nhanh chóng. Bạn có thể bắt đầu một shell knife ssh tương tác bằng cách sử dụng interactive thay cho lệnh SSH của bạn.

knife ssh "role:web_server" interactive -x yourusername -a ipaddress 

Điều này sẽ cho ta thấy:

Connected to 111.111.111.111 and 222.222.222.222  To run a command on a list of servers, do:   on SERVER1 SERVER2 SERVER3; COMMAND   Example: on latte foamy; echo foobar  To exit interactive mode, use 'quit!'  knife-ssh> 

Bạn có thể đưa ra lệnh cho tất cả các server trong kết quả tìm kiếm của bạn bằng cách chỉ cần gõ lệnh và nhấn Enter .

knife-ssh> uptime 111.111.111.111  18:43:55 up 2 days, 21:16,  1 user,  load average: 0.01, 0.03, 0.05 222.222.222.222  18:43:49 up 2 days, 21:11,  1 user,  load average: 0.00, 0.01, 0.05 

Nếu bạn muốn tinh chỉnh thêm danh sách server của bạn , chỉ cần sử dụng on , như thông báo trợ giúp gợi ý. Lưu ý bạn nên thay thế SERVER1 trong lệnh ví dụ bằng thuộc tính bạn đã sử dụng là -a ; đối với ta , đây là địa chỉ IP của nút.

knife-ssh> on 111.111.111.111; echo hello digitalocean 111.111.111.111 hello digitalocean 

Một cách sử dụng thực sự thú vị của knife ssh tương tác là sử dụng nó để điều chỉnh log server . Ví dụ: nếu log truy cập của bạn cho Nginx ở vị trí mặc định ( /var/log/nginx/access.log ), bạn có thể điều chỉnh log bằng tùy chọn -f (follow) và kết quả sẽ liên tục in ra console của bạn .

knife-ssh> tail -f /var/log/nginx/access.log 

(Tùy thuộc vào cách Nginx được cài đặt , bạn có thể phải sử dụng sudo trước lệnh này.)

Nếu bạn truy cập địa chỉ IP cho một trong các node của bạn trong trình duyệt web, bạn sẽ thấy một mục xuất hiện trong log truy cập Nginx mà không cần phải làm gì cả!

Quản lý các node bằng nút dao

Nếu bạn đã làm theo hướng dẫn Cách tạo Sách nấu ăn Đầu bếp Đơn giản để Quản lý Cơ sở hạ tầng trên Ubuntu , thì bạn đã sử dụng knife node để liệt kê tất cả các node trên server Đầu bếp của bạn và để chỉnh sửa các thuộc tính của nút.

knife node list knife node edit frontend01 

Bạn cũng có thể sử dụng knife node để xóa các node .

knife node delete frontend01 

Hoặc, hiển thị các thuộc tính nút chi tiết hơn:

knife node show frontend01 ******* Node Name:   frontend01 Environment: _default FQDN:        fe01.yourdomain.com IP:          111.111.111.111 Run List:    role[frontend] Roles:       web_server Recipes:     apt, nginx, apt::default, nginx::default Platform:    ubuntu 14.04 Tags:      

Bạn có thể nhận được danh sách đầy đủ các thuộc tính của nút bằng cách sử dụng tùy chọn -l :

knife node show -l frontend01 

Thao tác này sẽ trả về một danh sách rất dài các thuộc tính, hầu hết chúng được điền tự động bởi Ohai , đây là một công cụ Chef tự động chuyển các thuộc tính đến chef-client mỗi khi nó chạy.

Một danh sách dài các thuộc tính không phải là rất hữu ích đối với ta . Tuy nhiên, con dao đã được ta bảo hiểm ở đó. Ta có thể chỉ định tùy chọn --format để có được biểu diễn JSON hoặc YAML cho các thuộc tính của Node.

knife node show frontend01 --format json *******  {   "name": "frontend01",   "chef_environment": "_default",   "run_list": [   "role[web_server]" ] ,   "normal": {     "tags": [      ]   } } 

Bạn cũng có thể truy xuất một thuộc tính nút duy nhất với -a .

knife node show frontend01 --format json -a ipaddress ******* {   "frontend01": {     "ipaddress": "111.111.111.111"   } } 

Đầu ra JSON hoặc YAML có thể rất hữu ích nếu ta muốn xây dựng các tập lệnh phức tạp hơn liên quan đến dao hoặc thậm chí để hiển thị trang tổng quan và số liệu.

Kết luận

dao là một công cụ mạnh mẽ, không chỉ để tạo và cập nhật các đối tượng khác nhau trong cụm Chef của bạn mà còn để xem và quản lý trạng thái của cụm của bạn.

Với knife ssh bạn có thể viết một lệnh và chạy trên nhiều nút đồng thời - một công cụ rất mạnh cho bất kỳ kỹ sư devops nào.


Tags:

Các tin liên quan

Cách cài đặt Zentyal trên Ubuntu 14.04
2014-10-29
Cách cài đặt và cấu hình VNC trên Ubuntu 14.04
2014-10-23
Cách tạo module puppet để tự động cài đặt WordPress trên Ubuntu 14.04
2014-10-22
Cách thiết lập Mirror Director với MirrorBrain trên Ubuntu 14.04
2014-10-06
Cách cấu hình một cụm Mesosphere sẵn sàng sản xuất trên Ubuntu 14.04
2014-09-25
Cách thiết lập DNSSEC trên server tên NSD trên Ubuntu 14.04
2014-09-25
Cách triển khai ứng dụng Meteor.js trên Ubuntu 14.04 với Nginx
2014-09-22
Cách cài đặt Drupal trên server Ubuntu 14.04 với Apache
2014-09-19
Cách sử dụng Reprepro cho Kho lưu trữ Gói Bảo mật trên Ubuntu 14.04
2014-09-10
Cách cài đặt Discourse trên Ubuntu 14.04
2014-09-10