Thứ ba, 03/03/2015 | 00:00 GMT+7

Cách thiết lập hệ thống quản lý cấu hình Chef 12 trên server Ubuntu 14.04

Khi yêu cầu cơ sở hạ tầng của bạn mở rộng, việc quản lý từng server bằng tay trở thành một nhiệm vụ ngày càng khó khăn. Khó khăn này được cộng thêm bởi yêu cầu về khả năng tái lập, điều này trở nên cần thiết nếu một nút bị lỗi hoặc nếu cần mở rộng quy mô theo chiều ngang.

Các giải pháp quản lý cấu hình được thiết kế để giải quyết những vấn đề này bằng cách biến quản trị cơ sở hạ tầng của bạn thành cơ sở mã. Thay vì thực hiện các việc riêng lẻ trên một số máy, các công cụ này cho phép bạn commit các yêu cầu của bạn đến một vị trí trung tâm nơi mỗi thành phần có thể kết nối, kéo xuống cấu hình của chúng và áp dụng nó.

Trong hướng dẫn trước , ta đã nói về cấu trúc chung của các bộ phận Đầu bếp và cách chúng tương tác để đạt được mục tiêu của nhà quản trị. Ta đã nói về các thuật ngữ có liên quan và thảo luận về trách nhiệm của từng phần.

Trong hướng dẫn này, ta sẽ cài đặt phần mềm thực tế. Ta sẽ cài đặt một server Chef tập trung để lưu trữ và phục vụ các hướng dẫn cấu hình và thông tin cấu hình nút. Ta cũng sẽ cài đặt một máy trạm nơi administrator có thể làm việc với cơ sở mã và thay đổi các đặc tính của cơ sở hạ tầng. Ta sẽ theo dõi điều này bằng cách khởi động một nút mới để đặt nó dưới sự quản lý của hệ sinh thái Chef.

Yêu cầu và Mục tiêu

Ta sẽ cài đặt version 12 của Chef trong hướng dẫn này. Cấu hình có thể khác nhau đáng kể giữa các version , vì vậy hãy đảm bảo bạn đang hoạt động trong cùng một số version chính như hướng dẫn này để có kết quả tốt nhất.

Tài liệu Chef cho ta biết rằng server Chef của bạn phải có ít nhất 4 lõi và 4 GB RAM. Nó cũng phải có hệ điều hành 64-bit . Đối với hướng dẫn của ta , ta sẽ sử dụng server DigitalOcean 4 lõi / 8 GB với Ubuntu 14.04 64-bit.

Máy trạm và các node có rất ít yêu cầu. Ta cũng sẽ sử dụng Ubuntu 14.04 trên những bản này để có tính nhất quán.

Khi ta hoàn tất, ta sẽ có một server Chef tập trung để lưu trữ và phục vụ dữ liệu cấu hình của ta . Máy trạm của ta sẽ được sử dụng để áp dụng các thay đổi , tải chúng lên server , khởi động và quản lý các node mới. Nút đại diện cho một server duy nhất trong cơ sở hạ tầng của ta .

Cấu hình Server Chef

Ta sẽ bắt đầu bằng cách cài đặt server Chef. Lưu ý , Chef đề xuất ít nhất 4 lõi và 4 GB RAM cho server này, vì vậy hãy lên kế hoạch cho phù hợp.

Đảm bảo rằng Server có thể truy cập được bằng Tên server

Khi bạn đã đăng nhập vào server mà bạn định cài đặt server Chef lên, nhiệm vụ đầu tiên bạn cần thực hiện là đảm bảo tên server của server là domain hoặc địa chỉ IP hoàn toàn đủ điều kiện có thể phân giải (FQDN). Bạn có thể kiểm tra bằng lệnh :

hostname -f 

Kết quả phải là một địa chỉ mà server có thể được truy cập. Nếu không đúng như vậy, bạn có thể đặt nó thành domain hoặc địa chỉ IP nơi có thể truy cập server bằng cách chỉnh sửa file này:

sudo nano /etc/hosts 

Tệp sẽ trông giống như sau:

127.0.1.1 current_hostname current_hostname_alias 127.0.0.1 localhost  . . . 

