Việc chuẩn bị một cụm Kubernetes có dễ dàng và thuận tiện không? Thông báo toán tử addon

Việc chuẩn bị một cụm Kubernetes có dễ dàng và thuận tiện không? Thông báo toán tử addon

Sau người điều hành shell chúng tôi giới thiệu anh trai của anh ấy - toán tử bổ sung. Đây là một dự án Nguồn mở được sử dụng để cài đặt các thành phần hệ thống vào cụm Kubernetes, có thể gọi là tiện ích bổ sung.

Tại sao lại có sự bổ sung nào cả?

Không có gì bí mật rằng Kubernetes không phải là một sản phẩm tất cả trong một được làm sẵn và để xây dựng một cụm “người lớn”, bạn sẽ cần nhiều bổ sung khác nhau. Toán tử bổ trợ sẽ giúp bạn cài đặt, định cấu hình và cập nhật các tiện ích bổ sung này.

Sự cần thiết của các thành phần bổ sung trong cụm được tiết lộ trong báo cáo Đồng nghiệp driusha. Nói tóm lại, tình hình với Kubernetes hiện tại là đối với một bản cài đặt “chơi xung quanh” đơn giản, bạn có thể sử dụng các thành phần có sẵn, đối với các nhà phát triển và thử nghiệm, bạn có thể thêm Ingress, nhưng đối với một bản cài đặt đầy đủ, về cái nào bạn có thể nói “quá trình sản xuất của bạn đã sẵn sàng”, bạn cần thêm hàng tá tiện ích bổ sung khác nhau: thứ gì đó để theo dõi, thứ gì đó để ghi nhật ký, đừng quên xâm nhập và trình quản lý chứng chỉ, chọn nhóm nút, thêm chính sách mạng, mùa với cài đặt tự động chia tỷ lệ sysctl và pod ...

Việc chuẩn bị một cụm Kubernetes có dễ dàng và thuận tiện không? Thông báo toán tử addon

Các chi tiết cụ thể khi làm việc với họ là gì?

Như thực tế cho thấy, vấn đề không chỉ giới hạn ở một lần cài đặt. Để hoạt động thoải mái với cụm, các tiện ích bổ sung sẽ cần phải được cập nhật, tắt (xóa khỏi cụm) và bạn sẽ muốn kiểm tra một số tiện ích bổ sung trước khi cài đặt chúng trong cụm sản xuất.

Vì vậy, có lẽ Ansible sẽ đủ ở đây? Có lẽ. Nhưng Nói chung, các tiện ích bổ sung đầy đủ sẽ không tồn tại nếu không có cài đặt. Các cài đặt này có thể khác nhau tùy thuộc vào biến thể cụm (aws, gce, azure, bare-metal, do, ...). Một số cài đặt không thể được chỉ định trước; chúng phải được lấy từ cụm. Và cụm không tĩnh: đối với một số cài đặt, bạn sẽ phải theo dõi các thay đổi. Và ở đây Ansible đã bị thiếu: bạn cần một chương trình nằm trong một cụm, tức là. Nhà điều hành Kubernetes.

Những người đã thử nó ở nơi làm việc người điều hành shell, họ sẽ nói rằng các tác vụ cài đặt và cập nhật tiện ích bổ sung cũng như cài đặt giám sát có thể được giải quyết hoàn toàn bằng cách sử dụng móc dành cho người vận hành shell. Bạn có thể viết một đoạn script thực hiện một điều kiện kubectl apply và giám sát, chẳng hạn như ConfigMap, nơi các cài đặt sẽ được lưu trữ. Đây là những gì được triển khai trong toán tử bổ trợ.

Điều này được tổ chức như thế nào trong toán tử addon?

