Certified Kubernetes Administrator (CKA) with Practice Tests - Phần 3: Logging & Monitoring
Monitor Cluster Components
Để giám sát việc tiêu thụ tài nguyên trên Kubernetes, bạn thường sẽ tập trung vào các chỉ số ở cấp độ node và pod.
Chỉ số Cấp Độ Node
Các chỉ số này bao gồm thông tin về bản thân các node:
Tổng số node trong cụm (cluster)
Trạng thái sức khỏe của từng node
Các chỉ số hiệu suất như sử dụng CPU, bộ nhớ, mạng và đĩa
Chỉ số Cấp Độ Pod
Các chỉ số này cung cấp thông tin chi tiết về hiệu suất của từng pod:
Tổng số lượng pod
Các chỉ số hiệu suất như sử dụng CPU và bộ nhớ của mỗi pod
Vì vậy chúng ta cần một giải pháp để có thể giám sát những số liệu này, lưu trữ chúng và phân tích dữ liệu này.
Vì Kubernetes không đi kèm với một giải pháp giám sát toàn diện tích hợp sẵn, có một số tùy chọn mã nguồn mở và thương mại có sẵn chẳng hạn như Metrics Server, Prometheus,Elastic Stack và các giải pháp độc quyền như DATADOG, dynatrace:
Heapster là một trong những dự án ban đầu đã cho phép giám sát và các tính năng phân tích cho Kubernetes. Tuy nhiên Heapster hiện không còn được sử dụng nữa và một phiên bản rút gọn được hình thành được gọi là Metrics Server.
Bạn có thể có một Metrics Server cho mỗi cluster kubernetes,nó truy xuất dữ liệu từ mỗi node và pod trên cluster, tổng hợp chúng và lưu trữ chúng trong bộ nhớ.
Metrics Server chỉ là một giải pháp giám sát trong bộ nhớ và không lưu trữ dữ liệu trên disk. Vậy số liệu được tạo ra như thế nào?
Kubernetes chạy các một agent trên mỗi node được gọi là kubelet, chịu trách nhiệm để nhận hướng dẫn từ kube-apiserver và chạy các pod trên node đó. Kubelet cũng chứa một thành phần phụ được gọi là cAdvisor hoặc Container Advisor.
Container Advisor chịu trách nhiệm để truy xuất các số liệu từ các pods và hiện thị chúng thông qua kube-apiserver để cung cấp số liệu cho Metrics Server.
Cài đặt Metrics Server:
git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
cd kubernetes-metrics-server/
kubectl create -f .
Thực hiện chay lệnh sau để cung cấp cho CPU và mức tiêu thụ bộ nhớ của mỗi node:
$ kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
kubemaster 166m 8% 1337Mi 70%
kubenode1 36m 1% 1046Mi 55%
Thực hiện chay lệnh sau để cung cấp cho CPU và mức tiêu thụ bộ nhớ của mỗi pod:
$ kubectl top pod
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
nginx 166m 8% 1337Mi 70%
redis 36m 1% 1046Mi 55%
Managing Application Logs
Tôi chạy một container trên docker có tên event-simulator và những gì nó làm là tạo ra các sự kiện ngẫu nhiên mô phỏng một web server. Đây là những sự kiện được truyền trực tiếp đến đầu ra của ứng dụng:
$ docker run kodekloud/event-simulator
2018-10-06 15:57:15,937 - root - INFO - USER1 logged in
2018-10-06 15:57:16,943 - root - INFO - USER2 logged in
2018-10-06 15:57:17,944 - root - INFO - USER1 is viewing page2
2018-10-06 15:57:18,955 - root - INFO - USER2 is viewing page3
2018-10-06 15:57:19,959 - root - INFO - USER3 logged in
Bây giờ nếu chạy container ở chế độ detached sử dụng tùy chọn -d
sẽ không thấy nhật ký logs.
$ docker run -d kodekloud/event-simulator
Nếu muốn xem logs có thể sử dụng lệnh sau, sử dụng tùy chọn -f
để xem các logs trực tiếp:
$ docker logs -f ecf
2018-10-06 15:57:15,937 - root - INFO - USER1 logged in
2018-10-06 15:57:16,943 - root - INFO - USER2 logged in
2018-10-06 15:57:17,944 - root - INFO - USER1 is viewing page2
2018-10-06 15:57:18,955 - root - INFO - USER2 is viewing page3
2018-10-06 15:57:19,959 - root - INFO - USER3 logged in
Tạo một pod có cùng image bằng cách sử dụng tệp định nghĩa pod:
apiVersion: v1
kind: Pod
metadata:
name: event-simulator-pod
spec:
containers:
- name: event-simulator
image: kodekloud/event-simulator
Khi pod đang chạy có thể xem logs của nó bằng lệnh:
$ kubectl logs -f event-simulator-pod
2018-10-06 15:57:15,937 - root - INFO - USER1 logged in
2018-10-06 15:57:16,943 - root - INFO - USER2 logged in
2018-10-06 15:57:17,944 - root - INFO - USER1 is viewing page2
2018-10-06 15:57:18,955 - root - INFO - USER2 is viewing page3
2018-10-06 15:57:19,959 - root - INFO - USER3 logged in
Trong một pod có thể có nhiều container trong đó, sửa tệp định nghĩa pod để thêm một container gọi là image-processor :
apiVersion: v1
kind: Pod
metadata:
name: event-simulator-pod
spec:
containers:
- name: event-simulator
image: kodekloud/event-simulator
- name: image-processor
image: some-image-processor
Nếu chạy lệnh kubectl logs -f event-simulator-pod
nó sẽ hiện thị logs của container nào? Nếu có nhiều container trong một pod, bạn phải chỉ định tên của container đó trong lệnh:
$ kubectl logs -f event-simulator-pod event-simulator
2018-10-06 15:57:15,937 - root - INFO - USER1 logged in
2018-10-06 15:57:16,943 - root - INFO - USER2 logged in
2018-10-06 15:57:17,944 - root - INFO - USER1 is viewing page2
2018-10-06 15:57:18,955 - root - INFO - USER2 is viewing page3
2018-10-06 15:57:19,959 - root - INFO - USER3 logged in
Subscribe to my newsletter
Read articles from Phan Văn Hoàng directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by