Thứ hai, 05/10/2015 | 00:00 GMT+7

Cơ sở hạ tầng SaltStack: Định cấu hình Salt-Cloud để tăng tài nguyên kỹ thuật số

SaltStack, hay Salt, là một hệ thống quản lý cấu hình và thực thi từ xa mạnh mẽ được dùng để dễ dàng quản lý cơ sở hạ tầng theo cách có cấu trúc, có thể lặp lại. Trong loạt bài này, ta sẽ trình bày một phương pháp quản lý môi trường phát triển, dàn dựng và production của bạn từ việc triển khai Salt. Ta sẽ sử dụng hệ thống trạng thái Salt để viết và áp dụng các hành động có thể lặp lại. Điều này sẽ cho phép ta phá hủy bất kỳ môi trường nào của ta , an toàn khi biết rằng ta có thể dễ dàng đưa chúng trở lại trực tuyến ở trạng thái giống hệt nhau sau này.

Trong hướng dẫn cuối cùng của ta , ta đã bắt đầu bằng cách hoàn thành cấu hình ban đầu của server chính Salt của ta . Server này bây giờ sẽ đang chạy và có khả năng đưa ra các lệnh Salt cho chính nó. Trong hướng dẫn này, ta sẽ mở rộng phạm vi tiếp cận của Salt master bằng cách cấu hình các thành phần của salt-cloud . Điều này sẽ cho phép ta kết nối với account DigitalOcean của bạn để sử dụng tài nguyên khi cần thiết. Ta sẽ tạo các cấu hình xác định các thuộc tính của các thành phần riêng lẻ và của toàn bộ môi trường của ta .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần phải cấu hình server chính của Salt như được nêu trong hướng dẫn này . Ta sẽ hoàn thành các bước trong hướng dẫn này bằng cách sử dụng account user không phải root trên server đó.

Bạn cũng cần quyền truy cập vào account DigitalOcean. Ta sẽ tận dụng API DigitalOcean thông qua lệnh salt-cloud để tạo và kiểm soát các server sẽ bao gồm các môi trường khác nhau của ta . Bạn cần tạo mã thông báo API cho mục đích này, mà ta sẽ đề cập trong hướng dẫn.

Tạo cấu hình Minion cloud chính

Ta sẽ bắt đầu bằng cách tạo file cấu hình tại /etc/salt/cloud . Điều này sẽ được sử dụng làm các tùy chọn chung cho tất cả các server mà ta sẽ tạo. Tạo và mở file ngay bây giờ:

  • sudo nano /etc/salt/cloud

Cấu hình duy nhất mà ta sẽ áp dụng vào thời điểm này là các tùy chọn /etc/salt/minion sẽ được đặt trên mỗi server mà ta tạo. Sử dụng phím minion: để bắt đầu cấu trúc của thông tin này:

/ etc / salt / cloud
minion: 

Bên dưới khóa này, hãy bắt đầu bằng cách chỉ định địa chỉ IP của server Salt master. Đây là cài đặt quan trọng nhất, vì nó cho phép Salt minion kết nối lại với master sau khi cấp phép:

/ etc / salt / cloud
minion:   master: master_server_ip 

Ghi chú
Lưu ý các file YAML yêu cầu khoảng cách rất cẩn thận. Hai dấu cách thường được sử dụng cho mỗi cấp độ thụt lề bổ sung.

Tiếp theo, ta cần cài đặt một số chức năng của tôi. Các minion Salt có thể được cấu hình để gửi kết quả của các module thực thi Salt trở lại repository trung tâm trên Salt master. Hệ thống này cung cấp một lối đi cho các server minion để chia sẻ thông tin quan trọng với các minion khác.

Ta muốn cài đặt hai chức năng của tôi. Chúng chỉ đơn giản là sẽ trả lại địa chỉ IP công cộng và riêng tư của minion trở lại Salt master. Các tay sai khác sau đó có thể truy vấn chủ về thông tin này để tìm hiểu cách kết nối với đồng nghiệp:

/ etc / salt / cloud
minion:   master: master_server_ip   mine_functions:     external_ip:       - mine_function: network.interface_ip       - eth0     internal_ip:       - mine_function: network.interface_ip       - eth1 

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

