Giám sát tài nguyên thực tế của một cụm Kubernetes bằng Metrics Server

1566
08-09-2021
Giám sát tài nguyên thực tế của một cụm Kubernetes bằng Metrics Server

Không phải ai cũng nắm rõ việc giám sát tài nguyên thực tế của một cụm Kubernetes. Trong bài viết dưới đây, Bizfly Cloud sẽ hướng dẫn chi tiết cách cài đặt Metrics Server vào cluster và khám phá các lệnh để giám sát tài nguyên của một cụm Kubernetes ở các cấp khác nhau: Node, Pod và Container.

Kubernetes có API Metrics tích hợp và truy vấn CLI đơn giản, kubectl top mà bạn có thể sử dụng để tìm snapshot của CPU về mức tiêu thụ bộ nhớ của một objective trong Kubernetes. Kubernetes Metrics API phụ thuộc vào add-on (tiện ích bổ sung) của cụm Metrics Server thu thập việc sử dụng tài nguyên từ các Kubelet của cluster. Consumer chính của API Metrics là Horizontal Pod Autoscaler. Horizontal Pod Autoscaler (HPA - bộ điều hành việc scale theo chiều ngang các Pod) sử dụng các chỉ số được cung cấp bởi API Metrics để chia tỷ lệ số lượng nhóm dựa trên các giá trị chỉ số tài nguyên quan sát được. Ngoài API Metrics, HPA cũng được thiết kế để sử dụng các chỉ số từ ứng dụng của bạn đang chạy trên cluster (số liệu tùy chỉnh) và các service bên ngoài cluster (số liệu bên ngoài) để autoscale các pod. Tương tự như HPA, Vertical Pod Autoscaler (VPA) cũng dựa trên Metrics Server. VPA cho phép bạn tự động scale CPU và bộ nhớ của các container trong một pod.

Bizfly Cloud hiểu rằng autoscaling và monitoring là hai trường hợp sử dụng chính của Metrics API và Metrics Server. Để khám phá chuyên sâu về việc giám sát Kubernetes, bạn phải có Metrics Server được triển khai trên cluster. Rất dễ để cài đặt Metrics Server trên một cluster. Từ Terminal, bạn thực hiện lệnh sau:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Các cụm Azure AKS bao gồm triển khai Metrics Server theo mặc định. Để tạo khung AKS cluster, hãy thực hiện các lệnh AZ CLI sau từ Terminal:

kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml

Để xác minh tình trạng triển khai Metrics Server, hãy thực hiện lệnh sau:

kubectl get deployment metrics-server -n kube-system

Cần một ứng dụng chạy trên cluster để kiểm tra các tính năng của Metrics API triển khai bởi  Metrics Server. Để đạt được điều đó, hãy triển khai Azure Voting App cho cluster, một ứng dụng đơn giản bao gồm Redis back-end và Python front-end, mỗi ứng dụng chạy trên một pod. Thực hiện lệnh sau từ Terminal để triển khai ứng dụng cho cluster:

kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml

Để lấy địa chỉ IP bên ngoài front end của ứng dụng, hãy thực hiện lệnh sau. Lưu ý rằng có thể mất một khoảng thời gian để cloud phân bổ địa chỉ IP bên ngoài cho services của bạn:

kubectl describe services azure-vote-front | grep 'LoadBalancer Ingress'

Bây giờ bạn sẽ có một ứng dụng đầy đủ chức năng đang chạy trên cluster. Điều hướng đến front end của ứng dụng từ trình duyệt của bạn theo địa chỉ IP mà bạn nhận được từ đầu ra của lệnh trước đó.

Tiếp theo, hãy bắt đầu theo dõi các objective khác nhau trong cluster.

Monitoring Nodes

Điểm cuối của Metrics API là /apis/metrics.k8s.io/ . Để truy cập API này, bạn có thể thực hiện 1 trong 2 cách sau:

- Sử dụng port forwarding với lệnh sau:

kubectl port-forward -n kube-system svc/metrics-server :443

- Sử dụng kubectl như sau:

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/" | jq '.'

Hãy kiểm tra các tài nguyên có sẵn để truy vấn với API bằng cách gửi yêu cầu GET đến /apis/metrics.k8s.io/v1beta1/ điểm cuối:

Giám sát tài nguyên của một cụm Kubernetes - Ảnh 1.

Tài nguyên cho các chỉ số có sẵn

Để xem metrics snapshot tất cả các node của cluster, hãy thực hiện lệnh sau:

kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes | jq '.'

Dưới đây là minh hoạ output của lệnh từ Terminal:

Giám sát tài nguyên của một cụm Kubernetes - Ảnh 2.

Để thu hẹp yêu cầu của bạn thành nút đơn (single node), hãy gửi một yêu cầu GET đến /apis/metrics.k8s.io/v1beta1/nodes/ điểm cuối.  

Monitoring Pods

Bạn có thể truy vấn số liệu của tất cả các pod hoặc một pod cụ thể bằng cách gửi yêu cầu GET tới /apis/metrics.k8s.io/v1beta1/pods điểm cuối và /apis/metrics.k8s.io/v1beta1/pods/ điểm cuối tương ứng như sau:

kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods | jq '.'

Dưới đây là minh hoạ 1 phần output của lệnh từ Terminal:

Giám sát tài nguyên của một cụm Kubernetes - Ảnh 3.

Nếu một pod bao gồm nhiều container, phản hồi API sẽ bao gồm thống kê tài nguyên cho mỗi container. Bạn có thể sử dụng lệnh sau để nhắm mục tiêu yêu cầu đến một pod đơn:

kubectl get --raw /apis/metrics.k8s.io/v1beta1/namespaces/default/pods/

Kubernetes CLI: kubectl top

Tương tác với API Metrics thô không thân thiện với người dùng. Hãy nhập lệnh kubectl top, lệnh này cho phép bạn xem mức tiêu thụ tài nguyên của tất cả các node và pod hoặc một node và pod cụ thể. Hãy kiểm tra thống kê tiêu thụ tài nguyên của các pod bằng cách thực hiện các lệnh sau:

kubectl top node

kubectl top pods --all-namespaces

Dưới đây là output của lệnh:

Giám sát tài nguyên của một cụm Kubernetes - Ảnh 4.

Monitoring Containers

Để kiểm tra tài nguyên được sử dụng bởi các container trong một pod, hãy thêm flag --container vào lệnh top như sau:

kubectl top pods --all-namespaces --containers

Mẹo: Để hiểu cách sử dụng lệnh Kubernetes CLI, hãy sử dụng lệnh kubectl help để tiết kiệm thời gian. Ví dụ, để hiểu việc áp dụng các lệnh top, thực hiện lệnh: kubectl help top.

Bên trong Container với lệnh top

Nhìn vào bên trong container để theo dõi các tiến trình đang chạy bên trong chúng, chúng ta có thể sử dụng lệnh Linux phổ biến: top. Các lệnh top cho phép bạn giám sát các quy trình và sử dụng tài nguyên của nó trên Linux, và nó được cài đặt theo mặc định trên tất cả các distro Linux. Chúng ta sẽ bắt đầu một phiên shell trong một container đang chạy và chạy lệnh top ở chế độ không tương tác trong đó như sau:

kubectl exec -- top -bn1

Vì chúng ta đã triển khai ứng dụng mẫu là Azure Vote App trong default namespace, chúng ta sẽ thực thi lệnh sau để chạy lệnh top cho từng pod của ứng dụng:

kubectl get pods -n default -o custom-columns=name:metadata.name --no-headers | xargs -I{} sh -c 'echo {}; kubectl exec {} -- top -bn1'

