- Kubernetes 教程
- Kubernetes - 主页
- Kubernetes - 概述
- Kubernetes - 架构
- Kubernetes - 设置
- Kubernetes - 图像
- Kubernetes - 工作
- Kubernetes - 标签和选择器
- Kubernetes - 命名空间
- Kubernetes-节点
- Kubernetes-服务
- Kubernetes-Pod
- Kubernetes - 复制控制器
- Kubernetes - 副本集
- Kubernetes - 部署
- Kubernetes - 卷
- Kubernetes - 秘密
- Kubernetes - 网络策略
- 高级 Kubernetes
- Kubernetes-API
- Kubernetes-Kubectl
- Kubernetes - Kubectl 命令
- Kubernetes - 创建应用程序
- Kubernetes - 应用程序部署
- Kubernetes - 自动缩放
- Kubernetes - 仪表板设置
- Kubernetes - 监控
- Kubernetes 有用资源
- Kubernetes - 快速指南
- Kubernetes - 有用的资源
- Kubernetes - 讨论
Kubernetes - 监控
监控是管理大型集群的关键组件之一。为此,我们有很多工具。
使用普罗米修斯进行监控
它是一个监控和警报系统。它是在 SoundCloud 构建的,并于 2012 年开源。它可以很好地处理多维数据。
Prometheus 有多个组件参与监控 -
Prometheus - 它是废弃和存储数据的核心组件。
Prometheus 节点探索- 获取主机级别矩阵并将其公开给 Prometheus。
Ranch-eye - 是一个haproxy,并将cAdvisor统计数据公开给 Prometheus。
Grafana - 数据可视化。
InfuxDB - 时间序列数据库,专门用于存储来自牧场主的数据。
Prom-ranch-exporter - 这是一个简单的node.js应用程序,有助于查询Rancher服务器的服务堆栈状态。
Sematext Docker 代理
它是一个现代的 Docker 感知指标、事件和日志收集代理。它作为每个 Docker 主机上的微型容器运行,并收集所有集群节点和容器的日志、指标和事件。它会发现所有容器(一个 Pod 可能包含多个容器),包括 Kubernetes 核心服务的容器(如果核心服务部署在 Docker 容器中)。部署后,所有日志和指标立即可用。
将代理部署到节点
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 Pod 名称
- 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网址
对于 Kibana,我们提供 Elasticsearch URL 作为环境变量。
- name: KIBANA_ES_URL value: "http://elasticsearch.elk.svc.cluster.local:9200" - name: KUBERNETES_TRUST_CERT value: "true"
Kibana UI 可通过容器端口 5601 和相应的主机/节点端口组合访问。当您开始时,Kibana 中不会有任何数据(这是预期的,因为您尚未推送任何数据)。