Cài đặt Nhà cung cấp cloud DigitalOcean

Tiếp theo, ta sẽ cấu hình file nhà cung cấp cloud DigitalOcean. Điều này sẽ chứa thông tin cần thiết để kết nối với account DigitalOcean của ta và cũng có một số cài đặt chung mà ta muốn sử dụng cho các server mà ta sẽ tạo.

Bắt đầu bằng cách tạo một folder cho thông tin nhà cung cấp của ta :

  • sudo mkdir -p /etc/salt/cloud.providers.d

Bên trong, tạo và mở một file có tên do.conf :

  • sudo nano /etc/salt/cloud.providers.d/do.conf

Bên trong, ta sẽ tạo một cấu trúc YAML khác. Khóa cấp cao nhất trong cấu trúc sẽ là tên của trình cung cấp. Ta sẽ sử dụng "do" ở đây. Trình driver chỉ định cloud nào sẽ sử dụng. Trình điều khiển của DigitalOcean trong Salt được gọi là digital_ocean :

/etc/salt/cloud.providers.d/do.conf
do:   driver: digital_ocean 

Tiếp theo, bạn cần truy cập account DigitalOcean của bạn và tạo mã thông báo API. Bạn có thể truy cập phần API của console bằng cách nhấp vào liên kết này . Nhấp vào nút “Tạo mã thông báo mới” ở góc trên cùng bên phải của trang:

DigitalOcean tạo mã thông báo API

Trên trang tiếp theo, hãy nhập tên mô tả và nhấp vào “Tạo mã thông báo”:

Mã thông báo tên DigitalOcean

Ở cuối trang tiếp theo, mã thông báo mới của bạn sẽ được hiển thị:

Mã thông báo mới DigitalOcean

Sao chép giá trị này trước khi rời khỏi trang, vì nó sẽ không được hiển thị lại. Nếu bạn quên làm điều này, hãy phá hủy mã thông báo và tạo một mã mới.

Quay lại file cấu hình nhà cung cấp của bạn, đặt tùy chọn personal_access_token thành giá trị của mã thông báo đã tạo mà bạn đã sao chép:

/etc/salt/cloud.providers.d/do.conf
do:   driver: digital_ocean   personal_access_token: digitalocean_api_token 

Tiếp theo, ta sẽ chỉ định thông tin SSH key . Lệnh salt-cloud cần đăng nhập vào server ban đầu bằng SSH để cài đặt Salt minion. Ta sẽ đặt khóa ssh_key_file để trỏ đến vị trí trên hệ thống file nơi ta sẽ sao chép private key SSH của ta trong thời gian ngắn. Bạn nên đặt ssh_key_names thành tên hoặc tên của SSH key mà bạn đã thêm vào DigitalOcean:

/etc/salt/cloud.providers.d/do.conf
do:   driver: digital_ocean   personal_access_token: digitalocean_api_token   ssh_key_file: /etc/salt/pki/cloud/do.pem   ssh_key_names: Work key,Home key 

Ta cũng cần chỉ định tập lệnh và đối số tập lệnh để có thể kiểm soát version chính xác của Salt sẽ được triển khai cho các tay sai mới:

/etc/salt/cloud.providers.d/do.conf
do:   driver: digital_ocean   personal_access_token: digitalocean_api_token   ssh_key_file: /etc/salt/pki/cloud/do.pem   ssh_key_names: Work key,Home key   script: bootstrap-salt   script_args: -P git v2015.8.0 

Lưu file khi bạn hoàn tất. Ta có thể thấy rằng cấu hình nhà cung cấp của ta đã được chọn bởi trường học Salt bằng lệnh :

  • sudo salt-cloud --list-providers
Output
do: ---------- digital_ocean: ----------

Bạn có thể kiểm tra khóa API của bạn bằng lệnh :

  • sudo salt-cloud --list-locations do

Nó sẽ hiển thị cho bạn danh sách các khu vực có sẵn để triển khai.

Tạo file SSH key

Trước khi tiếp tục, ta nên tạo file private key SSH mà ta đã tham chiếu trong file trình cung cấp. Bắt đầu bằng cách tạo cấu trúc folder cần thiết:

  • sudo mkdir -p /etc/salt/pki/cloud

