Kubernetes - Pemantauan

Pemantauan adalah salah satu komponen kunci untuk mengelola cluster besar. Untuk ini, kami memiliki sejumlah alat.

Pemantauan dengan Prometheus

Ini adalah sistem pemantauan dan peringatan. Itu dibangun di SoundCloud dan bersumber terbuka pada tahun 2012. Ini menangani data multi-dimensi dengan sangat baik.

Prometheus memiliki banyak komponen untuk berpartisipasi dalam pemantauan -

  • Prometheus - Ini adalah komponen inti yang membuang dan menyimpan data.

  • Prometheus node explore - Mendapat matriks level host dan memaparkannya ke Prometheus.

  • Ranch-eye - adalah haproxy dan mengekspos cAdvisor statistik untuk Prometheus.

  • Grafana - Visualisasi data.

  • InfuxDB - Database time series khusus digunakan untuk menyimpan data dari peternak.

  • Prom-ranch-exporter - Ini adalah aplikasi node.js sederhana, yang membantu dalam menanyakan server Rancher untuk status tumpukan layanan.

Agen Docker Sematext

Ini adalah metrik, peristiwa, dan agen pengumpulan log yang sadar-Docker modern. Ini berjalan sebagai wadah kecil di setiap host Docker dan mengumpulkan log, metrik, dan peristiwa untuk semua node cluster dan wadah. Ia menemukan semua container (satu pod mungkin berisi beberapa container) termasuk container untuk layanan inti Kubernetes, jika layanan inti di-deploy di container Docker. Setelah penerapannya, semua log dan metrik segera tersedia di luar kotak.

Menerapkan Agen ke Node

Kubernetes menyediakan DeamonSets yang memastikan pod ditambahkan ke cluster.

Mengonfigurasi Agen Docker SemaText

Ini dikonfigurasi melalui variabel lingkungan.

  • Dapatkan akun gratis di apps.sematext.com , jika Anda belum memilikinya.

  • Buat Aplikasi SPM jenis "Docker" untuk mendapatkan Token Aplikasi SPM. Aplikasi SPM akan menyimpan metrik dan acara kinerja Kubernetes Anda.

  • Buat Aplikasi Logsene untuk mendapatkan Token Aplikasi Logsene. Aplikasi Logsene akan menyimpan log Kubernetes Anda.

  • Edit nilai LOGSENE_TOKEN dan SPM_TOKEN dalam definisi DaemonSet seperti yang ditunjukkan di bawah ini.

    • Dapatkan templat sematext-agent-daemonset.yml (teks biasa mentah) terbaru (juga ditampilkan di bawah).

    • Simpan di suatu tempat di disk.

    • Ganti placeholder SPM_TOKEN dan LOGSENE_TOKEN dengan token SPM dan Aplikasi Logsene Anda.

Buat Objek 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

Menjalankan Sematext Agent Docker dengan kubectl

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

Kubernetes Log

Log kontainer Kubernetes tidak jauh berbeda dengan log kontainer Docker. Namun, pengguna Kubernetes perlu melihat log untuk pod yang di-deploy. Oleh karena itu, sangat berguna untuk menyediakan informasi khusus Kubernetes untuk pencarian log, seperti -

  • Namespace Kubernetes
  • Nama pod Kubernetes
  • Nama container Kubernetes
  • Nama gambar Docker
  • Kubernetes UID

Menggunakan ELK Stack dan LogSpout

Tumpukan ELK termasuk Elasticsearch, Logstash, dan Kibana. Untuk mengumpulkan dan meneruskan log ke platform logging, kami akan menggunakan LogSpout (meskipun ada opsi lain seperti FluentD).

Kode berikut menunjukkan bagaimana menyiapkan ELK cluster di Kubernetes dan membuat layanan untuk 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

Membuat Pengontrol Replikasi

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

Untuk Kibana, kami menyediakan URL Elasticsearch sebagai variabel lingkungan.

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

Kibana UI akan dapat dijangkau di port kontainer 5601 dan kombinasi host / Node Port yang sesuai. Saat Anda mulai, tidak akan ada data apa pun di Kibana (yang diharapkan karena Anda belum memasukkan data apa pun).