📜  Kubernetes-监控

📅  最后修改于: 2020-11-01 04:18:41             🧑  作者: Mango


监视是管理大型集群的关键组件之一。为此,我们有许多工具。

用普罗米修斯进行监测

这是一个监视和警报系统。它建立在SoundCloud上,于2012年开源。它可以很好地处理多维数据。

Prometheus有多个组件可以参与监视-

  • Prometheus-它是抓取和存储数据的核心组件。

  • Prometheus节点浏览-获取主机级别矩阵,并将其公开给Prometheus。

  • 牧场眼睛-是haproxy ,并向Prometheus展示cAdvisor的统计数据。

  • Grafana-数据可视化。

  • InfuxDB-时间序列数据库,专门用于存储牧场主的数据。

  • Prom-ranch-exporter-这是一个简单的node.js应用程序,可帮助查询Rancher服务器的服务堆栈状态。

用普罗米修斯进行监测

Sematext Docker代理

它是现代的Docker感知指标,事件和日志收集代理。它作为每个Docker主机上的微型容器运行,并收集所有集群节点和容器的日志,指标和事件。如果核心服务部署在Docker容器中,它将发现所有容器(一个容器可能包含多个容器),包括用于Kubernetes核心服务的容器。部署后,所有日志和指标均可立即使用。

将代理部署到节点

Kubernetes提供了DeamonSets,以确保将Pod添加到集群中。

配置SemaText Docker代理

通过环境变量进行配置。

  • 如果您还没有免费的帐户,请访问apps.sematext.com

  • 创建类型为“ Docker”的SPM应用程序以获取SPM应用程序令牌。 SPM应用程序将保存您的Kubernetes性能指标和事件。

  • 创建一个Logsene应用以获得Logsene应用令牌。 Logsene应用程序将保存您的Kubernetes日志。

  • 如下所示,在DaemonSet定义中编辑LOGSENE_TOKEN和SPM_TOKEN的值。

    • 抓住最新的sematext-agent-daemonset.yml(原始纯文本)模板(也如下所示)。

    • 将其存储在磁盘上的某个位置。

    • 将SPM_TOKEN和LOGSENE_TOKEN占位符替换为您的SPM和Logsene应用令牌。

创建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

使用kubectl运行Sematext Agent Docker

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

Kubernetes日志

Kubernetes容器的日志与Docker容器日志没有太大区别。但是,Kubernetes用户需要查看已部署的Pod的日志。因此,将特定于Kubernetes的信息用于日志搜索非常有用,例如-

  • Kubernetes命名空间
  • Kubernetes荚名称
  • Kubernetes容器名称
  • Docker映像名称
  • Kubernetes UID

使用ELK Stack和LogSpout

ELK堆栈包括Elasticsearch,Logstash和Kibana。为了收集日志并将日志转发到日志记录平台,我们将使用LogSpout(尽管还有其他选项,例如FluentD)。

以下代码显示了如何在Kubernetes上设置ELK集群并为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

创建复制控制器

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: {}

Kibana URL

对于Kibana,我们提供Elasticsearch URL作为环境变量。

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

将在容器端口5601和相应的主机/节点端口组合处访问Kibana UI。开始时,Kibana中将没有任何数据(因为您没有推送任何数据,所以可以预期)。