Tiếp theo, tạo một file có tên do.pem bên trong folder mới tạo:

  • sudo nano /etc/salt/pki/cloud/do.pem

Dán nội dung của private key được liên kết với một trong các khóa DigitalOcean của bạn mà bạn đã chỉ định trong chỉ thị ssh_key_names trong file nhà cung cấp. Bạn thường có thể lấy nội dung của private key bằng lệnh nội dung sau vào máy tính local của bạn :

  • cat ~/.ssh/id_rsa

Nó trông giống như sau :

~ / .ssh / id_rsa trên máy tính local
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA39KuD8htHaIgUGFezpTsW0Y5XtNuoSTwVg/nih1rlVyKQIkJ UhJRAakJ9ktQjSWdyAQr0i563WU1KYeHMzQuPPOQAK0vTbMjO5StuzqPEVfPPI1n PIbMeAg9rjX5Lhy/jSOcTwf0E91jTMYuxkZCMCIDTzeVEFLV744APotQktCruJXf L53cVUedOI1fQTEKGa1xEk92Ja4jm/Fn+4WKqYVTKRd2/vHX/ej8bI9Pomamskvc  . . .  hd4tdQKBgQCD8s2IbXVfGQ8x0D12a5K7sfysdnESF5I5ladEAoWP4wYctuGdlDso lBl+jlm1di+1gPqBDMdJhic48ExRBVjKfB1adDeiwhzD4zNxFakhBXHjXHj6MBps Oo/13JyvRs6QRpBolJfVaG1b5CAR+EhAJkxxCxWch8dlwE1gb9jxXw== -----END RSA PRIVATE KEY----- 

Dán nó vào file tại /etc/salt/pki/cloud/do.pem , sau đó lưu file .

Để Salt sử dụng khóa, file và folder chứa khóa phải có quyền chính xác. Đặt các quyền bằng lệnh :

  • sudo chmod 700 /etc/salt/pki/cloud
  • sudo chmod 600 /etc/salt/pki/cloud/do.pem

Như vậy, Salt có thể đọc private key và sử dụng nó để đăng nhập vào các server mới.

Cài đặt profile cloud

Đến đây bạn đã cấu hình nhà cung cấp DigitalOcean, ta có thể tạo profile . Các cấu hình này xác định các thuộc tính mà ta muốn sử dụng khi xây dựng các version server mới. Ta có thể cấu hình bao nhiêu tùy thích.

Ta sẽ lưu trữ các file này trong folder cloud.profiles.d . Tạo folder đó ngay bây giờ:

  • sudo mkdir -p /etc/salt/cloud.profiles.d

Đối với hướng dẫn này, ta sẽ sử dụng một file riêng biệt cho từng môi trường mà ta sẽ cấu hình . Hãy bắt đầu với môi trường phát triển:

  • sudo nano /etc/salt/cloud.profiles.d/dev-profiles.conf

Mỗi profile được chỉ định dưới tên profile cấp cao nhất. Tên là tên mà ta sử dụng khi muốn tạo Server bằng các chi tiết được cung cấp.

Ta sẽ bắt đầu bằng cách chỉ định một profile base-dev . Điều này sẽ chứa các thuộc tính cơ bản được chia sẻ bởi tất cả các máy phát triển của ta . Đối với hướng dẫn này, ta chỉ định rằng ta muốn sử dụng Ubuntu 14.04 64bit, trên 1 Gigabyte Server ở vùng NYC3. NYC3 là khu vực mà Salt master của ta được triển khai, điều này sẽ cho phép ta sử dụng mạng riêng để giao tiếp khi cần thiết. Với suy nghĩ này, ta sẽ bật mạng riêng (điều này sẽ được sử dụng trong cấu hình của ta !) Và cả IPv6.

Bạn có thể sửa đổi kích thước và khu vực theo ý muốn bằng cách sử dụng thông tin trả về từ các lệnh sau:

  • sudo salt-cloud --list-locations do
  • sudo salt-cloud --list-sizes do

Trong kết quả được trả về, “slug” được liên kết với kích thước và vị trí bạn muốn sử dụng là tên mà bạn nên sử dụng trong cấu hình của bạn .

Sử dụng thông tin Server mà ta đã mô tả ở trên, nhà phát triển base-dev của ta sẽ trông giống như sau:

/etc/salt/cloud.profiles.d/dev-profiles.conf
base-dev:   provider: do   image: ubuntu-14-04-x64   size: 1gb   location: nyc3   private_networking: True   ipv6: True 

Hồ sơ này cung cấp hầu hết các chi tiết mà ta cần, nhưng ta cũng muốn bao gồm một số hạt Muối tùy chỉnh trên tay sai của ta . Chúng sẽ được sử dụng để nhắm đến các máy cụ thể dựa trên role của chúng trong cơ sở hạ tầng và môi trường mà chúng là một phần của nó.

Ta có thể làm điều này bằng cách "mở rộng" profile cơ sở. Việc mở rộng cho phép bạn chỉ định một cấu hình mới sẽ kế thừa các đặc điểm của một cấu hình hiện có và cho phép bạn thêm các giá trị mới. Tuy nhiên, việc kế thừa khá kén chọn và sẽ chỉ cho phép một phần mở rộng duy nhất (không mở rộng phần mở rộng). Ngoài ra, danh sách các mục (như hạt của ta ) sẽ thay thế thay vì nối thêm dữ liệu trước đó (đó là lý do tại sao ta không thể chỉ định môi trường của bạn trong cơ sở, mặc dù nó được chia sẻ bởi tất cả các server trong môi trường).

Hồ sơ dành riêng cho web server khá đơn giản. Nó sử dụng tất cả các thuộc tính ban đầu và thêm hai loại ngũ cốc mà ta đã chỉ định. Ta đang sử dụng role " web server ". Ta sẽ so sánh với điều này trong suốt hướng dẫn. Môi trường phát triển sẽ được biểu thị bằng giá trị "dev":

/etc/salt/cloud.profiles.d/dev-profiles.conf
base-dev:   provider: do   image: ubuntu-14-04-x64   size: 1gb   location: nyc3   private_networking: True   ipv6: True  dev-web:   extends: base-dev   minion:     grains:       role: webserver       env: dev 

Hồ sơ database của ta sẽ hoạt động theo cách gần như chính xác. Ta sẽ chỉ sử dụng role “dbserver” thay vì “webserver” và sử dụng ID profile dev-db :

/etc/salt/cloud.profiles.d/dev-profiles.conf
base-dev:   provider: do   image: ubuntu-14-04-x64   size: 1gb   location: nyc3   private_networking: True   ipv6: True  dev-web:   extends: base-dev   minion:     grains:       role: webserver       env: dev  dev-db:   extends: base-dev   minion:     grains:       role: dbserver       env: dev 

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

Ta sẽ tạo một file tương tự cho môi trường dàn dựng của ta . Tạo file bằng lệnh :

  • sudo nano /etc/salt/cloud.profiles.d/stage-profiles.conf

Hồ sơ base-stage hoàn toàn giống với profile nhà phát triển base-dev . Các cấu hình mở rộng cũng khớp chặt chẽ với các định nghĩa trước đó, chỉ sửa đổi môi trường và tên. Ta cũng thêm một cấu hình mở rộng cho bộ cân bằng tải của ta , vì đó là loại server sẽ không tồn tại trong môi trường phát triển của ta :

/etc/salt/cloud.profiles.d/stage-profiles.conf
base-stage:   provider: do   image: ubuntu-14-04-x64   size: 1gb   location: nyc3   private_networking: True   ipv6: True  stage-web:   extends: base-stage   minion:     grains:       role: webserver       env: stage  stage-db:   extends: base-stage   minion:     grains:       role: dbserver       env: stage  stage-lb:   extends: base-stage   minion:     grains:       role: lbserver       env: stage 

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

Cuối cùng, hãy tạo profile production :

  • sudo nano /etc/salt/cloud.profiles.d/prod-profiles.conf

Các cấu hình production gần như hoàn toàn giống với các cấu hình dàn dựng. Ta chỉ thay đổi mọi trường hợp của chuỗi “stage” bằng “prod”:

/etc/salt/cloud.profiles.d/prod-profiles.conf
base-prod:   provider: do   image: ubuntu-14-04-x64   size: 1gb   location: nyc3   private_networking: True   ipv6: True  prod-web:   extends: base-prod   minion:     grains:       role: webserver       env: prod  prod-db:   extends: base-prod   minion:     grains:       role: dbserver       env: prod  prod-lb:   extends: base-prod   minion:     grains:       role: lbserver       env: prod 

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