Khi tạo ra một giải pháp mới, chúng tôi đã tiến hành theo các nguyên tắc sau:

  • Trình cài đặt tiện ích bổ sung phải hỗ trợ cấu hình khuôn mẫu và khai báo. Chúng tôi không tạo các tập lệnh ma thuật để cài đặt các tiện ích bổ sung. Addon-operator sử dụng Helm để cài đặt addons. Để cài đặt, bạn cần tạo biểu đồ và chọn các giá trị sẽ được sử dụng để cấu hình.
  • Cài đặt có thể được tạo khi cài đặt, bạn có thể lấy từ cụmHoặc nhận thông tin cập nhật, giám sát tài nguyên cụm. Những hoạt động này có thể được thực hiện bằng cách sử dụng hook.
  • Cài đặt có thể được lưu trữ trong một cụm. Để lưu trữ các cài đặt trong cụm, một ConfigMap/addon-operator được tạo và Addon-operator giám sát các thay đổi đối với ConfigMap này. Toán tử bổ trợ cung cấp cho hook quyền truy cập vào cài đặt bằng cách sử dụng các quy ước đơn giản.
  • Ngoài ra phụ thuộc vào cài đặt. Nếu cài đặt đã thay đổi thì toán tử Addon sẽ đưa ra biểu đồ Helm với các giá trị mới. Chúng tôi gọi sự kết hợp của biểu đồ Helm, các giá trị cho nó và nối một mô-đun (xem bên dưới để biết thêm chi tiết).
  • Dàn dựng. Không có kịch bản phát hành ma thuật. Cơ chế cập nhật tương tự như một ứng dụng thông thường - thu thập các tiện ích bổ sung và toán tử bổ sung vào một hình ảnh, gắn thẻ chúng và triển khai chúng.
  • Kiểm soát kết quả. Nhà điều hành addon có thể cung cấp số liệu cho Prometheus.

Phần đệm trong toán tử addon là gì?

Sự bổ sung có thể được coi là bất cứ điều gì bổ sung thêm các chức năng mới cho cụm. Ví dụ: cài đặt Ingress là một ví dụ tuyệt vời về tiện ích bổ sung. Đây có thể là bất kỳ toán tử hoặc bộ điều khiển nào có CRD riêng: prometheus-operator, cert-manager, kube-controller-manager, v.v. Hoặc một cái gì đó nhỏ nhưng dễ sử dụng hơn - ví dụ: máy sao chép bí mật, sao chép bí mật đăng ký vào không gian tên mới hoặc bộ điều chỉnh sysctl, định cấu hình các tham số sysctl trên các nút mới.

Để triển khai các tiện ích bổ sung, toán tử Addon cung cấp một số khái niệm:

  • Biểu đồ mũ lái được sử dụng để cài đặt nhiều phần mềm khác nhau vào cụm - ví dụ: Prometheus, Grafana, nginx-ingress. Nếu thành phần được yêu cầu có biểu đồ Helm thì việc cài đặt nó bằng toán tử Addon sẽ rất đơn giản.
  • Lưu trữ giá trị. Biểu đồ Helm thường có nhiều cài đặt khác nhau có thể thay đổi theo thời gian. Addon-operator hỗ trợ lưu trữ các cài đặt này và có thể theo dõi các thay đổi của chúng để cài đặt lại biểu đồ Helm với các giá trị mới.
  • móc là các tệp thực thi mà toán tử Addon chạy trên các sự kiện và truy cập vào kho lưu trữ giá trị. Hook có thể theo dõi những thay đổi trong cluster và cập nhật các giá trị trong kho giá trị. Những thứ kia. Sử dụng hook, bạn có thể thực hiện khám phá để thu thập các giá trị từ cụm khi khởi động hoặc theo lịch trình hoặc bạn có thể thực hiện khám phá liên tục, thu thập các giá trị từ cụm dựa trên những thay đổi trong cụm.
  • Mô-đun là sự kết hợp của biểu đồ Helm, kho giá trị và móc nối. Các mô-đun có thể được kích hoạt hoặc vô hiệu hóa. Tắt một mô-đun có nghĩa là xóa tất cả các bản phát hành biểu đồ Helm. Các mô-đun có thể tự kích hoạt một cách linh hoạt, ví dụ: nếu tất cả các mô-đun nó cần được bật hoặc nếu quá trình khám phá đã tìm thấy các tham số cần thiết trong hook - việc này được thực hiện bằng cách sử dụng tập lệnh kích hoạt phụ trợ.
  • Móc toàn cầu. Đây là những hook “tự thân”, chúng không được bao gồm trong các mô-đun và có quyền truy cập vào kho lưu trữ giá trị toàn cầu, các giá trị của chúng có sẵn cho tất cả các hook trong mô-đun.

