19/09/2018, 09:48

Làm thế nào để cài đặt và cấu hình ansible trên Ubuntu 14.04

Giới thiệu Các hệ thống quản lý cấu hình được thiết kế để kiểm soát số lượng lớn các máy chủ dễ dàng cho các quản trị viên và các nhóm hoạt động. Chúng cho phép bạn kiểm soát nhiều hệ thống khác nhau một cách tự động từ một vị trí trung tâm. Mặc dù có rất nhiều hệ thống quản lý cấu hình phổ ...

Giới thiệu

Các hệ thống quản lý cấu hình được thiết kế để kiểm soát số lượng lớn các máy chủ dễ dàng cho các quản trị viên và các nhóm hoạt động. Chúng cho phép bạn kiểm soát nhiều hệ thống khác nhau một cách tự động từ một vị trí trung tâm.

Mặc dù có rất nhiều hệ thống quản lý cấu hình phổ biến có sẵn cho các hệ thống Linux, chẳng hạn như Chef và Puppet, nhưng chúng 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 tuyệt vời cho các tùy chọn này bởi vì nó có chi phí nhỏ hơn nhiều để bắt đầu.

Trong hướng dẫn này, chúng tôi sẽ thảo luận về cách cài đặt Ansible trên máy Ubuntu 14.04 và xem xét một số vấn đề 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 các máy khách từ một máy tính với các thành phần Ansible được cài đặt và cấu hình.

Nó truyền thông 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 các tập tin. Bởi vì điều này, một hệ thống Ansible không yêu cầu bất kỳ phần mềm bổ sung được cài đặt trên máy tính khách hàng.

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

Bất kỳ máy tính nào mà 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 có một cách tiếp cận mô-đun, làm cho nó dễ dàng mở rộng để sử dụng các chức năng của hệ thống chính để đối phó với 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 chuẩn.

Các tệp cấu hình chủ yếu được viết bằng định dạng tuần tự dữ liệu YAML do tính chất biểu cảm của nó và sự giống nhau 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 kịch bản cấu hình được gọi là Playbooks.

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 máy chủ khác nhau của chúng tôi, chúng tôi cần phải cài đặt phần mềm Ansible trên ít nhất một máy. Chúng tôi sẽ sử dụng một phiên bản Ubuntu 14.04 VPS cho phần này.

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

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

sudo apt-get update

sudo apt-get install software-properties-common

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

sudo apt-add-repository ppa:ansible/ansible

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

Tiếp theo, chúng ta cần làm mới chỉ mục gói hệ thống của mình để nó nhận thức được các gói có sẵn trong PPA. Sau đó, chúng tôi có thể cài đặt phần mềm:

sudo apt-get update

sudo apt-get install ansible

Bây giờ chúng tôi có tất cả các phần mềm cần thiết để quản lý các máy chủ của chúng tôi thông qua Ansible.

Thiết lập Khóa SSH

Như chúng tôi đã đề cập ở trên, Ansible chủ yếu giao tiếp với máy tính khách 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 mật khẩu, các khóa SSH giúp giữ cho mọi thứ đơn giản.

Chúng tôi có thể thiết lập các khóa SSH theo hai cách khác nhau tùy thuộc vào việc bạn đã có khóa mà bạn muốn sử dụng hay chưa. Chúng tôi sẽ giả định rằng các máy chủ bạn muốn quản lý sẽ là các giọt DigitalOcean.

Tạo cặp khóa SSH mới

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

Chúng ta sẽ tạo một cặp khóa SSH trên giọt Ansible của chúng ta để xác thực với các host mà nó sẽ quản lý.

Là người dùng bạn sẽ kiểm soát Ansible, tạo cặp khóa RSA bằng cách nhập:

ssh-keygen

Bạn sẽ được yêu cầu xác định vị trí tệp của cặp khóa đã tạo, cụm mật khẩu và xác nhận cụm mật khẩu. Nhấn ENTER thông qua tất cả những điều này để chấp nhận các giá trị mặc định.

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

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

Để thực hiện việc này, hãy nhấp vào liên kết "Khóa SSH" trên menu điều hướng bên trái. Trong màn hình mới, nhấp vào nút "Thêm khóa SSH" ở góc trên cùng bên phải:

DigitalOcean add key

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 ví dụ Ansible VPS của bạn, hãy nhập thông tin này để lấy nội dung của khóa công khai của bạn:

cat ~/.ssh/id_rsa.pub

Example 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 để dán vào trường thứ hai trong bảng điều khiển DigitalOcean:

DigitalOcean Ansible key

Nhấp vào "Tạo khóa SSH" để thêm khóa của bạn vào bảng điều khiển. Bây giờ, bất cứ khi nào bạn tạo một giọt mới, bạn sẽ có thể nhúng khóa SSH công khai của bạn vào máy chủ mới, cho phép bạn giao tiếp với cá thể Ansible của bạn. Bạn chỉ cần chọn khóa trong phần "Thêm khóa SSH tùy chọn" của quy trình tạo giọt:

DigitalOcean embed key

Chuyển cặp khóa SSH hiện có sang Ansible

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

Trên máy tính mà bạn đã định cấu hình xác thực khóa SSH cho các giọt của bạn, hãy lấy khóa công khai bằng cách nhập:

cat ~/.ssh/id_rsa.pub

Example public key

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

Trên máy chủ Ansible của bạn, bạn cần phải tạo một thư mục ẩn để lưu trữ các khóa của bạn. Gọi nó đi .ssh để chương trình SSH biết nơi tìm thấy nó:

mkdir ~/.ssh

Chúng tôi nên khóa quyền truy cập vào thư mục này để chỉ bạn mới có thể nhập hoặc ghi vào thư mục đó:

chmod 700 ~/.ssh

Bây giờ, di chuyển vào thư mục và mở một tệp có tên id_rsa.pub trong trình soạn thảo văn bản của bạn:

cd ~/.ssh

nano id_rsa.pub

Dán đầu ra của khóa công khai của bạn từ máy tính gia đình của bạn vào tệp này:

Example id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

Lưu và đóng tập tin. Chúng tôi sẽ đảm bảo rằng tệp này có quyền chính xác bằng cách nhập:

chmod 644 id_rsa.pub

Bây giờ, hãy quay trở lại máy tính cục bộ của bạn được cấu hình để truy cập khóa SSH, gõ:

cat ~/.ssh/id_rsa

Example 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 các giọt Ansible của bạn, chúng ta cần tạo một tệp mới trong ~/.ssh danh mục:

nano id_rsa

Bên trong, dán kết quả của lệnh trước trên máy tính cục bộ 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-----

Hãy chắc chắn 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 để tệp khóa hợp lệ. Lưu và đóng tập tin.

Chúng tôi cần thay đổi quyền để giữ an toàn cho tệp này:

chmod 600 id_rsa

Tại thời điểm này, Ansible sẽ có thể sử dụng các khóa SSH này để giao tiếp với bất kỳ máy chủ nào có khóa được nhúng.

Định cấu hình máy chủ lưu trữ an toàn

Ansible theo dõi tất cả các máy chủ mà nó biết về thông qua một tập tin "host". Chúng ta cần phải thiết lập tệp này trước khi chúng ta có thể bắt đầu giao tiếp với các máy tính khác của chúng ta.

Mở tệp với các đặc quyền root như sau:

sudo nano /etc/ansible/hosts

Bạn sẽ thấy một tệp có nhiều cấu hình ví dụ, không có cấu hình nào trong số đó thực sự làm việc cho chúng tôi vì các máy chủ này được tạo thành. Vì vậy, để bắt đầu, chúng ta hãy bình luận ra tất cả các dòng trong tập tin này bằng cách thêm một "#" trước mỗi dòng.

Chúng tôi sẽ giữ các ví dụ này trong tệp để giúp chúng tôi định cấu hình nếu chúng tôi muốn triển khai các kịch bản phức tạp hơn trong tương lai.

Khi tất cả các dòng được nhận xét, chúng tôi có thể bắt đầu thêm các máy chủ thực của chúng tôi.

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

Example hosts file

[group_name]
alias ansible_ssh_host=your_server_ip

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

Vì vậy, trong kịch bản của chúng tôi, chúng tôi đang tưởng tượng rằng chúng tôi có ba máy chủ chúng tôi sẽ kiểm soát với Ansible. Các máy chủ này có thể truy cập từ các giọt Ansible bằng cách gõ:

ssh root@your_server_ip