Kiểm tra xem profile của bạn đang được chọn bằng lệnh :

  • sudo salt-cloud --list-profiles do

Bạn sẽ thấy danh sách tất cả các cấu hình mà bạn đã cấu hình .

Tạo bản đồ môi trường

Bây giờ ta có các cấu hình xác định chính xác cách tạo các server riêng lẻ mà ta cần. Ta có thể dễ dàng sử dụng chúng để tạo các server ta cần, mỗi lần một server .

Tuy nhiên, salt-cloud cũng có thể tận dụng các file cấu hình bổ sung được gọi là “bản đồ”. Bản đồ cho phép bạn tham khảo profile ta đã tạo để phác thảo cơ sở hạ tầng hoàn chỉnh mà bạn muốn xây dựng. Bạn cung cấp tên của các server bạn muốn tạo cho từng loại cấu hình.

Tạo một folder để chứa các file bản đồ có tên cloud.maps.d :

  • sudo mkdir -p /etc/salt/cloud.maps.d

Hãy bắt đầu bằng cách xác định môi trường phát triển của ta . Tạo và mở một file có tên dev-environment.map trong folder này:

  • sudo nano /etc/salt/cloud.maps.d/dev-environment.map

Nếu bạn nhớ lại từ bài viết trước , nơi các môi trường ta sẽ cấu hình đã được phác thảo, thì môi trường phát triển của ta sẽ chỉ có hai server : một web server và một server database . Biết được điều này, file bản đồ phát triển của ta sẽ trông giống như sau:

/etc/salt/cloud.maps.d/dev-enosystem.map
dev-web:   - dev-web  dev-db:   - dev-db 

Mục cấp cao nhất cho biết profile đang được sử dụng để cung cấp tài nguyên. Danh sách bên dưới tên profile (được biểu thị bằng dấu gạch ngang), cho biết tên của các server sẽ xuất hiện.

Ví dụ này định nghĩa một web server được gọi là “dev-web” và một server database được gọi là “dev-db”. Cả hai server này đều có thể được tạo đồng thời bằng cách trỏ salt-cloud tới file này. Lưu file khi bạn hoàn tất.

Tiếp theo, hãy tạo bản đồ môi trường dàn dựng:

  • sudo nano /etc/salt/cloud.maps.d/stage-environment.map

Môi trường dàn dựng của ta có hai web server , hai server database và một bộ cân bằng tải. Ta sẽ đánh số các server dự phòng của bạn để phân biệt giữa chúng. Bản đồ của ta sẽ trông giống như sau:

/etc/salt/cloud.maps.d/stage-enosystem.map
stage-web:   - stage-www1   - stage-www2  stage-db:   - stage-db1   - stage-db2  stage-lb:   - stage-lb 

Tệp sẽ có khả năng cung cấp tổng cộng năm server . Lưu file khi bạn hoàn tất.

Cuối cùng, ta có thể tạo file bản đồ môi trường production của bạn bằng lệnh :

  • sudo nano /etc/salt/cloud.maps.d/prod-environment.map

Điều này sẽ khá giống với bản đồ môi trường dàn dựng của ta (với các ngoại lệ rõ ràng của tên server và cấu hình được sử dụng). Sản xuất sẽ có một bộ cân bằng tải bổ sung để có thể cấu hình lỗi vượt qua:

/etc/salt/cloud.maps.d/prod-enosystem.map
prod-web:   - prod-www1   - prod-www2  prod-db:   - prod-db1   - prod-db2  prod-lb:   - prod-lb1   - prod-lb2 

Các server trống cần thiết cho môi trường production của ta có thể được vận hành với file này. Lưu và đóng nó khi bạn hoàn thành.

Thử nghiệm cung cấp môi trường

Bây giờ ta đã tạo các file bản đồ của bạn , ta có thể dễ dàng thay đổi bất kỳ hoặc tất cả các môi trường của ta .

Trước khi có thể thực hiện việc này, ta cần tải tập lệnh Salt bootstrap xuống server Master của bạn . Master sẽ kết nối với minion, tải lên tập lệnh và chạy nó để bắt đầu các minion Salt trên các server mà ta tạo.