Sửa đổi dòng trên cùng để phản ánh domain đủ điều kiện hoặc địa chỉ IP, tiếp theo là khoảng trắng và bất kỳ alias nào bạn muốn sử dụng cho server của bạn . Thêm một dòng bên dưới hai dòng được hiển thị có địa chỉ IP công cộng của server của bạn trong cột đầu tiên và thông tin mà bạn đã sửa đổi ở cuối dòng 127.0.1.1 đến cuối. Nó trông giống như sau :

127.0.1.1 fqdn_or_IP_address host_alias 127.0.0.1 localhost IP_address fqdn_or_IP_address host_alias 

Vì vậy, nếu tôi không có domain , địa chỉ IP công cộng của tôi là 123.123.123.123 và nếu tôi cũng muốn server của bạn có thể truy cập được bằng tên server “đầu bếp”, tôi có thể có một file giống như sau:

127.0.1.1 123.123.123.123 chef 127.0.0.1 localhost 123.123.123.123 123.123.123.123 chef 

Mặt khác, nếu server này có domain đủ điều kiện là chef.example.com và địa chỉ IP là 234.234.234.234 , file của tôi có thể trông giống như sau:

127.0.1.1 chef.example.com chef 127.0.0.1 localhost 234.234.234.234 chef.example.com chef 

Lưu file khi bạn hoàn tất. Bạn có thể kiểm tra xem giá trị đã được đặt chính xác chưa bằng lệnh :

hostname -f 

Kết quả phải là một giá trị mà bạn có thể sử dụng để truy cập server Chef của bạn từ bất kỳ đâu trong cơ sở hạ tầng của bạn.

Download và cài đặt phần mềm Chef 12 Server

Tiếp theo, ta có thể tiếp tục và download phần mềm server Chef 12. Bạn có thể tìm thấy gói phải được cài đặt bằng cách truy cập trang Chef. Cụ thể, để cài đặt Ubuntu, bạn có thể theo liên kết này .

Trong tiêu đề “Ubuntu Linux 14.04”, nhấp chuột phải vào liên kết download và sao chép vị trí liên kết:

 Download   server  Chef

Quay lại server của bạn, thay đổi thành folder chính của bạn. Dán liên kết bạn đã sao chép và sử dụng lệnh wget để download gói. Liên kết bạn đã sao chép có thể khác với liên kết bên dưới nếu có một bản cập nhật version nhỏ kể từ khi viết bài này:

cd ~ wget https://web-dl.packagecloud.io/chef/stable/packages/ubuntu/trusty/chef-server-core_12.0.5-1_amd64.deb 

Sau khi quá trình download hoàn tất, hãy cài đặt gói bằng lệnh :

sudo dpkg -i chef-server-core_*.deb 

Thao tác này sẽ cài đặt hệ thống Chef 12 cơ sở vào server . Nếu bạn đã chọn một server có phần cứng kém mạnh hơn số lượng được khuyến khích , bước này có thể không thành công.

Sau khi cài đặt hoàn tất, bạn phải gọi lệnh reconfigure , lệnh này cấu hình các thành phần tạo nên server để hoạt động cùng nhau trong môi trường cụ thể của bạn:

sudo chef-server-ctl reconfigure 

Tạo admin-user và tổ chức

Tiếp theo, ta cần tạo một admin-user . Đây sẽ là tên user sẽ có quyền truy cập để áp dụng các thay đổi đối với các thành phần cơ sở hạ tầng trong tổ chức mà ta sẽ tạo.

Ta có thể thực hiện việc này bằng cách sử dụng lệnh con do user-create của lệnh chef-server-ctl . Lệnh yêu cầu một số trường được chuyển vào trong quá trình tạo. Cú pháp chung là:

chef-server-ctl user-create USERNAME FIRST_NAME LAST_NAME EMAIL PASSWORD 

Ta sẽ bao gồm thông tin này và cũng sẽ thêm -f , một cờ bổ sung, vào cuối để chỉ định tên file để xuất khóa RSA riêng tư của user mới của ta . Ta cần điều này để xác thực bằng lệnh quản lý knife sau này.