Dưới đây là minh hoạ output của lệnh từ Terminal:

Giám sát tài nguyên của một cụm Kubernetes - Ảnh 5.

Output của lệnh sẽ hiển thị:

1. System time, uptime, and user sessions.

2. Bộ nhớ được sử dụng: RAM và Swap (một phần của disk được sử dụng như RAM).

3. Các quy trình đang chạy trong container.

4. CPU usage về mặt thời gian CPU tiêu tốn cho các quá trình khác nhau.

5. Average load trong 1 phút, 5 phút và 15 phút.

6. Task display bao gồm: Process ID, User who started the process, Nice value, Priority, Memory consumption, State of the process, CPU time và tên của quy trình.

Giám sát trạng thái Container

Kube-state-metrics là một dịch vụ nghiên cứu Kubernetes API Server và đưa ra các chỉ số về trạng thái của các đối tượng như triển khai, các node và các pod. Dịch vụ kube-state-metrics không duy trì dữ liệu và chỉ có một số liệu endpoint phục vụ các điểm dữ liệu mới nhất của đối tượng được yêu cầu. Bạn có thể sử dụng các công cụ như Prometheus để loại bỏ điểm cuối dịch vụ và duy trì dữ liệu trong bộ nhớ vĩnh viễn.

Hãy nhớ rằng kube-state-metrics không phải là sự thay thế cho Metrics Server. Metrics Server giúp bạn giám sát việc sử dụng CPU và bộ nhớ của các cụm node và pod. Mặt khác, dịch vụ kube-state-metrics cho phép bạn theo dõi trạng thái của cluster bằng cách cung cấp thông tin về số lượng, tình trạng và tính khả dụng của các pod, node và các objective khác trong hệ thống Kubernetes.

Cài đặt Kubernetes với Bizfly Kubernetes Engine

- Nhà cung cấp dịch vụ Kubernetes có máy chủ đặt tại Việt Nam, giúp người dùng tại Việt Nam truy cập ứng dụng nhanh hơn, ít bị ảnh hưởng mỗi khi có sự cố network quốc tế.

- Là đơn vị tiên phong trong cung cấp dịch vụ tại Việt Nam, Bizfly Cloud có nhiều ưu thế giúp hỗ trợ khách hàng tốt nhất về: hệ ngôn ngữ tiếng Việt, hỗ trợ 24/7...

- Tích hợp đầy đủ với các dịch vụ khác trong bộ giải pháp 20+ dịch vụ của Bizfly Cloud (Load Balancer, Cloud Server, Autoscaling, Cloud Watcher, Firewall, Container Registry,…), giúp đơn giản mô hình, tối ưu về tốc độ và tính bảo mật cho hệ thống của người dùng.

- Chi phí tính theo tài nguyên sử dụng theo thời gian thực. Tính tiền theo tháng hoặc theo giờ. Có chính sách hoàn tiền khi xóa tài nguyên.

- Cung cấp Dashboard và API giúp khách hàng có nhiều phương thức truy cập để quản lý hệ thống.

- Hệ thống vật lý với cấu hình phần cứng mạnh mẽ: Các máy chủ sử dụng CPU Intel E5 v4 và Intel Xeon Gold, RAM lên tới 512 GB , ổ cứng SSD, băng thông hỗ trợ lên tới 10Gbps.

Giám sát tài nguyên của một cụm Kubernetes - Ảnh 6.

Với những tính năng ưu việt và vượt trội, tích hợp Kubernetes Engine có thể mang lại những tác động tích cực đến các Dev team/DevOps cũng như toàn bộ doanh nghiệp. Nếu bạn đang muốn bắt đầu với Kubernetes, truy cập: https://bizflycloud.vn/kubernetes-engine để trải nghiệm miễn phí ngay hôm nay.

>> Có thể bạn quan tâm: Kubernetes Cluster là gì? Cách tạo Kubernetes Cluster

SHARE