Download tập lệnh bootstrap bằng lệnh :

  • sudo salt-cloud -u

Lệnh này nên được chạy một lúc một lúc đảm bảo rằng bạn đang sử dụng version mới nhất của tập lệnh bootstrap.

Sau khi tập lệnh bootstrap được download , bạn có thể tạo bất kỳ môi trường nào của bạn bằng cách sử dụng lệnh salt-cloud . Ta sẽ kiểm tra điều này với môi trường phát triển vì nó thể hiện quy trình với ít tài nguyên nhất.

Ta sẽ chuyển cờ -P để yêu salt-cloud tạo các server song song. Nếu không có điều này, Salt sẽ đợi một server kết thúc quá trình khởi động trước khi bắt đầu hoạt động trên server tiếp theo. Ta cần sử dụng cờ -m và trỏ nó vào bản đồ môi trường mà ta muốn sử dụng.

Lệnh hoàn chỉnh trông như sau:

  • sudo salt-cloud -P -m /etc/salt/cloud.maps.d/dev-environment.map

Bạn cần xác nhận việc tạo hai server được xác định trong file đó:

Output
[INFO ] salt-cloud starting [INFO ] Applying map from '/etc/salt/cloud.maps.d/dev-environment.map'. [INFO ] Starting new HTTPS connection (1): api.digitalocean.com The following virtual machines are set to be created: dev-db dev-web Proceed? [N/y]

Gõ “Y” để tạo server .

Sau khi server được tạo, bạn có thể kiểm tra kết nối Salt bằng lệnh :

  • sudo salt '*' test.ping

Bạn sẽ nhận được phản hồi từ tay sai của Salt master và cả hai cỗ máy phát triển mới. Trong quá trình cung cấp, Salt master đã tạo và chấp nhận các khóa cho các server mới trước khi đặt chúng vào các máy minion. Do đó, ta không cần sử dụng salt-key để chấp nhận từng khóa mới. Các server mới sẽ phản hồi ngay lập tức:

Output
dev-db: True sm: True dev-web: True

Bạn có thể sử dụng file bản đồ để đưa ra các lệnh salt-cloud tới các server được xác định dưới dạng một group . Nếu bạn không có kế hoạch sử dụng máy phát triển ngay tại thời điểm này, vui lòng hủy chúng bằng lệnh :

  • sudo salt-cloud -d -m /etc/salt/cloud.maps.d/dev-environment.map

Điều này sẽ phá hủy các server thông qua API và xóa các khóa tay sai khỏi cửa hàng.

Ngoài ra, bạn có thể hủy các máy riêng lẻ theo tên:

  • sudo salt-cloud -d dev-db

Nếu bạn làm như vậy, vào lần tiếp theo bạn tạo bằng file bản đồ, salt-cloud sẽ chỉ tạo các server chưa có:

sudo salt-cloud -P -m /etc/salt/cloud.maps.d/dev-environment.map 
Output
[INFO ] salt-cloud starting [INFO ] Applying map from '/etc/salt/cloud.maps.d/dev-environment.map'. [INFO ] Starting new HTTPS connection (1): api.digitalocean.com [WARNING ] u'dev-web' already exists, removing from the create map. The following virtual machines already exist: dev-web The following virtual machines are set to be created: dev-db Proceed? [N/y]

Vui lòng kiểm tra các file bản đồ khác của bạn tại thời điểm này đảm bảo rằng chúng có thể cung cấp chính xác các server cần thiết cho môi trường mà ta sẽ cấu hình .

Kết luận

Đến đây, server chính của bạn phải có đầy đủ khả năng xoay vòng tài nguyên bằng cách sử dụng nhà cung cấp cloud DigitalOcean. Ta đã tạo profile cho các đặc điểm của từng máy riêng lẻ của bạn và cài đặt bản đồ để dễ dàng mô tả các server riêng lẻ mà ta cần cho mỗi lần cài đặt .

Trong hướng dẫn tiếp theo của loạt bài này, ta sẽ bắt đầu đi sâu vào khả năng quản lý cấu hình của Salt bằng cách cài đặt cấu hình Nginx có thể tái tạo.


Tags:

Các tin liên quan