Thứ sáu, 05/06/2015 | 00:00 GMT+7

Cách cài đặt và cấu hình Ansible trên Ubuntu 14.04

Hệ thống quản lý cấu hình được thiết kế để giúp administrator và group vận hành dễ dàng kiểm soát số lượng lớn server . Chúng cho phép bạn điều khiển nhiều hệ thống khác nhau theo cách tự động từ một vị trí trung tâm.

Mặc dù có nhiều hệ thống quản lý cấu hình phổ biến dành cho hệ thống Linux, chẳng hạn như Chef và Puppet, nhưng những hệ thống này thường phức tạp hơn nhiều người muốn hoặc cần. Ansible là một lựa chọn thay thế tuyệt vời cho các tùy chọn này vì nó có chi phí bắt đầu nhỏ hơn nhiều.

Trong hướng dẫn này, ta sẽ thảo luận về cách cài đặt Ansible trên máy Ubuntu 14.04 và tìm hiểu một số khái niệm cơ bản về cách sử dụng phần mềm.

Ansible hoạt động như thế nào?

Ansible hoạt động bằng cách cấu hình client từ máy tính có cài đặt và cấu hình các thành phần Ansible.

Nó giao tiếp qua các kênh SSH bình thường để lấy thông tin từ các máy từ xa, ra lệnh và sao chép file . Do đó, hệ thống Ansible không yêu cầu cài đặt thêm bất kỳ phần mềm nào trên client .

Đây là một cách mà Ansible đơn giản hóa việc quản trị các server . Bất kỳ server nào có cổng SSH lộ ra đều có thể được đưa vào dưới ô cấu hình của Ansible, dù nó đang ở giai đoạn nào trong vòng đời của nó.

Bất kỳ máy tính nào bạn có thể quản lý thông qua SSH, bạn cũng có thể quản lý thông qua Ansible.

Ansible sử dụng phương pháp module , giúp bạn dễ dàng mở rộng sử dụng các chức năng của hệ thống chính để giải quyết các tình huống cụ thể. Mô-đun có thể được viết bằng bất kỳ ngôn ngữ nào và giao tiếp bằng JSON tiêu chuẩn.

Các file cấu hình chủ yếu được viết ở định dạng tuần tự hóa dữ liệu YAML do tính chất biểu đạt và tính tương tự của nó với các ngôn ngữ đánh dấu phổ biến. Ansible có thể tương tác với khách hàng thông qua các công cụ dòng lệnh hoặc thông qua các tập lệnh cấu hình được gọi là Playbook.

Cài đặt Ansible trên Ubuntu 14.04

Để bắt đầu khám phá Ansible như một phương tiện quản lý các server khác nhau của ta , ta cần cài đặt phần mềm Ansible trên ít nhất một máy. Ta sẽ sử dụng version VPS Ubuntu 14.04 cho phần này.

Cách tốt nhất để có được Ansible cho Ubuntu là thêm PPA của dự án ( repository cá nhân) vào hệ thống của bạn.

Để làm điều này một cách hiệu quả, ta cần cài đặt gói software-properties-common , gói phần mềm này sẽ cung cấp cho ta khả năng làm việc với các PPA một cách dễ dàng. (Gói này được gọi là python-software-properties trên các version Ubuntu cũ hơn.)

  • sudo apt-get update
  • sudo apt-get install software-properties-common

Khi gói được cài đặt, ta có thể thêm PPA Ansible bằng lệnh lệnh sau:

  • sudo apt-add-repository ppa:ansible/ansible

Nhấn ENTER để chấp nhận bổ sung PPA.

Tiếp theo, ta cần cập nhật OS của hệ thống để nó biết các gói có sẵn trong PPA. Sau đó, ta có thể cài đặt phần mềm:

  • sudo apt-get update
  • sudo apt-get install ansible

Bây giờ ta có tất cả các phần mềm cần thiết để quản trị các server của ta thông qua Ansible.

Cài đặt SSH key

Như ta đã đề cập ở trên, Ansible chủ yếu giao tiếp với các client thông qua SSH. Mặc dù nó chắc chắn có khả năng xử lý xác thực SSH dựa trên password , nhưng SSH key giúp giữ mọi thứ đơn giản.

Ta có thể cài đặt SSH key theo hai cách khác nhau tùy thuộc vào việc bạn đã có khóa muốn sử dụng hay chưa. Ta sẽ giả định các server bạn muốn quản lý sẽ là các server DigitalOcean.

