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.
Các tin liên quan
Cách cài đặt Zentyal trên Ubuntu 14.042014-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 cài đặt Discourse trên Ubuntu 14.04
2014-09-10
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
 