Các bộ phận này phối hợp với nhau như thế nào? Chúng ta hãy nhìn vào hình ảnh từ tài liệu:

Việc chuẩn bị một cụm Kubernetes có dễ dàng và thuận tiện không? Thông báo toán tử addon

Có hai kịch bản công việc:

  1. Móc toàn cầu được kích hoạt bởi một sự kiện - ví dụ: khi tài nguyên trong cụm thay đổi. Hook này xử lý các thay đổi và ghi các giá trị mới vào kho giá trị chung. Người vận hành addon thông báo rằng bộ nhớ chung đã thay đổi và khởi động tất cả các mô-đun. Mỗi mô-đun, sử dụng các móc của nó, sẽ xác định xem nó có cần được bật hay không và cập nhật kho giá trị của nó. Nếu mô-đun được bật, toán tử Addon sẽ bắt đầu cài đặt biểu đồ Helm. Trong trường hợp này, biểu đồ Helm có quyền truy cập vào các giá trị từ bộ lưu trữ mô-đun và từ bộ lưu trữ chung.
  2. Kịch bản thứ hai đơn giản hơn: một module hook được kích hoạt bởi một sự kiện và thay đổi các giá trị trong kho giá trị của module. Người điều hành addon nhận thấy điều này và khởi chạy biểu đồ Helm với các giá trị được cập nhật.

Việc bổ sung có thể được thực hiện dưới dạng một móc nối đơn hoặc dưới dạng một biểu đồ Helm hoặc thậm chí như một số mô-đun phụ thuộc - điều này phụ thuộc vào độ phức tạp của thành phần được cài đặt trong cụm và mức độ linh hoạt cấu hình mong muốn. Ví dụ: trong kho lưu trữ (/ví dụ) có một tiện ích bổ sung sysctl-tuner, được triển khai dưới dạng mô-đun đơn giản với móc và biểu đồ Helm, đồng thời sử dụng kho giá trị, giúp bạn có thể thêm cài đặt bằng cách chỉnh sửa ConfigMap.

Cung cấp các bản cập nhật

Đôi lời về việc tổ chức các bản cập nhật thành phần mà Addon-operator cài đặt.

Để chạy toán tử Addon trong một cụm, bạn cần xây dựng một hình ảnh với các bổ sung ở dạng tệp biểu đồ hook và Helm, thêm tệp nhị phân addon-operator và mọi thứ bạn cần cho hook: bash, kubectl, jq, python vân vân. Sau đó, hình ảnh này có thể được triển khai thành cụm như một ứng dụng thông thường và rất có thể bạn sẽ muốn tổ chức một hoặc một sơ đồ gắn thẻ khác. Nếu có ít cụm, cách tiếp cận tương tự như với ứng dụng có thể phù hợp: bản phát hành mới, phiên bản mới, đi tới tất cả các cụm và sửa hình ảnh của Pod. Tuy nhiên, trong trường hợp triển khai cho một số lượng cụm đáng kể, khái niệm tự cập nhật từ một kênh sẽ phù hợp hơn với chúng tôi.

