Managed control plane cụ thể là tìm hiểu về Kamaji.
Hiểu đơn giản thì, với cluster-api, ta có 1 cụm k8s được dùng để quản lý các cụm k8s khác, nhưng các thành phần tạo nên các cụm vẫn giống như 1 cụm thông thường trong khi đó các node control plane của các cụm trong kamaji thì nó sẽ đươcj chuyển thành các pod rồi nhét vào admin cluster, từ đó thì có thể giảm kích thước của cả hệ thống, giảm thiểu kinh phí quản lý
Nó sẽ là 1 hệ thống gồm admin cluster và tenant cluster. Giao tiếp của chúng là 1 chiều, admin cluster quản lý các tenant cluster thế nhưng tenant cluter lại ko thể giao tiếp ngược lại cũng như ko biết đến sự tồn tại của admin cluster
Các tenant cluster sẽ ko có giao tiếp với nhau
1.Các thành phần của hệ thống
Tenan control plane
Các Control Plane của các tenant cluster sẽ ko ở trong cluster của chúng mà chạy dưới dạng pod trong các namespace của admin cluster
Tenant worker node
Giống các node worker bình thường, được nối với API Server của Tenant control plane
Vậy làm thế nào để có thể tạo thêm 1 tenant cluster cho Kamaji?
Tạo 1 Tenant Control Plane mới nằm trong namespace của admin cluster, sau đó kết nối, thêm Tenant worker node với nó
Datastores
Việc đặt Tenant control plane vào 1 pod là phần việc đơn giản nhất, vấn đề ở đây là phải đảm bảo mỗi Tenant cluster sẽ lưu lại trạng thái của nó để có thể lưu trữ và truy xuất dữ liệu. Vì có thể triển khai cụm k8s với cụm etcd ở bên ngoài nên nhà phát triển đã sử dụng khả năng này đối với các Tenant Control Plane
Nếu theo ý hiểu của em thì trước kia, 1 node control plane của cụm k8s sẽ gồm các thành phần như etcd, controller manager, schedule, API Server thì với Kamaji, nó sẽ tách etcd ra khỏi control plane, rồi nó gộp tất cả các etcd của các Tenant cluster lại với nhau thành 1 gọi là “multi-tenant datastore"
Kamaji cung cấp 1 CRD là Datastore để tiếp cận việc khai báo và quản lý nhiều datastore
Bằng cách chia sẻ datastore cho nhiều Tenant, khả năng phục hồi vẫn đc đảm bảo và số lượng pod nằm trong tầm kiểm soát, phương pháp này giúp giải quyết được mục tiêu chính là phục hồi và tối ưu hóa chi phí
Ng phát triển phải vận hành datastore ở bên ngoài, ngoài etcd của admin cluster và quản lý quyền truy cập để đảm bảo rằng mỗi tenant cluster chỉ sử dụng dữ liệu của nó
Kiểu lưu trữ khác
Ngoài etcd ra thì Kamaji còn cung cấp 1 công cụ khác giúp lưu trữ trạng thái của các tenant cluster đó là tích hợp kine vào để sử dụng các bộ cơ sở dữ liệu như MySQL, PostgreSQL.
Theo như em hiểu, kine như 1 bộ chuyển đổi vậy, nó chuyển các lệnh gọi API etcd thành các câu truy vấn SQL sau đó truy cập vào cơ sỏ dữ liệu như PostgeSQL, MySQL,...
Ngoài ra nó còn hỗ trợ di chuyển dữ liệu giữa các datastore mà không làm mất mát nhưng chúng phải ở trong cùng 1 trình điều khiển dữ liệu
Konnectivity :
Sinh ra nhằm mục đích thay thế SSH tunnel
KIểm soát cách API Server triển khai lưu lượng mạng service, pod, node.
CÓ thể chọn chạy API Server( control network) và cluster node ( woker network) trên các mạng cô lập riêng biệt
Các control network và cluster có thể có địa chỉ IP chồng chéo. Do đó chúng yêu cầu 1 lớp định tuyến không dựa trên IP, lớp này còn giúp mình lưu lại nhật ký của metadata, cho phép xác thực kết nối của API Server gửi đi
Khi kết hợp với tường lửa, kiến trúc mạng tách biệt này giúp cho hệ thống chống lại được các tác động bảo mật từ bên ngoài
Trong API Server có 1 thành phần là EgressSelector hoạt động như 1 định nghĩa,giống 1 cơ chế định tuyến làm thế nào để API giao tiếp được với các thành phần bê ngoài.
Quản lý triển khai lưu lượng mạng sử dụng của các thành phần, đây mình quản lý các cluster nên có thể chọn egressSelection là cluster. Với egressSelection này nó quán lý giao thức mạng giữa API Server và Konnectivity server. Chúng sử dụng giao thức mạng là GRPC hoặc HTTPConnect và chúng ta phải thiết lập sao cho Konnectivity và API Server hoạt động ở cùng 1 chế độ.
Để triển khai Konnectivity server thì phải thêm nó vào control plane và có thể triển khai Konnectivity server dưới dạng 1 Pod trong file cấu hình Konnectivity-server.yaml
Còn ở phía các node worker thì sẽ cài đặt Konnectivity agent. Có thể triển khai nó dưới dạng deployment hoặc deamonset .
EgressSelection cung cấp cấu hình cho một ứng dụng khách lựa chọn lối ra duy nhất. Có rất nhiều lựa chọn cho đầu ra, các giá trị đc hỗ trợ là controlplane,master, etcd, cluster.
Vậy làm thế nào để nó vươt qua được tưởng lửa và các lớp, tất cả được biểu diễn như hình ví dụ dưới đây : Nó sử dụng giao thức tùy chỉnh trên gRPC qua TLS gần giống như SSH reverse tunnel và là tác nhân để mở các kết nối 2 chiều đến Server
Managed control plane cụ thể là tìm hiểu về Kamaji.
Hiểu đơn giản thì, với cluster-api, ta có 1 cụm k8s được dùng để quản lý các cụm k8s khác, nhưng các thành phần tạo nên các cụm vẫn giống như 1 cụm thông thường trong khi đó các node control plane của các cụm trong kamaji thì nó sẽ đươcj chuyển thành các pod rồi nhét vào admin cluster, từ đó thì có thể giảm kích thước của cả hệ thống, giảm thiểu kinh phí quản lý
Nó sẽ là 1 hệ thống gồm admin cluster và tenant cluster. Giao tiếp của chúng là 1 chiều, admin cluster quản lý các tenant cluster thế nhưng tenant cluter lại ko thể giao tiếp ngược lại cũng như ko biết đến sự tồn tại của admin cluster
Các tenant cluster sẽ ko có giao tiếp với nhau
1.Các thành phần của hệ thống
Tenan control plane
Tenant worker node
Vậy làm thế nào để có thể tạo thêm 1 tenant cluster cho Kamaji?
Datastores
Việc đặt Tenant control plane vào 1 pod là phần việc đơn giản nhất, vấn đề ở đây là phải đảm bảo mỗi Tenant cluster sẽ lưu lại trạng thái của nó để có thể lưu trữ và truy xuất dữ liệu. Vì có thể triển khai cụm k8s với cụm etcd ở bên ngoài nên nhà phát triển đã sử dụng khả năng này đối với các Tenant Control Plane
Nếu theo ý hiểu của em thì trước kia, 1 node control plane của cụm k8s sẽ gồm các thành phần như etcd, controller manager, schedule, API Server thì với Kamaji, nó sẽ tách etcd ra khỏi control plane, rồi nó gộp tất cả các etcd của các Tenant cluster lại với nhau thành 1 gọi là “multi-tenant datastore"
Kamaji cung cấp 1 CRD là Datastore để tiếp cận việc khai báo và quản lý nhiều datastore
Bằng cách chia sẻ datastore cho nhiều Tenant, khả năng phục hồi vẫn đc đảm bảo và số lượng pod nằm trong tầm kiểm soát, phương pháp này giúp giải quyết được mục tiêu chính là phục hồi và tối ưu hóa chi phí
Ng phát triển phải vận hành datastore ở bên ngoài, ngoài etcd của admin cluster và quản lý quyền truy cập để đảm bảo rằng mỗi tenant cluster chỉ sử dụng dữ liệu của nó
Kiểu lưu trữ khác
Ngoài etcd ra thì Kamaji còn cung cấp 1 công cụ khác giúp lưu trữ trạng thái của các tenant cluster đó là tích hợp kine vào để sử dụng các bộ cơ sở dữ liệu như MySQL, PostgreSQL.
Theo như em hiểu, kine như 1 bộ chuyển đổi vậy, nó chuyển các lệnh gọi API etcd thành các câu truy vấn SQL sau đó truy cập vào cơ sỏ dữ liệu như PostgeSQL, MySQL,...
Ngoài ra nó còn hỗ trợ di chuyển dữ liệu giữa các datastore mà không làm mất mát nhưng chúng phải ở trong cùng 1 trình điều khiển dữ liệu
Trong API Server có 1 thành phần là EgressSelector hoạt động như 1 định nghĩa,giống 1 cơ chế định tuyến làm thế nào để API giao tiếp được với các thành phần bê ngoài.
Quản lý triển khai lưu lượng mạng sử dụng của các thành phần, đây mình quản lý các cluster nên có thể chọn egressSelection là cluster. Với egressSelection này nó quán lý giao thức mạng giữa API Server và Konnectivity server. Chúng sử dụng giao thức mạng là GRPC hoặc HTTPConnect và chúng ta phải thiết lập sao cho Konnectivity và API Server hoạt động ở cùng 1 chế độ.
Để triển khai Konnectivity server thì phải thêm nó vào control plane và có thể triển khai Konnectivity server dưới dạng 1 Pod trong file cấu hình Konnectivity-server.yaml
Còn ở phía các node worker thì sẽ cài đặt Konnectivity agent. Có thể triển khai nó dưới dạng deployment hoặc deamonset .
EgressSelection cung cấp cấu hình cho một ứng dụng khách lựa chọn lối ra duy nhất. Có rất nhiều lựa chọn cho đầu ra, các giá trị đc hỗ trợ là controlplane,master, etcd, cluster.
Vậy làm thế nào để nó vươt qua được tưởng lửa và các lớp, tất cả được biểu diễn như hình ví dụ dưới đây : Nó sử dụng giao thức tùy chỉnh trên gRPC qua TLS gần giống như SSH reverse tunnel và là tác nhân để mở các kết nối 2 chiều đến Server