Đối với ví dụ của ta , ta sẽ tạo một user với thông tin sau:

  • Tên user : admin
  • Tên : administrator
  • Họ : admin
  • Email : admin@example.com
  • Mật khẩu : examplepass
  • Tên file : admin.pem

Lệnh cần thiết để tạo user với thông tin này là (bạn nên thay đổi điều này để phản ánh thông tin của bạn, đặc biệt là password ):

sudo chef-server-ctl user-create admin admin admin admin@example.com examplepass -f admin.pem 

Đến đây bạn sẽ có một private key được gọi là admin.pem trong folder hiện tại của bạn .

Đến đây bạn đã có user , bạn có thể tạo một tổ chức bằng lệnh con org-create . Một tổ chức chỉ đơn giản là một group cơ sở hạ tầng và cấu hình trong Chef. Lệnh có cú pháp chung sau:

chef-server-ctl org-create SHORTNAME LONGNAME --association_user USERNAME 

Tên ngắn gọn là tên mà bạn sẽ dùng để chỉ tổ chức từ bên trong Chef. Tên dài là tên thực của tổ chức. --association_user chỉ định tên user có quyền truy cập để quản lý tổ chức. , ta sẽ thêm cờ -f để ta có thể chỉ định tên của file để đặt private key . Khóa sẽ được tạo được sử dụng để xác thực khách hàng mới như một phần của tổ chức cho đến khi họ có thể nhận được khóa khách hàng duy nhất của riêng mình.

Ta sẽ tạo ra một tổ chức với những phẩm chất sau:

  • Tên giao dịch : digitalocean
  • Tên dài : DigitalOcean, Inc.
  • User kết hợp : administrator
  • Tên file : digitalocean-validator.pem

Để tạo một tổ chức với các phẩm chất trên, ta sẽ sử dụng lệnh sau:

sudo chef-server-ctl org-create digitalocean "DigitalOcean, Inc." --association_user admin -f digitalocean-validator.pem 

Sau đó, bạn sẽ có hai file khóa .pem trong folder chính của bạn . Trong trường hợp của ta , chúng sẽ được gọi là admin.pemdigitalocean-validator.pem . Ta cần kết nối với server này và tải các khóa này xuống máy trạm của ta trong giây lát. Tuy nhiên, hiện tại, quá trình cài đặt server Chef của ta đã hoàn tất.

Cấu hình một máy trạm đầu bếp

Bây giờ server Chef của ta đã được cài đặt và chạy, hành động tiếp theo của ta là cấu hình một máy trạm. Việc điều phối và cấu hình cơ sở hạ tầng thực tế không diễn ra trên server Chef. Công việc này được thực hiện trên một máy trạm, sau đó tải dữ liệu lên server để tác động đến môi trường Chef.

Sao chép đại diện đầu bếp

Cấu hình Chef cho cơ sở hạ tầng của bạn được duy trì trong cấu trúc file phân cấp được gọi chung là Chef repo. Cấu trúc chung của điều này có thể được tìm thấy trong repository lưu trữ GitHub do group Chef cung cấp. Ta sẽ sử dụng git để sao chép git này vào máy trạm của bạn để làm cơ sở cho repository Chef của cơ sở hạ tầng của ta .

Đầu tiên, ta cần cài đặt git thông qua các công cụ đóng gói apt . Cập nhật index đóng gói của bạn và cài đặt công cụ bằng lệnh :

sudo apt-get update sudo apt-get install git 

Khi bạn đã cài đặt git , bạn có thể sao chép repository Chef vào máy tính của bạn . Đối với hướng dẫn này, ta chỉ cần sao chép nó vào folder chính của ta :

cd ~ git clone https://github.com/chef/chef-repo.git 

Thao tác này sẽ kéo cấu trúc cơ bản của Chef repo vào một folder có tên là chef-repo trong folder chính của bạn.

Đặt Chef Repo của bạn dưới quyền kiểm soát version

Các cấu hình được tạo trong chính repo Chef được quản lý tốt nhất trong hệ thống kiểm soát version giống như cách bạn quản lý mã. Vì ta đã sao chép repo ở trên, một repo git đã được khởi tạo.