Đây là cách chúng tôi làm điều đó:

  • Về cơ bản, kênh là một mã định danh có thể được đặt thành bất kỳ giá trị nào (ví dụ: dev/stage/ea/stable).
  • Tên kênh là thẻ hình ảnh. Khi bạn cần tung ra các bản cập nhật cho một kênh, một hình ảnh mới sẽ được tập hợp và gắn thẻ với tên kênh.
  • Khi một hình ảnh mới xuất hiện trong sổ đăng ký, toán tử Addon sẽ được khởi động lại và khởi chạy cùng với hình ảnh mới.

Đây không phải là cách thực hành tốt nhất, như được viết trong Tài liệu Kubernetes. Không nên làm điều này, nhưng chúng ta đang nói về một ứng dụng thông thường nằm trong cùng một cụm. Trong trường hợp của Addon-operator, một ứng dụng có rất nhiều Triển khai nằm rải rác trên các cụm và việc tự cập nhật sẽ giúp ích rất nhiều và giúp cuộc sống dễ dàng hơn.

Kênh trợ giúp và trong thử nghiệm: nếu có cụm phụ thì có thể cấu hình theo kênh stage và đưa các bản cập nhật vào đó trước khi đưa nó ra các kênh ea и stable. Nếu với một cụm trên kênh ea đã xảy ra lỗi, bạn có thể chuyển nó sang stable, trong khi vấn đề với cụm này đang được điều tra. Nếu cụm được đưa ra khỏi hỗ trợ tích cực, nó sẽ chuyển sang kênh "đóng băng" - ví dụ: freeze-2019-03-20.

Ngoài việc cập nhật các móc và biểu đồ Helm, bạn có thể cần cập nhật và thành phần của bên thứ ba. Ví dụ: bạn nhận thấy một lỗi trong trình xuất nút có điều kiện và thậm chí đã tìm ra cách vá lỗi đó. Tiếp theo, bạn mở PR và chờ bản mới đi qua tất cả các cụm và tăng phiên bản của hình ảnh. Để không phải chờ đợi vô thời hạn, bạn có thể xây dựng trình xuất nút của mình và chuyển sang nó trước khi chấp nhận PR.

Nói chung, điều này có thể được thực hiện mà không cần Addon-operator, nhưng với Addon-operator, mô-đun cài đặt node-exporter sẽ hiển thị trong một kho lưu trữ, Dockerfile để xây dựng hình ảnh của bạn có thể được giữ ngay tại đó, điều này trở nên dễ dàng hơn cho tất cả những người tham gia quá trình để hiểu điều gì sẽ xảy ra... Và nếu có một số cụm, thì việc kiểm tra PR của bạn và tung ra phiên bản mới sẽ trở nên dễ dàng hơn!

Việc tổ chức cập nhật thành phần này hoạt động thành công đối với chúng tôi, nhưng bất kỳ kế hoạch phù hợp nào khác đều có thể được triển khai - xét cho cùng trong trường hợp này Addon-operator là một tệp nhị phân đơn giản.

Kết luận

Các nguyên tắc được triển khai trong Addon-operator cho phép bạn xây dựng một quy trình minh bạch để tạo, thử nghiệm, cài đặt và cập nhật các tiện ích bổ sung trong một cụm, tương tự như quy trình phát triển của các ứng dụng thông thường.

Các tiện ích bổ sung dành cho toán tử Addon ở định dạng mô-đun (Biểu đồ Helm + móc) có thể được cung cấp công khai. Chúng tôi, công ty Flant, có kế hoạch công bố những phát triển của mình dưới dạng những bổ sung như vậy trong mùa hè. Tham gia phát triển trên GitHub (người điều hành shell, toán tử bổ sung), hãy thử thực hiện phép cộng của riêng bạn dựa trên ví dụ и tài liệu, chờ tin tức về Habré và của chúng tôi Kênh Youtube!

PS

Đọc thêm trên blog của chúng tôi:

Nguồn: www.habr.com

Thêm một lời nhận xét