Kubernetes - Giám sát

Giám sát là một trong những thành phần quan trọng để quản lý các cụm lớn. Đối với điều này, chúng tôi có một số công cụ.

Giám sát với Prometheus

Nó là một hệ thống giám sát và cảnh báo. Nó được xây dựng tại SoundCloud và có nguồn mở vào năm 2012. Nó xử lý dữ liệu đa chiều rất tốt.

Prometheus có nhiều thành phần tham gia giám sát -

  • Prometheus - Nó là thành phần cốt lõi có chức năng quét và lưu trữ dữ liệu.

  • Prometheus node explore - Nhận ma trận cấp máy chủ và đưa chúng cho Prometheus.

  • Ranch-eye - là một haproxy và phơi bày cAdvisor số liệu thống kê để Prometheus.

  • Grafana - Trực quan hóa dữ liệu.

  • InfuxDB - Cơ sở dữ liệu chuỗi thời gian được sử dụng đặc biệt để lưu trữ dữ liệu từ chủ trang trại.

  • Prom-ranch-exporter - Đây là một ứng dụng node.js đơn giản, giúp truy vấn máy chủ Rancher về trạng thái của ngăn xếp dịch vụ.

Sematext Docker Agent

Nó là một đại lý thu thập nhật ký, sự kiện và chỉ số nhận biết Docker hiện đại. Nó chạy như một vùng chứa nhỏ trên mọi máy chủ Docker và thu thập nhật ký, số liệu và sự kiện cho tất cả các nút và vùng chứa cụm. Nó phát hiện ra tất cả các vùng chứa (một nhóm có thể chứa nhiều vùng chứa) bao gồm các vùng chứa cho các dịch vụ cốt lõi của Kubernetes, nếu các dịch vụ cốt lõi được triển khai trong các vùng chứa Docker. Sau khi triển khai, tất cả nhật ký và số liệu sẽ có sẵn ngay lập tức.

Triển khai đại lý cho các nút

Kubernetes cung cấp DeamonSets đảm bảo các nhóm được thêm vào cụm.

Định cấu hình SemaText Docker Agent

Nó được cấu hình thông qua các biến môi trường.

  • Nhận một tài khoản miễn phí tại apps.sematext.com , nếu bạn chưa có.

  • Tạo Ứng dụng SPM loại “Docker” để lấy Mã thông báo ứng dụng SPM. Ứng dụng SPM sẽ giữ các chỉ số và sự kiện hiệu suất Kubernetes của bạn.

  • Tạo Ứng dụng Logsene để nhận Mã thông báo ứng dụng Logsene. Ứng dụng Logsene sẽ lưu giữ nhật ký Kubernetes của bạn.

  • Chỉnh sửa các giá trị của LOGSENE_TOKEN và SPM_TOKEN trong định nghĩa DaemonSet như hình dưới đây.

    • Lấy mẫu sematext-agent-daemonset.yml (văn bản thô thô) mới nhất (cũng được hiển thị bên dưới).

    • Lưu trữ nó ở đâu đó trên đĩa.

    • Thay thế các trình giữ chỗ SPM_TOKEN và LOGSENE_TOKEN bằng các mã thông báo SPM và Logsene App của bạn.

Tạo đối tượng DaemonSet

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
   name: sematext-agent
spec:
   template:
      metadata:
         labels:
            app: sematext-agent
      spec:
         selector: {}
         dnsPolicy: "ClusterFirst"
         restartPolicy: "Always"
         containers:
         - name: sematext-agent
            image: sematext/sematext-agent-docker:latest
            imagePullPolicy: "Always"
            env:
            - name: SPM_TOKEN
               value: "REPLACE THIS WITH YOUR SPM TOKEN"
            - name: LOGSENE_TOKEN
               value: "REPLACE THIS WITH YOUR LOGSENE TOKEN"
            - name: KUBERNETES
               value: "1"
            volumeMounts:
               - mountPath: /var/run/docker.sock
                  name: docker-sock
               - mountPath: /etc/localtime
                  name: localtime
            volumes:
               - name: docker-sock
                  hostPath:
                     path: /var/run/docker.sock
               - name: localtime
                  hostPath:
                     path: /etc/localtime

Chạy Sematext Agent Docker với kubectl

$ kubectl create -f sematext-agent-daemonset.yml
daemonset "sematext-agent-daemonset" created

Nhật ký Kubernetes

Nhật ký của vùng chứa Kubernetes không khác nhiều so với nhật ký vùng chứa Docker. Tuy nhiên, người dùng Kubernetes cần xem nhật ký cho các nhóm được triển khai. Do đó, rất hữu ích khi có sẵn thông tin cụ thể về Kubernetes để tìm kiếm nhật ký, chẳng hạn như -

  • Không gian tên Kubernetes
  • Tên nhóm Kubernetes
  • Tên vùng chứa Kubernetes
  • Tên hình ảnh Docker
  • Kubernetes UID

Sử dụng ELK Stack và LogSpout

Ngăn xếp ELK bao gồm Elasticsearch, Logstash và Kibana. Để thu thập và chuyển tiếp nhật ký tới nền tảng ghi nhật ký, chúng tôi sẽ sử dụng LogSpout (mặc dù có các tùy chọn khác như FluentD).

Đoạn mã sau cho biết cách thiết lập cụm ELK trên Kubernetes và tạo dịch vụ cho ElasticSearch -

apiVersion: v1
kind: Service
metadata:
   name: elasticsearch
   namespace: elk
   labels:
      component: elasticsearch
spec:
   type: LoadBalancer
   selector:
      component: elasticsearch
   ports:
   - name: http
      port: 9200
      protocol: TCP
   - name: transport
      port: 9300
      protocol: TCP

Tạo bộ điều khiển sao chép

apiVersion: v1
kind: ReplicationController
metadata:
   name: es
   namespace: elk
   labels:
      component: elasticsearch
spec:
   replicas: 1
   template:
      metadata:
         labels:
            component: elasticsearch
spec:
serviceAccount: elasticsearch
containers:
   - name: es
      securityContext:
      capabilities:
      add:
      - IPC_LOCK
   image: quay.io/pires/docker-elasticsearch-kubernetes:1.7.1-4
   env:
   - name: KUBERNETES_CA_CERTIFICATE_FILE
   value: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
   - name: NAMESPACE
   valueFrom:
      fieldRef:
         fieldPath: metadata.namespace
   - name: "CLUSTER_NAME"
      value: "myesdb"
   - name: "DISCOVERY_SERVICE"
      value: "elasticsearch"
   - name: NODE_MASTER
      value: "true"
   - name: NODE_DATA
      value: "true"
   - name: HTTP_ENABLE
      value: "true"
ports:
- containerPort: 9200
   name: http
   protocol: TCP
- containerPort: 9300
volumeMounts:
- mountPath: /data
   name: storage
volumes:
   - name: storage
      emptyDir: {}

URL Kibana

Đối với Kibana, chúng tôi cung cấp URL Elasticsearch dưới dạng biến môi trường.

- name: KIBANA_ES_URL
value: "http://elasticsearch.elk.svc.cluster.local:9200"
- name: KUBERNETES_TRUST_CERT
value: "true"

Giao diện người dùng Kibana sẽ có thể truy cập được tại cổng container 5601 và tổ hợp máy chủ / Cổng nút tương ứng. Khi bạn bắt đầu, sẽ không có bất kỳ dữ liệu nào trong Kibana (dự kiến ​​là bạn chưa đẩy bất kỳ dữ liệu nào).