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
0
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

Phan Văn Hoàng
Phan Văn Hoàng