Để cài đặt máy trạm của bạn cho các commit mới, bạn nên thực hiện một số điều.

Đầu tiên, đặt tên và email mà git sẽ sử dụng để gắn thẻ bất kỳ commit nào bạn thực hiện. Đây là một yêu cầu để git chấp nhận các commit . Ta đặt điều này trên phạm vi global để bất kỳ git repo nào ta tạo sẽ sử dụng các giá trị sau:

git config --global user.name "Your Name" git config --global user.email "username@domain.com" 

Tiếp theo, ta sẽ yêu cầu git bỏ qua bất kỳ thông tin nào có trong folder ~/chef-repo/.chef . Ta sẽ tạo folder này trong vài phút để lưu trữ một số thông tin nhạy cảm. Hiện tại, ta có thể thêm vị trí này vào file .gitignore để git không lưu trữ dữ liệu không được phép hiển thị cho người khác:

echo ".chef" >> ~/chef-repo/.gitignore 

Vì ta đã thực hiện thay đổi đối với file .gitignore , ta có thể tiếp tục và thực hiện commit mới đầu tiên của bạn đối với hệ thống kiểm soát version . Trước tiên, hãy thêm tất cả các file đã sửa đổi vào vùng tổ chức hiện tại:

cd ~/chef-repo git add . 

Bây giờ, commit các thay đổi . Ta sẽ sử dụng cờ -m để chỉ định một thông báo commit nội dòng mô tả những thay đổi mà ta đang thực hiện:

git commit -m "Excluding the ./.chef directory from version control" 

Đại diện Chef của ta hiện đang được kiểm soát version . Khi ta tạo ra các cấu hình cho cơ sở hạ tầng của bạn , ta có thể sử dụng hai lệnh trên để giữ cho git repo của ta được cập nhật.

Download và cài đặt Bộ phát triển đầu bếp

Tiếp theo, ta cần cài đặt Chef Development Kit, một bộ phần mềm được thiết kế cho các máy trạm Chef. Điều này bao gồm nhiều tiện ích sẽ hữu ích khi thiết kế cấu hình cho cơ sở hạ tầng của bạn. Công cụ mà ta quan tâm ở thời điểm này là lệnh knife đi kèm, có thể giao tiếp và điều khiển cả server Chef và bất kỳ client Chef nào.

Ta có thể tìm thấy Bộ tài liệu phát triển đầu bếp 12 trên trang web Chef. Vì ta đang sử dụng Ubuntu 14.04 làm máy trạm của bạn , trang ở đây sẽ chứa liên kết download mới nhất. Lưu ý tại thời điểm viết bài này, liên kết download chỉ tham chiếu đến Ubuntu 12.04 và Ubuntu 13.10, nhưng nó vẫn sẽ cài đặt mà không gặp sự cố trên Ubuntu 14.04.

Nhấp chuột phải vào nút download trong “Ubuntu Linux” và sao chép vị trí liên kết:

Bộ công cụ dành cho nhà phát triển Ubuntu Chef

Quay lại máy trạm của bạn, thay đổi folder chính của bạn. Dán liên kết bạn đã sao chép và sử dụng lệnh wget để download gói. Liên kết bạn đã sao chép có thể khác với liên kết bên dưới nếu version bộ phát triển mới hơn đã được phát hành:

cd ~ wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.4.0-1_amd64.deb 

Khi .deb đã được download , bạn có thể cài đặt nó bằng lệnh :

sudo dpkg -i chefdk_*.deb 

Sau khi cài đặt, bạn có thể xác minh tất cả các thành phần có sẵn ở vị trí mong đợi của chúng thông qua lệnh chef mới:

chef verify 

Nếu máy trạm của bạn chủ yếu được sử dụng để quản lý Chef cho cơ sở hạ tầng của bạn, bạn có thể sẽ muốn đặt mặc định thành version Ruby được cài đặt với Chef. Bạn có thể thực hiện việc này bằng cách sửa đổi .bash_profile của bạn để Chef's Ruby được ưu tiên:

echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile 

Sau đó, bạn có thể tạo nguồn file .bash_profile của bạn để đặt các biến môi trường chính xác cho phiên hiện tại:

source ~/.bash_profile 

