Open bmson7112 opened 1 year ago
Để thực hiện bài lap này trước tiên chúng ta sẽ phải cài đặt kind
, Docker
, Helm
, kubectl
như hình dưới:
kind được dùng để tạo cụm Kubernetes cục bộ cho môi trường development hoặc cung cấp Bootstrap cluster
tạm thời để tạo ra Management cluster
Lệnh dưới đây tạo file cấu hình của kind và chúng ta sẽ sử dụng Docker infrastructure provider
cho trường hợp này. Sau đó ta dùng lệnh kind create cluster --config kind-cluster-with-extramounts.yaml
để tạo Management cluster
thông qua file cấu hình yaml vừa được tạo.
Install clusterctl
clusterctl
là 1 công cụ dòng lệnh giúp quản lý vòng đời management cluster
của Cluster-API
Tải bản cài đặt clusterctl
về
Sau đó cài đặt vào máy và kiểm tra lại để chắc chắn rằng clusterctl
đã tồn tại
Khởi tạo Management Cluster
clusterctl init
clusterctl init
Tiếp theo chúng ta sẽ lựa chọn Infrastructure provider
cho Cluster API, ở đây là Docker. Sau khi chạy lệnh clusterctl init --infrastructure docker
ta có kết quả như hình
Chuẩn bị và tạo các workload cluster
clusterctl generate cluster
, sau khi chạy nó ta sẽ có 1 file yaml dùng để tạo ra workload cluster
Trước tiên ta thêm các biến môi trường cho workload cluster
của mình và sau đó tạo file .yaml
Sau khi tạo xong file cấu hình .yaml
( ở đây em chỉ tạo 1 node controller và 1 node worker) ta dùng lệnh kubectl apply -f capi-quickstart.yaml
để triển khai workload cluster
Kiểm tra lại coi cluster đã hoàn tòan được tạo hay chưa ta có kết quả như hình bên dưới
KIểm tra Control Plane đã hoạt động hay chưa ta dùng lệnh kubectl get kubeadmcontrolplane
và được kết quả như hình
Cài đặt Cloud provider
Triển khai giải pháp CNI
Sau 1 thời gian ngắn, các node của ta sẽ chạy và ở trạng thái sẵn sàng, ta dùng lệnh kubectl --kubeconfig=./capi-quickstart.kubeconfig get nodes
để kiểm tra trạng thái của chúng
Ở đây, các node của em lại đang ở trạng thái NotReady
, sau khi kiểm tra ttạng thái của nó, em có được két quả, vậy có thể hiểu các node ở đây không hoạt động được không phải lỗi do quá trinh cài đặt mà có thể là do thiết bị của em
1. Nêu vấn đề và lý do có sự xuất hiện của cluster-API
kubeadm
là 1 công cụ giúp chúng ta giải quyết các vấn đề cài đặt tuy nhiên nó ko giúp ta tham gia quản lý các chu kyf của cụm cũng như cung cấp các dịch vụ hạ tầng … . từ đó mà ta cócluster API
là 1 giải pháp dành cho các vấn đề này.declarative API
để quản lý vòng đời của 1 hoặc nhiều cụm k8s.2. Cách hoạt động.
Kubernetes controller
là 1 loại vòng lặp vô hạn liên tục theo dõi trạng thái hiện tại của hệ thống và để chuyển đổi sang trạng thái mong muốn tốt nhất. chúng được định nghĩa trong các fileyaml
controller loop
là các vòng lặp nhận được trạng thái mong muốn và đưa hệ thống tiến tới trạng thái mong muốn của người dùngSơ đồ miêu tả cách hoạt động của
controller loop
3. Kiển trúc của Cluster-API thì gồm 2 nhóm chính
Core API
: Bao gồm các CRD mô hình hóa các cơ sở hạ tầng như các máy ảo, máy chủ vật lý... và cấu hình cần thiết để tạo các clusterProvider
: Các nhà cung cấp triển khai các chức năng và dịch vụ cần thiết cho từng môi trường cơ sở hạ tầng. nhưControlPlane Provider
Bootstrap Provider
Infrastructure Provider
4. Các loại Cluster
Bootstrap Cluster
: Một cụm bootstrap được sử dụng để tạomanagement cluster
. Nó là một cụm tạm thời thường được tạo cục bộ bằng cách sử dụngkind
. Nó bị hủy sau khimanagement cluster
được tạo. Tóm tắt quá trình hoạt động của nó sẽ có các bước sau:management cluster
: - là 1 cum k8s được sinh ra để quản lý vòng đời của cácworkload cluster
workload cluster
: - là các cluster được sử dụng cho các hoạt động thực tế như triển khai phầm mềm, sản phẩm.Thứ tự
Bootstrap Cluster
tạo ramanagement cluster
được biểu diễn bởi các hình sauĐể tạo ra
workload cluster
chúng ta có 1 khái niệmClusterClass
. Nó là 1 tập hợp các template định nghĩa các cấu trúc liên kết ( control plane và machine deployment) để làm tham chiếu cho 1 hoặc nhiều Cluster. Có thể hiểu đơn giản là ta sẽ xác định hình dạng của 1 Cluster 1 lần rồi sau đó sử dụng laij nó nhiều lần5. Các thành phần của
management cluster
-Cluster API Core Manager
: Controller manager này chiu trách nghiệm quản lý vòng đời của cluster. Nó sẽ hiểu tất cả các tài nguyên như Cluster, Machine, MachineDeployment và MachineSet được sử dụng để khai báo một cụm mà không có bất kỳ chi tiết cơ sở hạ tầng cụ thể nào. Việc khai báo cơ sở hạ tầng hay những cái khác liên quan là dobootstrap provider
vàinfra provider
làmbootstrap provider
: Tạo các tập lệnhcloud-init
để các nhà cung cấp cơ sở hạ tầng có thể sử dụng khi tạo các Machine cho cụm. Nó chuyển đổi Machine thành các Kubernetes Node. Thường thì chúng ta sẽ sử dụngkubeadm
để khởi động cụm. Nó sẽ chuyển đổi các đối tượngKubeadmConfig bootstrap
thành cáccloud-init
, từ đó có thể biến Machine thành k8s Node bằng KubeadmInfrastructure Provider
: Nó cung cấp cơ sở hạ tầng trong môi trường hoạt động chuẩn của Kubernetes, Họ sử dụng cấu hình Bootstrap củaBootstrap provider
tạo ra. Và mỗi nhà cung cấp sẽ có cac CRD riêng như các phiên bản cơ sở hạ tầng của Cluster, Machine, ....6. Các thành phần của Cluster-API
Nó sử dụng 1 loạt các CRD để tạo và quản lý các cụm k8s
Mỗi CRD thì được quản lý bởi controller tương ứng của nó
Cluster
: Là cụm Kubernetes với các tham số cấu hình cần thiết như Pod network CIDR, service network CIDR, API endpoints, tền miền, ....MachineDeployment
: Là 1 định nghĩa để quản lý các Machine. Nó quản lý các Machine thông qua việc phá hủy và tái tạo lại chúng. Nó tương tự nhưDeployment
- 1 service của cụm k8s, nó quản lý MachineSet và cho phép rollout/rollback.MachineSet
: Là đại diện cho 1 nhóm các Machine, nó tương tự như 1replicaset
. MachineSet Controller sẽ tạo ra các Machine dựa trên replicas đã đc xác định và Machine Template từ đó đảm bảo số lượng các máy được tạo và đưa vào hoạt độngMachine
: Hiểu đơn giản là 1 máy ảo hoặc máy chủ gì đó, sau đó sẽ là node của cụm k8s. Khi đc tạo thì tài nguyên cung cấp cho nó là bất biến, khi các thông số tài nguyên của nó bị thay đổi thì nó sẽ bị phá hủy và tạo lại cái mớiMachineHealthCheck
: xác định khi nào node hoạt động không tốt và cần đc thay thế