Kubernetes - 监控

监控是管理大型集群的关键组件之一.为此,我们提供了许多工具.

使用Prometheus进行监控

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

Prometheus有多个组件可以参与监控 :

  • 普罗米修斯 : 它是废弃和存储数据的核心组件.

  • Prometheus node explore : 获取主机级矩阵并将它们暴露给普罗米修斯.

  • Ranch-eye : 是 haproxy 并将 cAdvisor 统计数据公开给普罗米修斯.

  • Grafana  : 去;可视化数据.

  • InfuxDB : 时间序列数据库专门用于存储来自牧场主的数据.

  • Prom-ranch-exporter : 它是一个简单的node.js应用程序,它有助于向Rancher服务器查询服务堆栈的状态.

使用Prometheus进行监控

Sematext Docker代理

这是一个支持Docker的现代指标,事件和日志收集代理.它在每个Docker主机上作为一个小容器运行,并为所有群集节点和容器收集日志,指标和事件.如果核心服务部署在Docker容器中,它会发现所有容器(一个pod可能包含多个容器),包括Kubernetes核心服务的容器.部署完成后,所有日志和指标都可立即使用.

将代理部署到节点

Kubernetes提供DeamonSets,确保添加pod到群集.

配置SemaText Docker代理

它是通过环境变量配置的.

  • 在 apps.sematext.com

  • 创建"Docker"类型的SPM应用程序以获取SPM App令牌. SPM App将保留您的Kubernetes性能指标和事件.

  • 创建Logsene应用程序以获取Logsene应用程序令牌. Logsene应用程序将保存您的Kubernetes日志.

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

    • 获取最新的sematext-agent-daemonset.yml(原始纯文本)模板(如下所示).

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

    • 用SPM和Logsene应用程序令牌替换SPM_TOKEN和LOGSENE_TOKEN占位符.

创建DaemonSet对象

apiVersion: extensions/v1beta1kind: DaemonSetmetadata:   name: sematext-agentspec:   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代理Docker

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

Kubernetes Log

Kubernetes容器的日志不多与Docker容器日志不同.但是,Kubernetes用户需要查看已部署的pod的日志.因此,让Kubernetes特定信息可用于日志搜索非常有用,例如 :

  • Kubernetes namespace

  • Kubernetes pod名称

  • Kubernetes容器名称

  • Docker图像名称

  • Kubernetes UID

使用ELK Stack和LogSpout

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

以下代码显示如何在Kubernetes上设置ELK集群和为ElasticSearch创��服务 :

apiVersion: v1kind: Servicemetadata:   name: elasticsearch   namespace: elk   labels:      component: elasticsearchspec:   type: LoadBalancer   selector:      component: elasticsearch   ports:   - name: http      port: 9200      protocol: TCP   - name: transport      port: 9300      protocol: TCP

创建复制控制器

apiVersion: v1kind: ReplicationControllermetadata:   name: es   namespace: elk   labels:      component: elasticsearchspec:   replicas: 1   template:      metadata:         labels:            component: elasticsearchspec:serviceAccount: elasticsearchcontainers:   - 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: 9300volumeMounts:- mountPath: /data   name: storagevolumes:   - name: storage      emptyDir: {}

Kibana URL

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

- name: KIBANA_ES_URLvalue: "http://elasticsearch.elk.svc.cluster.local:9200"- name: KUBERNETES_TRUST_CERTvalue: "true"

Kibana UI可以在容器端口5601和相应的主机/节点端口组合中访问.当你开始时,Kibana中将没有任何数据(由于你没有推送任何数据,这是预期的.)

免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除

咨询热线(9:00 - 18:00)
0755 - 29812418
微信公众号二维码
微信公众号二维码
微信公众号
返回顶部