Nếu bạn muốn quản lý các version Ruby của bạn một cách độc lập, bạn có thể bỏ qua các bước trên.

Download các khóa xác thực xuống máy trạm

Đến đây, máy trạm của bạn có tất cả phần mềm cần thiết để tương tác với server Chef và soạn cấu hình cơ sở hạ tầng. Tuy nhiên, nó vẫn chưa được cấu hình để tương tác với server Chef và môi trường của bạn. Trong phần này, ta sẽ download thông tin đăng nhập mà ta đã tạo trên server Chef.

Ta sẽ sử dụng trình scp để download khóa user và khóa xác thực tổ chức mà ta đã tạo trên server Chef. Trước khi làm như vậy, ta sẽ tạo folder ẩn nơi ta sẽ lưu trữ các file này:

mkdir ~/chef-repo/.chef 

Phương pháp mà bạn sử dụng để kết nối với server Chef sẽ xác định chính xác cách ta download các phím. Làm theo phương pháp bên dưới phù hợp với cài đặt của bạn:

Cách download khóa khi kết nối với server Chef bằng password

Nếu bạn kết nối với server Chef của bạn thông qua SSH sử dụng xác thực dựa trên password , lệnh scp sẽ hoạt động mà không cần sửa đổi đáng kể.

Trên máy trạm của bạn, chỉ định tên user và domain hoặc địa chỉ IP được sử dụng để kết nối với server Chef. Tiếp theo ngay lập tức với dấu hai chấm (:) và đường dẫn đến file bạn muốn download . Sau khi thêm khoảng ~/chef-repo/.chef , hãy chỉ ra folder trên máy tính cục bộ mà bạn muốn đặt file download ( ~/chef-repo/.chef trong trường hợp của ta ).

Nếu bạn đăng nhập vào server Chef bằng account user root , các lệnh của bạn sẽ giống như thế này. Hãy nhớ thay đổi cả domain hoặc địa chỉ IP và tên của các file chính mà bạn đang cố download để phù hợp với môi trường của bạn:

scp root@server_domain_or_IP:/root/admin.pem ~/chef-repo/.chef scp root@server_domain_or_IP:/root/digitalocean-validator.pem ~/chef-repo/.chef 

Nếu bạn kết nối với server Chef của bạn bằng user không phải root, các lệnh sẽ trông giống như sau:

scp username@server_domain_or_IP:/home/username/admin.pem ~/chef-repo/.chef scp username@server_domain_or_IP:/home/username/digitalocean-validator.pem ~/chef-repo/.chef 

Cách download khóa khi kết nối với server Chef bằng SSH key

Thay vào đó, nếu bạn kết nối với server Chef của bạn bằng các phím SSH ( được khuyến khích ), bạn cần thực hiện một số bước bổ sung.

Đầu tiên, rời khỏi phiên SSH của bạn với máy trạm. Ta cần kết nối lại trong giây lát với một tham số mới:

exit 

Sau khi quay lại máy tính local của bạn , bạn cần thêm các SSH key mà bạn sử dụng để kết nối với server Chef với một đại lý SSH. OpenSSH, bộ SSH tiêu chuẩn, bao gồm một tác nhân SSH có thể được khởi động bằng lệnh :

eval $(ssh-agent) 

Bạn sẽ thấy kết quả giống như thế này (số lượng có thể sẽ khác):

Agent pid 13881 

Sau khi tác nhân được khởi động, bạn có thể thêm SSH key của bạn vào đó:

ssh-add 
Identity added: /home/demo/.ssh/id_rsa (rsa w/o comment) 

Điều này sẽ giữ SSH key của bạn được lưu trong bộ nhớ. Bây giờ, bạn có thể chuyển tiếp khóa đã lưu trữ tới máy trạm của bạn khi bạn kết nối bằng cách sử dụng tùy chọn -A với ssh . Điều này sẽ cho phép bạn kết nối với bất kỳ máy tính nào từ máy trạm của bạn như thể bạn đang kết nối từ máy tính local của bạn :

ssh -A username@workstation_domain_or_IP 

