Giới thiệu Kubernetes CCM (Trình quản lý bộ điều khiển đám mây) cho Yandex.Cloud

Giới thiệu Kubernetes CCM (Trình quản lý bộ điều khiển đám mây) cho Yandex.Cloud

Tiếp nối sự việc gần đây Phát hành trình điều khiển CSI đối với Yandex.Cloud, chúng tôi đang xuất bản một dự án Nguồn mở khác cho đám mây này - Trình quản lý bộ điều khiển đám mây. CCM không chỉ cần thiết cho toàn bộ cụm mà còn cho chính trình điều khiển CSI. Thông tin chi tiết về mục đích của nó và một số tính năng triển khai đang được cắt giảm.

Giới thiệu

Tại sao thế này?

Động cơ thôi thúc chúng tôi phát triển CCM cho Yandex.Cloud hoàn toàn trùng khớp với những động cơ đã được mô tả trong thông báo Trình điều khiển CSI. Chúng tôi duy trì nhiều cụm Kubernetes từ các nhà cung cấp đám mây khác nhau và chúng tôi sử dụng một công cụ duy nhất. Nó triển khai nhiều tiện ích “bỏ qua” các giải pháp được quản lý của các nhà cung cấp này. Có, chúng tôi có một trường hợp và nhu cầu khá cụ thể, nhưng những phát triển được tạo ra nhờ chúng có thể hữu ích cho những người dùng khác.

CCM chính xác là gì?

Thông thường, chúng ta chuẩn bị môi trường xung quanh cho cụm từ bên ngoài - ví dụ: sử dụng Terraform. Nhưng đôi khi cũng có nhu cầu quản lý môi trường cloud xung quanh chúng ta từ cụm. Khả năng này được cung cấp và nó được thực hiện CCM.

Cụ thể, Trình quản lý bộ điều khiển đám mây cung cấp năm loại tương tác chính:

  1. trường – thực hiện mối quan hệ 1:1 giữa một đối tượng nút trong Kubernetes (Node) và một máy ảo trong nhà cung cấp đám mây. Đối với điều này, chúng tôi:
    • điền vào trường spec.providerID trong đối tượng Node. Ví dụ: đối với OpenStack CCM, trường này có định dạng sau: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Bạn có thể xem tên nhà cung cấp đám mây và UUID duy nhất của máy chủ (máy ảo trong OpenStack) của đối tượng;
    • bổ sung nodeInfo trong đối tượng Node thông tin về máy ảo. Ví dụ: chúng tôi chỉ định loại phiên bản trong AWS;
    • Chúng tôi kiểm tra sự hiện diện của máy ảo trên đám mây. Ví dụ, nếu một đối tượng Node đã đi vào một trạng thái NotReady, bạn có thể kiểm tra xem máy ảo có tồn tại trong nhà cung cấp đám mây hay không bằng cách providerID. Nếu nó không có ở đó, hãy xóa đối tượng Node, nếu không thì sẽ tồn tại trong cụm mãi mãi;
  2. Khu – đặt miền lỗi cho đối tượng Node, để người lập lịch trình có thể chọn một nút cho Pod theo các vùng và vùng trong nhà cung cấp đám mây;
  3. Cân bằng tải – khi tạo một đối tượng Service với loại LoadBalancer tạo ra một loại bộ cân bằng sẽ hướng lưu lượng truy cập từ bên ngoài đến các nút cụm. Ví dụ: trong Yandex.Cloud bạn có thể sử dụng NetworkLoadBalancer и TargetGroup cho những mục đích này;
  4. Route – xây dựng một mạng lưới giữa các nút, bởi vì Theo yêu cầu của Kubernetes, mỗi nhóm phải có địa chỉ IP riêng và có thể liên lạc với bất kỳ nhóm nào khác. Với những mục đích này, bạn có thể sử dụng mạng lớp phủ (VXLAN, GENEVE) hoặc đặt bảng định tuyến trực tiếp trong mạng ảo của nhà cung cấp đám mây:

    Giới thiệu Kubernetes CCM (Trình quản lý bộ điều khiển đám mây) cho Yandex.Cloud

  5. Khối lượng – Cho phép đặt hàng năng động PV sử dụng PVC và SC. Ban đầu, chức năng này là một phần của CCM, nhưng do tính phức tạp lớn của nó nên nó đã được chuyển sang một dự án riêng, Giao diện lưu trữ container (CSI). Chúng ta đã nói về CSI nhiều lần писали và, như đã đề cập, thậm chí phát hành Trình điều khiển CSI.