Bạn không nên được nhắc nhập mật khẩu nếu bạn đã thiết lập chính xác. Chúng tôi sẽ giả định rằng các địa chỉ IP của các giọt của chúng tôi là 192.0.2.1, 192.0.2.2và 192.0.2.3. Chúng tôi sẽ thiết lập điều này để chúng tôi có thể tham khảo riêng lẻ như host1, host2và host3hoặc nhóm droplets.

Đây là khối mà chúng ta nên thêm vào tập tin host của chúng tôi để thực hiện điều này:

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

Máy chủ có thể ở nhiều nhóm và nhóm có thể định cấu hình tham số cho tất cả thành viên của chúng. Hãy thử điều này ngay bây giờ.

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

Ansible connection error

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 tôi, tôi đang sử dụng một người dùng được gọi là demo. Ansible sẽ cố gắng kết nối với mỗi máy chủ với ssh demo@server. Điều này sẽ không hoạt động nếu người dùng bản demo không có trên hệ thống từ xa.

Chúng ta có thể tạo một tệp cho tất cả các máy chủ trong nhóm "giọt" để kết nối bằng cách sử dụng người dùng root.

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

sudo mkdir /etc/ansible/group_vars

sudo nano /etc/ansible/group_vars/droplets

Chúng ta có thể đặt cấu hình ở đây. Các tệp 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/droplets

---
ansible_ssh_user: root

Lưu và đóng tệp 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 máy chủ, bất kể liên kết nhóm, bạn có thể đặt các chi tiết đó vào một tệp tại /etc/ansible/group_vars/all. Các máy chủ cá nhân có thể được định cấu hình bằng cách tạo tệp dưới một thư mục tại /etc/ansible/host_vars.

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

Bây giờ chúng tôi đã thiết lập máy chủ và đủ chi tiết cấu hình để cho phép chúng tôi kết nối thành công với máy chủ của mình, chúng tôi có thể thử lệnh đầu tiên của chúng tôi.

Ping tất cả các máy chủ bạn đã định cấu hình bằng cách nhập:

ansible -m ping all

Ping output

host1 | success >> {
    "changed": false,
    "ping": "pong"
}

host3 | success >> {
    "changed": false,
    "ping": "pong"
}

host2 | success >> {
    "changed": false,
    "ping": "pong"
}

Đây là một thử nghiệm cơ bản để đảm bảo rằng Ansible có kết nối với tất cả các máy chủ của nó.

"Tất cả" có nghĩa là tất cả các máy chủ. Chúng tôi có thể dễ dàng chỉ định một nhóm:

ansible -m ping droplets

Chúng tôi cũng có thể chỉ định một máy chủ cá nhân:

ansible -m ping host1

Chúng tôi có thể chỉ định nhiều máy chủ bằng cách tách chúng bằng dấu hai chấm:

ansible -m ping host1:host2

Các -m ping phần của lệnh là một lệnh để Ansible sử dụng mô-đun "ping". Đây là những lệnh cơ bản mà bạn có thể chạy trên máy chủ từ xa của mình. Mô-đun ping hoạt động theo nhiều cách 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ự lấy bất kỳ đối số nào, nhưng chúng tôi có thể thử một lệnh khác để xem cách hoạt động. Chúng tôi chuyển đối số vào một tập lệnh bằng cách nhập -a.

Mô-đun "trình bao" cho phép chúng tôi gửi lệnh thiết bị đầu cuối đến máy chủ từ xa và truy xuất kết quả. Ví dụ, để tìm hiểu việc sử dụng bộ nhớ trên máy host1 của chúng ta, chúng ta có thể sử dụng:

ansible -m shell -a 'free -m' host1

Shell output

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

Phần kết luận

Bây giờ, bạn sẽ có máy chủ Ansible được cấu hình để giao tiếp với các máy chủ mà bạn muốn kiểm soát. Chúng tôi đã xác minh rằng Ansible có thể giao tiếp với mỗi máy chủ và chúng tôi đã sử dụng ansible lệnh để thực thi các tác vụ đơn giản từ xa.

Mặc dù điều này rất hữu ích nhưng chúng tôi 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. Chúng tôi đã thiết lập một nền tảng tuyệt vời để làm việc với các máy chủ của chúng tôi thông qua Ansible, nhưng việc nâng hạng nặng sẽ được thực hiện trong một bài viết sau, khi chúng tôi giới thiệu cách sử dụng Playbooks để tự động cấu hình máy tính từ xa của bạn.

0