Tạo một cặp SSH key mới

Nếu bạn chưa có cặp SSH key mà bạn muốn sử dụng để quản trị Ansible, ta có thể tạo một cặp SSH key ngay bây giờ trên Ansible VPS của bạn.

Ta sẽ tạo một cặp SSH key trên server Ansible của bạn để xác thực với các server mà nó sẽ quản lý.

Với quyền là user mà bạn sẽ kiểm soát Ansible, hãy tạo một cặp khóa RSA bằng lệnh :

  • ssh-keygen

Bạn cần chỉ định vị trí file của cặp khóa đã tạo, passphrase (password bảo vệ) và xác nhận passphrase (password bảo vệ) . Nhấn ENTER qua tất cả các giá trị này để chấp nhận các giá trị mặc định.

Các khóa mới của bạn có trong ~/.ssh của user . Khóa công khai (khóa bạn có thể chia sẻ) được gọi là id_rsa.pub . Khóa riêng tư (khóa mà bạn giữ an toàn) được gọi là id_rsa .

Bạn có thể thêm chúng vào console DigitalOcean của bạn để cho phép bạn nhúng SSH key của bạn vào các server mới được tạo. Điều này sẽ cho phép server Ansible SSH của bạn vào các server mới của bạn ngay lập tức mà không cần bất kỳ xác thực nào khác.

Để thực hiện việc này, hãy nhấp vào liên kết “SSH Keys” trên menu chuyển bên trái. Trong màn hình mới, nhấp vào nút “Thêm SSH key ” ở góc trên bên phải:

Khóa thêm DigitalOcean

Nhập tên bạn muốn liên kết với khóa này vào trường trên cùng. Trên version VPS Ansible của bạn, hãy nhập mã này để nhận nội dung của public key của bạn:

  • cat ~/.ssh/id_rsa.pub
Ví dụ về public key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0 

Chuỗi được trả lại cho bạn là những gì bạn cần paste vào trường thứ hai trong console DigitalOcean:

Khóa Ansible DigitalOcean

Nhấp vào “Tạo SSH key ” để thêm khóa của bạn vào console . Bây giờ, khi nào bạn tạo một server mới, bạn có thể nhúng SSH key công khai của bạn vào server mới, cho phép bạn giao tiếp với version Ansible của bạn . Bạn chỉ cần chọn khóa trong phần “Thêm SSH key tùy chọn” của quá trình tạo server :

Khóa nhúng DigitalOcean

Chuyển một cặp SSH key hiện tại sang Ansible

Nếu bạn đã có cặp SSH key mà bạn đang sử dụng để xác thực với server của bạn , bạn có thể chuyển thông tin đăng nhập sang server Ansible mới của bạn thay vì tạo một cặp mới. Điều này có lợi thế là làm cho nó tự động hoạt động với bất kỳ server nào bạn đã cấu hình để sử dụng khóa.

Trên máy tính mà bạn đã cấu hình xác thực SSH key cho các server của bạn , hãy lấy public key bằng lệnh :

  • cat ~/.ssh/id_rsa.pub
Ví dụ về public key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0 

Trên server Ansible của bạn , bạn cần tạo một folder ẩn để lưu trữ các khóa của bạn . Gọi nó là .ssh để chương trình SSH biết tìm nó ở đâu:

  • mkdir ~/.ssh

Ta nên khóa quyền truy cập vào folder này để chỉ bạn có thể nhập hoặc ghi vào nó:

  • chmod 700 ~/.ssh

Bây giờ, hãy chuyển vào folder và mở file có tên id_rsa.pub trong editor của bạn:

  • cd ~/.ssh
  • nano id_rsa.pub

Dán kết quả của public key từ máy tính tại nhà của bạn vào file này:

Ví dụ id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0 

Lưu và đóng file . Ta sẽ đảm bảo file này có các quyền chính xác bằng lệnh :

  • chmod 644 id_rsa.pub

Bây giờ, quay lại máy tính local của bạn đã được cấu hình để truy cập SSH key , hãy nhập:

  • cat ~/.ssh/id_rsa
Ví dụ về private key
-----BEGIN RSA PRIVATE KEY----- MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq . . . . . . cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7 1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo -----END RSA PRIVATE KEY----- 

Đầu ra sẽ khá dài.

Quay lại server Ansible của bạn, ta cần tạo một file mới trong ~/.ssh :

  • nano id_rsa

Bên trong, dán kết quả của lệnh trước đó trên máy tính local của bạn:

id_rsa
-----BEGIN RSA PRIVATE KEY----- MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq . . . . . . cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7 1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo -----END RSA PRIVATE KEY----- 

Đảm bảo rằng bạn bao gồm các dòng đánh dấu đầu tiên và cuối cùng. Chúng được yêu cầu để file khóa hợp lệ. Lưu và đóng file .

Ta cần thay đổi các quyền để giữ an toàn cho file này:

  • chmod 600 id_rsa

Đến đây, Ansible sẽ có thể sử dụng các SSH key này để giao tiếp với bất kỳ server nào có nhúng khóa.

Cấu hình Server Ansible

Ansible theo dõi tất cả các server mà nó biết thông qua file “ server ”. Trước tiên, ta cần cài đặt file này trước khi có thể bắt đầu giao tiếp với các máy tính khác của bạn .

Mở file với quyền root như sau:

  • sudo nano /etc/ansible/hosts

Bạn sẽ thấy một file có rất nhiều cấu hình mẫu, không có cấu hình nào thực sự hoạt động với ta vì các server này đã được tạo thành. Vì vậy, để bắt đầu, ta hãy comment tất cả các dòng trong file này bằng cách thêm dấu “#” trước mỗi dòng.

Ta sẽ giữ các ví dụ này trong file để giúp ta cấu hình nếu ta muốn triển khai các tình huống phức tạp hơn trong tương lai.

Sau khi tất cả các dòng được comment , ta có thể bắt đầu thêm server thực tế của bạn .

Tệp server lưu trữ khá linh hoạt và có thể được cấu hình theo một số cách khác nhau. Cú pháp mà ta sẽ sử dụng trông giống như sau:

Tệp server lưu trữ mẫu
[group_name] alias ansible_ssh_host=your_server_ip 

Group_name là một thẻ tổ chức cho phép bạn tham chiếu đến bất kỳ server nào được liệt kê bên dưới nó bằng một từ. Bí danh chỉ là một cái tên để chỉ server đó.

Vì vậy, trong kịch bản của ta , ta đang tưởng tượng rằng ta có ba server mà ta sẽ kiểm soát bằng Ansible. Các server này có thể truy cập được từ server Ansible bằng lệnh :

  • ssh root@your_server_ip

Bạn sẽ không được yêu cầu nhập password nếu bạn đã cài đặt đúng. Ta sẽ giả định địa chỉ IP của các server của ta là 192.0.2.1 , 192.0.2.2192.0.2.3 . Ta sẽ cài đặt điều này để ta có thể gọi chúng riêng lẻ dưới dạng host1 , host2host3 hoặc là một group dưới dạng server .

Đây là khối mà ta nên thêm vào file server của bạn để thực hiện điều này:

[server] host1 ansible_ssh_host=192.0.2.1 host2 ansible_ssh_host=192.0.2.2 host3 ansible_ssh_host=192.0.2.3 

Server có thể thuộc nhiều group và các group có thể cấu hình các thông số cho tất cả các thành viên của họ. Hãy thử điều này ngay bây giờ.

Với cài đặt hiện tại của ta , nếu ta cố gắng kết nối với bất kỳ server nào trong số này bằng Ansible, lệnh sẽ không thành công (giả sử bạn không hoạt động với quyền user root ). Điều này là do SSH key của bạn được nhúng cho user root trên hệ thống từ xa và Ansible theo mặc định sẽ cố gắng kết nối với quyền là user hiện tại của bạn. Một nỗ lực kết nối sẽ gặp lỗi này:

Lỗi kết nối rõ ràng
host1 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue 

Trên máy tính Ansible của bạn , tôi đang sử dụng một user có tên là demo . Ansible sẽ cố gắng kết nối với từng server bằng ssh demo@server . Điều này sẽ không hoạt động nếu user demo không ở trên hệ thống từ xa.

Ta có thể tạo một file thông báo cho tất cả các server trong group " server " kết nối bằng cách sử dụng user root .

Để làm điều này, ta sẽ tạo một folder trong cấu trúc cấu hình group_vars được gọi là group_vars . Trong folder này, ta có thể tạo các file có định dạng YAML cho mỗi group mà ta muốn cấu hình :

  • sudo mkdir /etc/ansible/group_vars
  • sudo nano /etc/ansible/group_vars/server

Ta có thể đặt cấu hình của ta ở đây. Các file YAML bắt đầu bằng “-”, vì vậy hãy đảm bảo bạn không quên phần đó.