Trước đây, tất cả mã tương tác với đám mây đều nằm trong kho Git chính của dự án Kubernetes tại k8s.io/kubernetes/pkg/cloudprovider/providers, nhưng họ quyết định từ bỏ điều này do sự bất tiện khi làm việc với cơ sở mã lớn. Tất cả các triển khai cũ đã được chuyển sang kho lưu trữ riêng biệt. Để thuận tiện cho việc hỗ trợ và phát triển hơn nữa, tất cả các thành phần chung cũng được chuyển sang kho lưu trữ riêng biệt.

Giống như CSI, nhiều nhà cung cấp đám mây lớn đã thiết kế CCM của họ để tận dụng các đám mây trên Kubernetes. Nếu nhà cung cấp không có CCM nhưng tất cả các chức năng cần thiết đều có sẵn thông qua API thì bạn có thể tự triển khai CCM.

Để viết phần triển khai CCM của riêng bạn, chỉ cần triển khai là đủ giao diện Go bắt buộc.

И đây là những gì chúng tôi có.

Thực hiện

Làm thế nào bạn đến được với điều này

Chúng tôi bắt đầu phát triển (hay đúng hơn là sử dụng) với sẵn sàng(!) CCM cho Yandex.Cloud một năm trước.

Tuy nhiên, trong quá trình triển khai này, chúng tôi đã thiếu:

  • xác thực thông qua mã thông báo JWT IAM;
  • Hỗ trợ bộ điều khiển dịch vụ.

Đồng tình với tác giả (dlisin) trong Telegram, chúng tôi đã phân nhánh yandex-cloud-controller-manager và thêm các chức năng còn thiếu.

Các tính năng chính

Hiện tại, CCM hỗ trợ các giao diện sau:

  • trường;
  • Khu;
  • Cân bằng tải.

Trong tương lai, khi Yandex.Cloud bắt đầu hoạt động với các khả năng VPC nâng cao, chúng tôi sẽ thêm giao diện tuyến đường.

LoadBalanacer là thách thức chính

Ban đầu, giống như các triển khai CCM khác, chúng tôi đã cố gắng tạo một cặp LoadBalancer и TargetGroup cho tất cả mọi người Service với loại LoadBalancer. Tuy nhiên, Yandex.Cloud đã phát hiện ra một hạn chế thú vị: bạn không thể sử dụng TargetGroups với sự giao nhau Targets (đôi SubnetID - IpAddress).

Giới thiệu Kubernetes CCM (Trình quản lý bộ điều khiển đám mây) cho Yandex.Cloud

Do đó, bên trong CCM đã tạo, một bộ điều khiển sẽ được khởi chạy, khi các đối tượng thay đổi Node thu thập thông tin về tất cả các giao diện trên mỗi máy ảo, nhóm chúng theo sở thích nhất định NetworkID, tạo bởi TargetGroup trên NetworkIDvà cũng giám sát mức độ liên quan. Sau đó, khi tạo một đối tượng Service với loại LoadBalanacer chúng tôi chỉ cần đính kèm một tệp được tạo trước TargetGroup sang mới NetworkLoadBalanacer'là.

Làm thế nào để bắt đầu sử dụng?

CCM hỗ trợ Kubernetes phiên bản 1.15 trở lên. Trong một cụm, để nó hoạt động, nó yêu cầu cờ --cloud-provider=external đã được đặt thành true dành cho kube-apiserver, kube-controller-manager, kube-scheduler và tất cả kubelets.

Tất cả các bước cần thiết cho việc cài đặt được mô tả trong README. Quá trình cài đặt tập trung vào việc tạo các đối tượng trong Kubernetes từ các tệp kê khai.

Để sử dụng CCM, bạn cũng sẽ cần:

  • biểu thị trong bảng kê khai mã định danh thư mục (folder-id) Yandex.Cloud;
  • tài khoản dịch vụ để tương tác với API Yandex.Cloud. Trong bản tuyên ngôn Secret cần thiết chuyển các khóa được ủy quyền từ tài khoản dịch vụ. Trong tài liệu mô tả, cách tạo tài khoản dịch vụ và nhận chìa khóa.

Chúng tôi sẽ rất vui khi nhận được phản hồi của bạn và vấn đề mớinếu bạn gặp bất kỳ vấn đề!

Kết quả

Chúng tôi đã sử dụng CCM được triển khai trong năm cụm Kubernetes trong hai tuần qua và có kế hoạch mở rộng số lượng của chúng lên 20 trong tháng tới. Hiện tại, chúng tôi không khuyến nghị sử dụng CCM cho các cài đặt K8 lớn và quan trọng.

Như trong trường hợp của CSI, chúng tôi sẽ rất vui nếu các nhà phát triển Yandex đảm nhận việc phát triển và hỗ trợ dự án này - chúng tôi sẵn sàng chuyển kho lưu trữ theo yêu cầu của họ để giải quyết các nhiệm vụ phù hợp hơn với chúng tôi.

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