Pine, Alpine linux dựa trên OSTree
Chọn cái gì Hệ điều hành chạy trên máy chủ của bạn là một vấn đề thuận tiện và quen thuộc. Sự tiện lợi có nghĩa là bạn muốn thứ gì đó mang lại cho bạn ít rắc rối nhất có thể, sự quen thuộc có nghĩa là bạn sẽ thích hơn không phải để tìm hiểu những điều bổ sung nếu bạn không cần thiết.
Máy chủ của tôi là vật nuôivì vậy tôi có thể phát hành thủ công một vài lệnh thỉnh thoảng và không yêu cầu tự động hóa hoàn toàn.
Sau khi thử CoreOS trong một năm, tôi chuyển sang đơn giản hóa của riêng tôi bản phân phối dựa trên núi cao và ostree.
Phiên bản núi cao này lấy tín hiệu từ flatcar và dự án-nguyên tử và được cho là được cài đặt dưới dạng hệ thống tệp gốc chỉ đọc với các bản cập nhật xảy ra nguyên tử, nghĩa là chúng thành công hoặc hệ thống hoán đổi trở lại trạng thái trước đó. Để có thể thực hiện được điều này, hệ thống phải luôn có ít nhất hai bức ảnh chụp nhanh của phiên bản hệ thống tệp đã phát hành, có sẵn trên bộ nhớ.
Hệ thống sẽ chạy trong những môi trường nào? Tôi đã nhắm mục tiêu OVZ và [KVM], nhưng nói chung, bạn có thể nói hộp đựng và máy ảo với sự khác biệt chính là các vùng chứa không chạy hạt nhân của riêng chúng, đặc biệt là chúng không có quá trình khởi động, chúng gọi trực tiếp vào trong đó hệ thống (ví dụ như trong mộtDockerfile
nó sẽ được định nghĩa bởiCMD
hoặcENTRYPOINT
các câu lệnh), chịu trách nhiệm quản lý cây các prcesses sẽ giữ cho vùng chứa hoạt động (giống như một phiên làm việc bình thường, nếu quá trình init chết, vùng chứa sẽ kết thúc). Ngoài ra, vùng chứa không thể định cấu hình các nút hệ thống và có thể có các hạn chế bổ sung về khả năng.
Hình ảnh được xây dựng như thế nào?
Cácprepare.sh
script xử lý các phần phụ thuộc, hầu hết trong số đó là các gói để cung cấp các công cụ cli phổ biến nhưcoreutils
, util-linux
, binutils
, các tiện ích để hoạt động với các thiết bị khối nhưblkid
, sfdisk
, multipath-tools
và hệ thống tệp vớixfsprogs
vàe2fsprogs
. Cácsquashfs-tools
gói được sử dụng ở cuối để nén hệ thống tệp gốc đã xây dựng. MỘTglib
gói tương thích cũng được cài đặt theo mặc định vì núi cao dựa trênmusl
, gói tương thích hoạt động bằng cách cung cấp một số thư viện được xây dựng dựa trên.
Cây tệp cho cả máy ảo và vùng chứa được xây dựng tương ứng vớimake.sh
vàmake_ovz.sh
. Đây là mô tả đơn giản về các bước
thiết lập phiên bản được xây dựng theo thẻ kho lưu trữ
tạo một thư mục cho cây mới và xóa môi trường
tạo các thư mục đích cơ sở và các thư mục theo yêu cầu của ostree, nhưsysroot
tạo các liên kết tượng trưng để phù hợp với tiêu chuẩn phân cấp hệ thống tập tin
sao chép các dịch vụ tùy chỉnh và cấu hình tùy chỉnh
thiết lập chroot với các thư mục hệ thống được gắn kết
bootstrap một rootfs núi cao với các gói cơ sở
áp dụng cấu hình tối thiểu cho các rootfs như thông tin xác thực, múi giờ, tên máy chủ.
sao chép các dịch vụ sẽ được khởi động bởi init
thiết lập cấu hình khởi động với hình ảnh hạt nhân được chỉ định
tùy chọn thêm các mô-đun hạt nhân tùy chỉnh
thực hiện dọn dẹp
cam kết rootfs[1] vào kho lưu trữ ostree
Đối với vùng chứa, trình tự giống nhau, nhưng cấu hình thay đổi, bởi vì hệ thống không được khởi động từ bộ nạp khởi động ostree gặp khó khăn khi xác minh môi trường, chúng tôi phải áp dụng một số cách giải quyết và thiết lập một số thiết bị thường được xử lý bởi initramfs bươc chân. Đây là cách OVZ hoặc LXC các mẫu được định cấu hình.
Sau khi chúng tôi có cây tệp cam kết ostree của chúng tôibuild.sh
hoặcbuild-update.sh
chăm sóc sản xuất hiện vật sẽ được phân phối. Sự khác biệt giữa các tập lệnh là phiên bản cập nhật bắt đầu từ kho lưu trữ ostree trước đó và cũng tạo ra một tạo tác delta mà một hệ thống đang chạy có thể áp dụng trên phiên bản ostree của nó để thực hiện nâng cấp. Đây là mô tả đơn giản về các bước xây dựng
nếu xây dựng mới
tạo phân vùng mới trên một hình ảnh mới được gắn kết dưới dạng thiết bị lặp
khác
mount phân vùng sysroot và boot của bản dựng trước
dọn dẹp các triển khai ostree trước đó (trang trại liên kết) trên bản dựng được gắn kết
cam kết cây được xây dựng mới trên bản dựng được gắn kết
xác minh tính toàn vẹn và tổng kiểm tra
tạo delta mới để nâng cấp
thực hiện triển khai ostree để tạo lại cấu hình khởi động
xóa các cam kết cũ
xác minh tính toàn vẹn của phân vùng khởi động
ngắt kết nối hình ảnh xây dựng cập nhật mới
tạo tổng kiểm tra hình ảnh và nén nó (vớisquashfs
cho các thùng chứa)
Cấu hình phân vùng được áp dụng với fdisklayout.cfg
tệp xác định kích thước phân vùng, chúng tôi có một phân vùng cho rootfs (~430M
), phân vùng khởi động (~40M
) và một phân vùng hoán đổi (~40M
). Với các vùng chứa chỉ cần bỏ qua việc gắn bản dựng trước đó qua thiết bị vòng lặp và chỉ cần kéo cam kết ostree mới qua kho lưu trữ ostree cũ (đã giải nén).
Tôi đang gói những gì trong hình ảnh này (ngoài các gói đã cài đặt)?
Một lib nhỏ trongfunctions.sh
cho các tác vụ phổ biến được thực thi trong shell
tập lệnh nâng cấp dựa trên ostree với cơ chế khóa dựa trên KV store
các tập lệnh giám sát cho IO cả cục bộ (iomon
) và mạng (tcpmon
)
thiết lập tập lệnh cho thời gian chạy vùng chứa khác vớibubblewrap
: podman
, toolbox
Những gì đã từng là và không còn nữa
sup
: Sup đã được sử dụng để điều phối (triển khai vùng chứa) và cấu hình máy chủ, nhưng sau đó tôi chuyển sang có thể ăn được bởi vì có những lỗi tồn tại lâu dài trong sup mà thiếu bản sửa lỗi, tôi đã không chọn ansible ngay từ đầu vì tôi không muốn cài đặt phụ thuộc vào python trên mọi máy chủ, cuối cùng tôi đã giải quyết bằng một núi cao thứ cấp chroot trên các máy chủ, đặt tại/opt/alp
Tôi đã cài đặt phần mềm bổ sung ít quan trọng hơn. Tuy nhiên, hôm nay, tôi sẽ lại chuyển từ không thể trả lời sang pyinfra , tại vì
nó là python không có boilerplate (ansible có giảDSL
điều đó gây ra nhiều cơn đau đầu hơn những thứ mà nó giải quyết được)
nó thực thi các công thức của nó bằng các lệnh ssh thuần túy, vì vậy không có yêu cầu phụ thuộc vào python trên máy chủ đích
containerpilot
: Trường hợp sử dụng cho thử nghiệm vùng chứa là quản lý các phụ thuộc phức tạp giữa các vùng chứa mà không có tập lệnh shell ... nó đã ngừng nhận các bản cập nhật từ hân hoan và được đặt ở chế độ bảo trì, tôi cũng không thích các yêu cầu về bộ nhớ và việc sử dụng bộ nhớ sẽ liên tục tăng trong thời gian hoạt động dài. Tôi đã chuyển nó cho các tập lệnh shell đơn giản với lãnh sự , Tôi có thể xem xét các lựa chọn thay thế thích hợp hơn nếu các tập lệnh shell bắt đầu phát triển quá nhiều. Các giải pháp nặng hơn như kubernetes, họp lại hoặc người du mục đã bị loại bỏ khi bắt đầu.
beegfs
: Tôi đã sử dụng để gửi mô-đun hạt nhân cần thiết cho beegfs nhưng sau một thời gian, nó đã phá vỡ khả năng tương thích và thực tế là không có cầu chì mô-đun được thực hiện hoàn toàn thả nó đi, tôi hiện không chạy [DFS] trên các máy chủ của mình, nhưng khả năng có một hệ thống tệp sẵn sàng chuyển sang để cắm vào mạng vẫn còn hấp dẫn.
Để cài đặt hình ảnh, bạn có thể tải nó lên nhà cung cấp dịch vụ lưu trữ và cài đặt từ VNC, trong trường hợp máy ảo, nhưng tôi thường chiếm quyền cài đặt hiện có, vì nó luôn có thể, cũng như tôi đã thử nghiệm tập lệnh thiết lập so với phiên bản của bản phân phối linux, nói chung tôi sử dụng debian-8 hoặc ubuntu-14, chưa thử nghiệm những cái khác vì những cái này tôi luôn thấy có sẵn. Các bước thiết lập sau
đảm bảo hỗ trợ https cho các bản tải xuống
tải xuống phiên bản busybox
cài đặt một trang trại liên kết busybox
xác định địa chỉ ipv4 / ipv6 cho cấu hình mạng
đảm bảo khả năng chroot
tải hình ảnh cây thông và giải nén nó
nếu máy ảo
flash qua thiết bị mục tiêu
gắn trên một thiết bị vòng lặp
viết cấu hình mạng cục bộ qua được chiếu sáng rootfs
nếu container
sao chép dịch vụ init (cho vùng chứa) qua điểm gắn kết gốc chính/sbin/init
nếu máy ảo
phân vùng còn lại trên đĩa với tiêu chuẩn (xfs
) phân vùng
tháo ra
xác minh tính toàn vẹn của phân vùng
khởi động lại
tôi đã làm cây thông 5 years from time of writing and I am still using it, and I see no reasons to switch to anything else. Alpine as a linux distro is great, simple, and I have never experienced breakage. I can easily deploy on NATed máy chủ có xu hướng cung cấp tài nguyên cực thấp, thực sự tôi có một hộp đang chạy chỉ với64M
RAM và vẫn có tất cả các tính năng tôi cần.
[1] | hệ thống tệp gốc |