Như vậy, bạn có thể kết nối với server Chef của bạn mà không cần password bằng thông tin đăng nhập SSH được chuyển tiếp. Nếu các phím trên server Chef của bạn có thông qua user root, các lệnh bạn cần sẽ trông giống như lệnh này. Hãy nhớ thay đổi domain hoặc địa chỉ IP của server Chef và các tên khóa nếu cần:

scp root@server_domain_or_IP:/root/admin.pem ~/chef-repo/.chef scp root@server_domain_or_IP:/root/digitalocean-validator.pem ~/chef-repo/.chef 

Nếu SSH key được cấu hình cho server Chef thay thế được sử dụng để xác thực bạn với account regular user , các lệnh của bạn sẽ trông giống như sau:

scp username@server_domain_or_IP:/home/username/admin.pem ~/chef-repo/.chef scp username@server_domain_or_IP:/home/username/digitalocean-validator.pem ~/chef-repo/.chef 

Cấu hình Knife để quản lý môi trường đầu bếp của bạn

Đến đây bạn đã có thông tin đăng nhập Chef trên máy trạm của bạn , ta có thể cấu hình lệnh knife với thông tin nó cần để kết nối và kiểm soát cơ sở hạ tầng Chef của bạn. Điều này được thực hiện thông qua file knife.rb mà ta sẽ đặt trong folder ~/chef-repo/.chef cùng với các khóa của ta .

Mở một file có tên là knife.rb trong folder đó trong editor của bạn:

nano ~/chef-repo/.chef/knife.rb 

Trong file này, dán thông tin sau:

current_dir = File.dirname(__FILE__) log_level                :info log_location             STDOUT node_name                "name_for_workstation" client_key               "#{current_dir}/name_of_user_key" validation_client_name   "organization_validator_name" validation_key           "#{current_dir}/organization_validator_key" chef_server_url          "https://server_domain_or_IP/organizations/organization_name" syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache" cookbook_path            ["#{current_dir}/../cookbooks"] 

Các mục sau đây sẽ được điều chỉnh để phù hợp với cơ sở hạ tầng của bạn:

  • node_name : Điều này chỉ định tên mà knife sẽ sử dụng để kết nối với server Chef của bạn. Tên này phải trùng với tên user của bạn.
  • client_key : Đây phải là tên và đường dẫn đến khóa user mà bạn đã sao chép từ server Chef. Ta có thể sử dụng đoạn mã #{current_dir} để điền vào đường dẫn nếu khóa nằm trong cùng folder với file knife.rb
  • validation_client_name : Đây là tên của client xác nhận mà knife sẽ sử dụng để khởi động các node mới. Điều này sẽ có dạng tên viết tắt của tổ chức của bạn, theo sau là -validator .
  • validation_key : Giống như client_key , nó bao gồm tên và đường dẫn đến khóa xác thực mà bạn đã sao chép từ server Chef. , bạn có thể sử dụng đoạn mã Ruby #{current_dir} để chỉ định folder hiện tại nếu khóa xác thực nằm trong cùng folder với file knife.rb
  • chef_server_url : Đây là URL có thể truy cập server Chef. Nó phải bắt đầu bằng https:// , sau đó là domain hoặc địa chỉ IP của server Chef của bạn. Sau đó, đường dẫn đến tổ chức của bạn phải được chỉ định bằng cách thêm /organizations/ your_organization_name .

Đối với hướng dẫn của ta , file knife.rb sẽ giống như sau. Bạn vẫn cần điều chỉnh domain hoặc địa chỉ IP của server nếu bạn đang làm theo:

current_dir = File.dirname(__FILE__) log_level                :info log_location             STDOUT node_name                "admin" client_key               "#{current_dir}/admin.pem" validation_client_name   "digitalocean-validator" validation_key           "#{current_dir}/digitalocean-validator.pem" chef_server_url          "https://server_domain_or_IP/organizations/digitalocean" syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache" cookbook_path            ["#{current_dir}/../cookbooks"] 

Khi bạn hoàn tất, hãy lưu file knife.rb

Bây giờ, ta sẽ kiểm tra file cấu hình bằng cách thử một lệnh knife đơn giản. Ta cần ở trong folder ~/chef-repo để file cấu hình của ta được đọc chính xác:

cd ~/chef-repo knife client list 

Lần thử đầu tiên này sẽ không thành công với một lỗi trông như sau:

ERROR: SSL Validation failure connecting to host: server_domain_or_IP - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed ERROR: Could not establish a secure connection to the server. Use `knife ssl check` to troubleshoot your SSL configuration. If your Chef Server uses a self-signed certificate, you can use `knife ssl fetch` to make knife trust the server's certificates.  Original Exception: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 

Điều này xảy ra do ta không có certificate SSL của server Chef trên máy trạm của bạn . Ta có thể có được điều này bằng lệnh :

knife ssl fetch 

Thao tác này sẽ thêm file certificate của server Chef vào danh sách trong folder ~/chef-repo/.chef của ta :

WARNING: Certificates from server_domain_or_IP will be fetched and placed in your trusted_cert directory (/home/demo/chef-repo/.chef/trusted_certs).  Knife has no means to verify these are the correct certificates. You should verify the authenticity of these certificates after downloading.  Adding certificate for server_domain_or_IP in /home/demo/chef-repo/.chef/trusted_certs/server_domain_or_IP.crt 

Sau khi certificate SSL được tìm nạp, lệnh trước đó sẽ hoạt động:

knife client list 
digitalocean-validator 

Nếu lệnh trên trả về chính xác, máy trạm của bạn hiện đã được cài đặt để kiểm soát môi trường Chef của bạn.

Khởi động nút mới bằng dao

Với server Chef và máy trạm của ta được cấu hình , ta có thể bắt đầu sử dụng Chef để cấu hình các server mới trong cơ sở hạ tầng của ta .

Điều này xảy ra thông qua một quá trình được gọi là "khởi động" trong đó file thực thi ứng dụng client Chef được cài đặt trên máy tính mới và khóa trình xác nhận tổ chức cũng được chuyển theo. Sau đó, nút mới liên hệ với server Chef bằng khóa xác thực và đổi lại, nhận khóa client duy nhất của chính nó và bất kỳ cấu hình nào đã được gán cho nó. Quá trình này đưa server mới về trạng thái ban đầu và cài đặt nó để quản lý trong tương lai.

Để kết nối với server mới, ta cần một số thông tin về nút mới:

  • Tên domain hoặc địa chỉ IP nơi có thể liên lạc được
  • Tên user được sử dụng để hoàn thành các hành động quản trị. Đây có thể là root , hoặc một user cấu hình với sudo quyền .
  • Một phương pháp đăng nhập với quyền user ở trên. Đây có thể là password hoặc khả năng sử dụng SSH key .
  • Một phương thức thực hiện các việc admin . Đối với user root , điều này là không cần thiết. Đối với user dựa vào quyền sudo , password thường là cần thiết.

Cú pháp chung của lệnh sẽ là:

knife bootstrap node_domain_or_IP [options] 

Một số tùy chọn phổ biến mà bạn có thể sử dụng là:

  • -x : Được sử dụng để chỉ định tên user để xác thực thông qua SSH. Điều này thường được yêu cầu.
  • -N : Tên mới của nút, như trong Chef. Bỏ qua điều này thường sẽ dẫn đến tên server được sử dụng cho tên nút Chef.
  • -P : Được sử dụng để chỉ định password cho tên user trên server từ xa. Này là cần thiết nếu một trong hai phiên SSH yêu cầu xác thực password hoặc nếu tên user đòi hỏi một password cho sudo lệnh.
  • --sudo : Nếu tên user trên server từ xa cần sử dụng sudo để thực hiện các hành động quản trị, thì cờ này là cần thiết. Theo mặc định, nó sẽ nhắc nhập password sudo .
  • --use-sudo-password : Nếu bạn đã cung cấp password cho user có cờ -P , việc sử dụng cờ này cùng với cờ --sudo sẽ sử dụng password -P mà không cần nhắc.
  • -A : Tùy chọn này chuyển tiếp các SSH key đến server từ xa để đăng nhập thay vì sử dụng xác thực password .

