Ấm dần lên. Một vài ngày sau thanh trượt thời gian, tôi đã giới thiệu Vagrant, một giải pháp ảo hóa có mục tiêu lớn bằng cách trở thành một trình bao bọc gọn gàng, đẹp mắt cho các phần mềm khác, được cho là phức tạp hơn như VirtualBox, KVM và các phần mềm khác. Hơn nữa, nó chơi trong giải đấu cấp cao bằng cách cung cấp hỗ trợ bộ chứa Docker và môi trường máy chủ đám mây.
Mở rộng mô hình này, chúng ta sẽ thảo luận về một usecase hơi khác, rất nhiều mây. CoreOS, mà chúng ta đã sử dụng trong bài tập trước, là một người chơi khác cố gắng kiếm tiền từ cơn sốt đám mây và nó cung cấp một số tính năng và tự động hóa cụm rất gọn gàng. Hôm nay, chúng ta sẽ tìm hiểu cách tạo một cụm và thảo luận về phần mạng, phần này hơi bị bỏ quên và không được giải thích rõ ràng ngay cả trong tài liệu gốc. Vì vậy, hãy làm theo tôi.
Thiết lập mã thông báo khám phá
Không giống như lần trước, khi tôi cố tình thử Vagrant trên Windows thông qua Powershell, chỉ để đưa ra một ví dụ mẫu rằng nó có thể được thực hiện theo nhiều cách khác nhau, bài tập hiện tại của chúng tôi sẽ diễn ra trong Linux, chính xác hơn là Xubfox Vivid.
Theo hướng dẫn chính thức, thiết lập CoreOS cho Vagrant không khó lắm, nhưng nó cũng không tầm thường như tài liệu tham khảo trực tuyến bạn sẽ có. Có sự thiếu kiên nhẫn rõ ràng để bắt đầu, và nó đã thành công.
Sau khi bạn đã sao chép kho lưu trữ, bạn sẽ có một số tệp theo ý của mình, bạn sẽ cần chỉnh sửa một chút tệp này để có thể khởi tạo và khởi động Vagrant. Việc đầu tiên bạn cần làm là chỉnh sửa tệp user-data.sample và đổi tên thành user-data. Đáng chú ý nhất là mảnh mã thông báo:
#cloud-config
cốt lõi:
v.v.:
# tạo mã thông báo mới cho mỗi cụm duy nhất từ
https://Discovery.etcd.io/new?size=3
# chỉ định kích thước ban đầu của cụm của bạn với ?size=X
# CẢNH BÁO:thay thế mỗi khi bạn 'tiêu diệt lang thang'
khám phá:https://Discovery.etcd.io/
Về cơ bản, CoreOS sử dụng các mã định danh duy nhất - được gọi là mã thông báo - để giúp các phiên bản đang chạy xác định lẫn nhau. Tất cả các máy chủ có cùng mã thông báo thuộc về cùng một nhóm, vì vậy chúng có thể được kiểm soát theo cách tập trung bằng cách sử dụng dịch vụ khám phá và cấu hình chia sẻ etcd.
https://Discovery.etcd.io/new?size=
Bạn có thể sử dụng của riêng mình hoặc tạo một cái mới bằng cách truy cập URL ở trên và chỉ định kích thước cụm mong muốn. Cấu hình mặc định là ba máy chủ. Ghi lại mã thông báo đã tạo và thêm nó vào tệp cấu hình, ví dụ:
https://Discovery.etcd.io/21e4099c23b52a8403640c2d48cdca6f
Chúng ta sẽ thấy tại sao điều này lại quan trọng sau này.
Thiết lập cụm
Phần thứ hai là xác định số lượng phiên bản CoreOS mà chúng tôi muốn chạy khi Vagrant khởi động. Đây là một cấu hình đơn giản tổng thể. Thay đổi cần được thêm vào tệp config.rb.sample, bên trong thư mục Git được sao chép và đổi tên thành config.rb. Chúng tôi sẽ thử với bốn trường hợp, chỉ để trở nên độc đáo và đặc biệt.
# Kích thước của cụm CoreOS được tạo bởi Vagrant
$num_instances=X
Cụm bắt đầu
Bây giờ, bạn có thể chạy Vagrant. Nếu bạn đã sao chép kho lưu trữ trực tuyến, thì bạn đã có tệp cấu hình Vagrant mặc định trong thư mục hiện tại, vì vậy nếu bạn thử init vagrant, bạn sẽ thất bại:
ban đầu lang thang
`Vagrantfile` đã tồn tại trong thư mục này. Loại bỏ nó trước
đang chạy `vagrant init`.
Nếu bạn chưa cài đặt VirtualBox hoặc phần mềm ảo hóa có liên quan khác, bạn sẽ gặp một lỗi khác khi cố gắng khởi động chương trình. Hãy chắc chắn rằng bạn giải quyết những khúc mắc nhỏ này trước.
lang thang lên
Nhà cung cấp 'hộp ảo' đã được yêu cầu sao lưu máy
'core-01' đang báo cáo rằng nó không thể sử dụng được trên hệ thống này. Các
lý do được hiển thị dưới đây:
Vagrant không thể phát hiện VirtualBox! Đảm bảo VirtualBox được cài đặt đúng cách. Vagrant sử dụng tệp nhị phân `VBoxManage` đi kèm với VirtualBox và yêu cầu tệp này phải khả dụng trên PATH. Nếu VirtualBox đã được cài đặt, vui lòng tìm tệp nhị phân `VBoxManage` và thêm nó vào biến môi trường PATH.
Nếu bạn đã thực hiện thành công phần này, Vagrant sẽ bắt đầu và tạo từng phiên bản CoreOS. Quá trình này có thể mất một lúc và bạn sẽ cần băng thông mạng tốt và nhiều bộ nhớ để chứa các cụm lớn hơn.
lang thang lên
Đưa máy 'core-01' lên với nhà cung cấp 'hộp ảo'...
Đưa máy 'core-02' lên với nhà cung cấp 'hộp ảo'...
Đưa máy 'core-03' lên với nhà cung cấp 'hộp ảo'...
Đưa máy 'core-04' lên với nhà cung cấp 'hộp ảo'...
==> core-01:Không thể tìm thấy hộp 'coreos-alpha'. Đang cố gắng tìm và cài đặt...
core-01:Nhà cung cấp hộp:hộp ảo
core-01:Phiên bản hộp:>=308.0.1
==> core-04:Đang nhập hộp cơ sở 'coreos-alpha'...
==> core-04:Khớp địa chỉ MAC cho mạng NAT...
==> core-04:Kiểm tra xem hộp 'coreos-alpha' có được cập nhật không...
==> core-04:Đặt tên VM:coreos-vagrant_core-04_1431799934824_55775
==> core-04:Đã sửa lỗi xung đột cổng cho 22 => 2222. Bây giờ trên cổng 2202.
==> core-04:Xóa mọi giao diện mạng đã đặt trước đó...
==> core-04:Chuẩn bị giao diện mạng dựa trên cấu hình...
lõi-04:Bộ điều hợp 1:tự nhiên
core-04:Bộ điều hợp 2:chủ nhà
==> core-04:Chuyển tiếp cổng...
core-04:22 => 2202 (bộ chuyển đổi 1)
==> core-04:Chạy các tùy chỉnh VM 'khởi động trước'...
==> core-04:Đang khởi động VM...
==> core-04:Chờ máy khởi động. Có thể sẽ mất vài phút...
lõi-04:Địa chỉ SSH:127.0.0.1:2202
lõi-04:Tên người dùng SSH:lõi
core-04:Phương thức xác thực SSH:khóa riêng
core-04:Cảnh báo:Hết thời gian kết nối. Đang thử lại...
==> core-04:Máy đã khởi động và sẵn sàng!
==> core-04:Đặt tên máy chủ...
==> core-04:Cấu hình và kích hoạt giao diện mạng...
==> core-04:Đang chạy cung cấp:file...
==> core-04:Chạy cung cấp:shell...
core-04:Đang chạy:tập lệnh nội tuyến
Khi tất cả các hệ thống đã được tạo, bạn có thể chạy trạng thái lang thang để nhận tất cả thông tin bạn cần trên các máy hiện có và trạng thái hiện tại của chúng.
Kết nối mạng
Bây giờ đến phần thực sự thú vị. Chúng tôi có bốn máy ảo. Nhưng làm thế nào để chúng ta kết nối với họ? Chúng tôi đã gặp tình huống khó xử tương tự khi thử nghiệm Docker, nhưng sau đó chúng tôi đã tìm ra cách của mình và ở đây, logic tương tự cũng được áp dụng.
Đầu tiên, có thể kết nối với từng máy đang chạy bằng lệnh vagrant ssh, lệnh này sẽ xử lý tất cả các phím và những thứ khác. Bạn phải thực hiện điều này từ thư mục nhân bản, nếu không bạn sẽ gặp lỗi:
ssh core-02 lang thang -- -A
Cần có môi trường Vagrant hoặc máy đích để chạy cái này
yêu cầu. Chạy `vagrant init` để tạo môi trường Vagrant mới. Hoặc, lấy ID của máy mục tiêu từ `vagrant global-status` để chạy lệnh này. Tùy chọn cuối cùng là thay đổi thư mục có Vagrantfile và thử lại.
Nhưng sau đó, trong đúng thư mục, nó sẽ hoạt động tốt:
Nếu bạn chạy ifconfig, bạn sẽ nhận thấy rằng tất cả các máy của bạn được cho là có cùng một địa chỉ IP và bạn không thể định tuyến giữa chúng. Hơn nữa, giao diện VirtualBox chạy trên phân khúc 172.0.0.1, vì vậy điều này khiến mọi thứ trở nên khó khăn hơn một chút. Một lần nữa, tương tự như những gì chúng tôi đã có với Docker.
Bạn luôn có thể sử dụng phạm vi kết nối mạng nội bộ của VirtualBox và điều chỉnh các quy tắc và định tuyến tường lửa cho phù hợp. Tuy nhiên, phương pháp này không thực sự cho bạn biết máy ảo nào của bạn sử dụng địa chỉ IP cụ thể nào và không dễ dàng xác định được ngay lập tức. Nói cách khác, bạn không thể phân tích cú pháp những con số này ngay lập tức và có một số cách tinh tế hơn để có được thông tin phù hợp.
Kết nối qua máy chủ cục bộ
Nếu bạn còn nhớ, trong quá trình khởi động, Vagrant đã thiết lập SSH cho mỗi máy ảo chạy trên localhost, sử dụng các cổng khác nhau, bắt đầu bằng 2200 (hoặc tương tự). Vì vậy, bạn cần SSH vào máy khách của mình, bạn có thể sử dụng tùy chọn này:
ssh 127.0.0.1 -p 2202
Không thể thiết lập tính xác thực của máy chủ '[127.0.0.1]:2202 ([127.0.0.1]:2202)'.
Dấu vân tay của khóa ED25519 là 32:a0:57:58:b3:55:fc:03:c8:89:7d:7c:cc:6f:85:9d.
Bạn có chắc chắn muốn tiếp tục kết nối (có/không)?
Kết nối qua địa chỉ IP ở mọi nơi
Tuy nhiên, phương pháp trên không hoạt động đối với giao tiếp VM với VM và chúng tôi cần một thứ khác. Đây là nơi mà phần khám phá thực sự hữu ích. Khi cụm của bạn đang chạy, bạn có thể điều hướng lại đến URL đó và bây giờ nó sẽ được điền bằng một số nội dung JSON xấu xí nhưng hữu ích:
Lưu ý các khóa và giá trị. Mỗi mục có địa chỉ IP của nó, ví dụ:172.17.8.103 và bạn có thể phân tích cú pháp từ đầu ra này. Xuất sắc. Bây giờ chúng tôi biết các địa chỉ nội bộ và chúng tôi có thể sử dụng chúng để kết nối trực tiếp với khách hàng của mình và quan trọng hơn là cho phép họ giao tiếp với các đồng nghiệp của mình.
Một phần nhỏ còn thiếu là chúng tôi không biết mật khẩu người dùng cốt lõi, vì vậy chúng tôi sẽ sử dụng khóa được cung cấp, nằm bên trong thư mục con vagrant.d. Thêm khóa và sau đó bạn có thể kết nối liền mạch. Chúng tôi đã thấy điều này trong hướng dẫn đầu tiên của chúng tôi.
Chuyển tiếp cổng
Chúng tôi chưa thực sự nghiên cứu nhiều về phần cấu hình cho các hộp của mình, nhưng tại thời điểm này, khi đã biết địa chỉ IP của các phiên bản đang chạy, chúng tôi có thể bắt đầu thực sự sáng tạo. Chẳng hạn, chuyển tiếp cổng, có giá trị lớn đối với các máy ảo chạy dịch vụ.
Những thay đổi cần thiết cần được cung cấp dưới dạng chỉ thị bên trong Vagrantfile. Bạn có thể có nhiều cấu hình cho nhiều thiết lập - giống như Dockerfiles. Ví dụ:chuyển tiếp cổng HTTPS sẽ là:
config.vm.forward_port 443,
Nếu bạn đã theo dõi các bài viết về Docker của tôi thì mọi thứ rất dễ dàng. Cổng máy chủ, cổng máy khách và Bob là chú của bạn. Bạn có nhiều khai báo cho mỗi hộp. Sau đó, bạn cũng có thể định cấu hình các quy tắc tường lửa theo cách thủ công, nếu bạn cần kiểm soát hoàn toàn và hoàn toàn hệ thống của mình. Một lần nữa, đây chỉ là một lời trêu ghẹo và chúng tôi sẽ dành nhiều thời gian hơn để giải quyết vấn đề này trong tương lai.
Tất nhiên, bây giờ, bước tiếp theo là cắm Docker vào và với phạm vi mặc định tương tự, có thể không phải ngẫu nhiên, bạn có thể bắt đầu chơi với các cụm, vùng chứa, thực thi song song và các khái niệm ưa thích khác. Đây là lý do tại sao Vagrant đi kèm với các plugin mà chúng ta sẽ thảo luận trong một bài viết riêng. Dù sao đi nữa, khi bạn đã hoàn thành công việc của mình, chỉ cần hủy các phiên bản.
Đọc thêm
Một số thứ hay ho khác từ lò rèn của Dedoimedo:
Đây là hướng dẫn khởi động nhanh CoreOS; có thể hơi nặng nề
Hướng dẫn giám sát, cung cấp các khả năng hơi giống với etcd
Tinh chỉnh cấu hình song song của KVM &VirtualBox
Kết luận
Vagrant, cũng như CoreOS, có vẻ như là những ý tưởng thú vị, hoang dã và nổi loạn. Tôi vẫn chưa tin chắc chúng có bao nhiêu giá trị trong môi trường kinh doanh, mặc dù các công nghệ bao bọc che giấu những chi tiết đẫm máu của công việc thực tế dường như đang phát triển và trở nên phổ biến hơn mọi lúc. Mọi người đều muốn có các công cụ điều phối và giao diện người dùng, vấn đề duy nhất là thị trường quá hay thay đổi, không ổn định, không có tiêu chuẩn và mọi người sử dụng những thứ xấu xí như Python, Ruby và JSON. Nhưng thôi kệ.
Chúng tôi đã chinh phục được một phần nhỏ khác của ẩn danh khủng bố và bạn đã phần nào quen thuộc hơn với cả Vagrant và CoreOS. Điều đó thật tốt, bởi vì phần tiếp theo của chúng ta sẽ bắt đầu chơi với một số dịch vụ cụm này và không có gì khác. Và đó mới chỉ là khởi đầu.
Hãy nhớ rằng tôi phải làm tất cả, vì vậy trong những tháng tới, chúng ta sẽ khám phá khá nhiều thứ, bao gồm nhưng không giới hạn ở Fleet, Kubernets, Mesos, Etch và nhiều dự án thú vị khác. Chúng tôi cũng sẽ liên kết CoreOS và những người khác với các nhà cung cấp đám mây, sử dụng các hệ thống tệp song song và phân tán, các công cụ tự động hóa như Jenkins, Ansible, vẫn còn nhiều tên gọi và buzz khiến bạn muốn nôn, và sau đó là một số. Giữ nguyên.
Chúc mừng.