/ etc / ansible / group_vars / server
--- ansible_ssh_user: root 

Lưu file này khi bạn hoàn tất.

Nếu bạn muốn chỉ định chi tiết cấu hình cho mọi server , dù liên kết group , bạn có thể đặt những chi tiết đó trong một file tại /etc/ansible/group_vars/all . Các server riêng lẻ có thể được cấu hình bằng cách tạo file trong folder tại /etc/ansible/host_vars .

Sử dụng các lệnh Ansible đơn giản

Bây giờ ta đã cài đặt server và đủ chi tiết cấu hình để cho phép ta kết nối thành công với server của bạn , ta có thể thử lệnh đầu tiên của bạn .

Ping tất cả các server bạn đã cấu hình bằng lệnh :

  • ansible -m ping all
Ping kết quả
host1 | success >> {     "changed": false,     "ping": "pong" }  host3 | success >> {     "changed": false,     "ping": "pong" }  host2 | success >> {     "changed": false,     "ping": "pong" } 

Đây là bài kiểm tra cơ bản đảm bảo rằng Ansible có kết nối với tất cả các server của nó.

"Tất cả" nghĩa là tất cả các server . Ta có thể dễ dàng chỉ định một group :

  • ansible -m ping server

Ta cũng có thể chỉ định một server riêng lẻ:

  • ansible -m ping host1

Ta có thể chỉ định nhiều server bằng cách tách chúng bằng dấu hai chấm:

  • ansible -m ping host1:host2

Phần -m ping của lệnh là một hướng dẫn để Ansible sử dụng module "ping". Về cơ bản đây là các lệnh mà bạn có thể chạy trên các server từ xa của bạn . Mô-đun ping hoạt động theo nhiều cách giống như tiện ích ping thông thường trong Linux, nhưng thay vào đó, nó kiểm tra kết nối Ansible.

Mô-đun ping không thực sự nhận bất kỳ đối số nào, nhưng ta có thể thử một lệnh khác để xem cách hoạt động. Ta chuyển các đối số vào một tập lệnh bằng lệnh -a .

Mô-đun “shell” cho phép ta gửi lệnh terminal đến server từ xa và lấy kết quả. Ví dụ, để tìm hiểu mức sử dụng bộ nhớ trên máy host1 của ta , ta có thể sử dụng:

  • ansible -m shell -a 'free -m' host1
Đầu ra vỏ
host1 | success | rc=0 >>              total       used       free     shared    buffers     cached Mem:          3954        227       3726          0         14         93 -/+ buffers/cache:        119       3834 Swap:            0          0          0 

Kết luận

Bây giờ, bạn nên cấu hình server Ansible của bạn để giao tiếp với các server mà bạn muốn kiểm soát. Ta đã xác minh Ansible có thể giao tiếp với từng server và ta đã sử dụng lệnh ansible để thực hiện các việc đơn giản từ xa.

Mặc dù điều này rất hữu ích nhưng ta chưa đề cập đến tính năng mạnh mẽ nhất của Ansible trong bài viết này: Playbooks. Ta đã cài đặt một nền tảng tuyệt vời để làm việc với các server của bạn thông qua Ansible, nhưng vấn đề nặng nề sẽ được thực hiện trong một bài viết trong tương lai, khi ta đề cập đến cách sử dụng Playbook để tự động cấu hình máy tính từ xa của bạn.


Tags:

Các tin liên quan

Triển khai ứng dụng Rails trên Ubuntu 14.04 với Capistrano, Nginx và Puma
2015-06-03
Cách xây dựng các SPA (Ứng dụng một trang) bằng NodeJS, SailsJS và DustJS trong Ubuntu 14.04
2015-05-27
Cách thiết lập môi trường puppet masterless trên Ubuntu 14.04
2015-04-29
Cách backup server Ubuntu 14.04 bằng Bacula
2015-04-17
Cách cài đặt WordPress với OpenLiteSpeed trên Ubuntu 14.04
2015-04-16
Cách triển khai Wordpress với Shipyard trên Ubuntu 14.04
2015-04-14
Cách quản lý Jenkins với Rancher trên Ubuntu 14.04
2015-03-25
Cách cài đặt Sandstorm trên Ubuntu 14.04
2015-03-19
Cách bảo vệ thông tin đăng nhập tài khoản WordPress của bạn với xác thực hai yếu tố trên Ubuntu 14.04
2015-03-16
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 14.04
2015-03-13