Khi sử dụng tùy chọn -A , bạn phải khởi động tác nhân SSH trên máy tính local của bạn , thêm SSH key được dùng để kết nối với nút mới và chuyển tiếp thông tin đó đến máy trạm của bạn bằng cách kết nối với cờ -A ban đầu. Thông tin thêm về cách thực hiện việc này có thể tìm thấy trong phần cấu hình máy trạm liên quan đến việc download các khóa từ server Chef.

Sử dụng thông tin trên, có thể xây dựng các lệnh khởi động chính xác cho nhiều trường hợp.

Ví dụ, để bootstrap một nút với tên “thử nghiệm”, sử dụng tên user demo , mà được cấu hình với sudo quyền , và trong đó cần có một password cho SSH và sudo xác nhận, ta có thể gõ:

knife bootstrap node_domain_or_IP -N testing -x demo -P password --sudo --use-sudo-password 

Nếu ta muốn bootstrap bằng user root , với xác thực SSH key bằng các khóa có sẵn trên máy trạm và muốn tiếp tục sử dụng tên server của nút làm tên nút Chef, ta có thể nhập:

knife bootstrap node_domain_or_IP -x root -A 

Nếu ta muốn sử dụng SSH key để xác thực với user sudo , ta vẫn cần cung cấp password bằng cờ -P , cờ --sudo cờ --use-sudo-password để tránh dấu nhắc :

knife bootstrap node_domain_or_IP -x demo -A -P password --sudo --use-sudo-password -N name 

Nếu bạn đang ở trong trường hợp trên, nhưng không ngại bị kích hoạt cho password sudo , thay vào đó bạn có thể chỉ cần nhập sau:

knife bootstrap node_domain_or_IP -x demo -A --sudo -N name 

Khi nút mới của bạn được khởi động, bạn sẽ có một ứng dụng client mới:

knife client list 
digitalocean-validator name 

Bạn cũng nên có một nút mới cùng tên:

knife node list 
name 

Bạn có thể sử dụng quy trình trên để dễ dàng cài đặt client Chef mới trên bất kỳ số lượng server mới nào.

Nếu bạn muốn tìm hiểu về cách tự động thêm các server DigitalOcean mới vào cơ sở hạ tầng Chef hiện có của bạn mà không cần phải khởi động từng server , hãy xem hướng dẫn này .

Kết luận

Sau khi làm theo hướng dẫn này, bạn sẽ có một server Chef đầy đủ chức năng được cấu hình cho cơ sở hạ tầng của bạn . Ta cũng đã cài đặt một máy trạm được dùng để quản lý và duy trì các cấu hình mà Chef sẽ áp dụng cho cơ sở hạ tầng của bạn. Ta đã trình bày cách sử dụng lệnh knife để khởi động các server sẽ được cấu hình bởi Chef.

Trong hướng dẫn tiếp theo , ta sẽ trình bày cách thiết kế cấu hình cho các node của bạn bằng cách sử dụng một số cấu trúc Chef. Ta sẽ xem xét các nguyên tắc cơ bản về công thức nấu ăn và sách nấu ăn của Đầu bếp như những cách để kiểm soát cơ sở hạ tầng của bạn bằng các cấu hình khai báo.


Tags:

Các tin liên quan

Cách cài đặt Nagios 4 và theo dõi server của bạn trên Ubuntu 14.04
2015-03-02
Cách cài đặt và cấu hình Sphinx trên Ubuntu 14.04
2015-02-18
Cách cài đặt MediaWiki trên Ubuntu 14.04
2015-02-06
Cách cài đặt phpBB trên Ubuntu 14.04
2015-02-04
Cách sử dụng puppet để quản lý chủ đề và plugin WordPress trên Ubuntu 14.04
2015-02-02
Giám sát LEMP với Monit trên Ubuntu 14.04
2015-01-26
Cách đồng bộ hóa lịch và danh bạ bằng chuẩn CardDAV và CalDAV với Baïkal trên Ubuntu 14.04
2015-01-23
Cách cài đặt Webmin với SSL trên Ubuntu 14.04
2015-01-19
Cách bắt đầu với Silex trên Ubuntu 14.04
2015-01-15
Cách triển khai ứng dụng DocPad trên Ubuntu 14.04
2015-01-14