选择辅助容器还是另外拉起监控Pod?

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 选择辅助容器还是另外拉起监控Pod?

监控方案

方案一

对于一个 Pod 中只有一个业务容器的情况,可以考虑在该 Pod 中增加一个辅助容器,来完成对业务容器的监控。辅助容器可以使用各种监控工具的采集器,如Prometheus的exporter、ELK的filebeat、Zabbix的agent或者是自研的采集器等等,来收集业务容器的运行状态、性能指标和日志等信息,实现对业务容器的监控。在 Kubernetes 中,一个 Pod 中可以包含多个容器,每个容器可以共享同一个网络命名空间、存储卷和进程命名空间等资源。这意味着在同一个 Pod 中,辅助容器可以与业务容器共享相同的网络和存储,从而方便地监控业务容器。

方案二

第二个方案,也可以另外拉起一个监控 Pod,对业务 Pod 进行监控。这种方式可以将监控容器与业务容器分离,避免互相影响。同时,监控 Pod 可以独立部署和升级,不会影响业务容器的正常运行。不过,这种方式会增加部署和维护的复杂度,需要额外考虑容器之间的网络连接和数据传输等问题。

选择辅助容器还是另外拉起监控 Pod,取决于具体的情况和需求,需要根据实际情况进行选择和权衡。在本文中,业务POD里假设运行的是logstash,为了减少对业务POD的影响,采用了第二个方案。

在docker上测试logstash-exporter

  1. 拉取exporter镜像
docker pull alxrem/prometheus-logstash-exporter
  1. 拉起logstash容器
docker run --name logstash-container -d -it -p 9600:9600 logstash:7.13.2
  1. 拉起exporter容器
docker run -d -p 9198:9198 alxrem/prometheus-logstash-exporter -web.listen-address=":9198" -logstash.host=http://logstash-container -logstash.port=9600
  1. 访问
curl http://192.168.11.229:9198/metrics
  1. 推送到harbor
docker push 192.168.11.230/elk/prometheus-logstash-exporter:latest

之所以要在本地docker环境测试这个镜像,是为了搞清楚它的使用套路,比如有什么参数、启动方式等等,当在k8s部署的时候就会减少发懵的状态。

部署到K8S

继续上次的架构,这次是要对运行在K8S集群里的logstash pod进行监控,本架构中有2套不同配置的logstash。

记得在上一篇中,只讲了logstash里面的配置,但没有讲logstash的deployment,这次刚好补上,分享给大家。

  1. 创建和编辑logstash-deployment.yaml,添加以下内容:
apiVersion: v1
kind: Namespace
metadata:
  name: logstash
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash01
  namespace: logstash
spec:
  selector:
    matchLabels:
      k8s-app: logstash01
  replicas: 3
  template:
    metadata:
      labels:
        k8s-app: logstash01
    spec:
      containers:
      - name: logstash01
        image: 192.168.11.230/elk/logstash01:20230315v1
        ports:
          - containerPort: 9600
        resources:
          limits:
            cpu: 1
          requests:
            cpu: 1
      imagePullSecrets:
      - name: harborsecret
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash02
  namespace: logstash
spec:
  selector:
    matchLabels:
      k8s-app: logstash02
  replicas: 3
  template:
    metadata:
      labels:
        k8s-app: logstash02
    spec:
      containers:
      - name: logstash02
        image: 192.168.11.230/elk/logstash02:20230315v1
        ports:
          - containerPort: 9600
        resources:
          limits:
            cpu: 1
          requests:
            cpu: 1
      imagePullSecrets:
      - name: harborsecret
---
apiVersion: v1
kind: Service
metadata:
  name: logstash01-service
  namespace: logstash
spec:
  selector:
    k8s-app: logstash01
  ports:
    - name: jmx
      port: 9600
---
apiVersion: v1
kind: Service
metadata:
  name: logstash02-service
  namespace: logstash
spec:
  selector:
    k8s-app: logstash02
  ports:
    - name: jmx
      port: 9600
  1. 创建和编辑prometheus-logstash-exporter-deployment.yaml,添加以下内容:

这里是本文的重头戏,关于细节,自行深挖、理解、吸收。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-logstash01-exporter
  namespace: logstash
spec:
  replicas: 3
  selector:
    matchLabels:
      app: prometheus-logstash01-exporter
  template:
    metadata:
      labels:
        app: prometheus-logstash01-exporter
    spec:
      containers:
        - name: prometheus-logstash01-exporter
          image: 192.168.11.230/elk/prometheus-logstash-exporter:latest
          ports:
            - containerPort: 9198
          args:
            - -web.listen-address=:9198
            - -logstash.host=logstash01-service
            - -logstash.port=9600
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-logstash02-exporter
  namespace: logstash
spec:
  replicas: 3
  selector:
    matchLabels:
      app: prometheus-logstash02-exporter
  template:
    metadata:
      labels:
        app: prometheus-logstash02-exporter
    spec:
      containers:
        - name: prometheus-logstash02-exporter
          image: 192.168.11.230/elk/prometheus-logstash-exporter:latest
          ports:
            - containerPort: 9199
          args:
            - -web.listen-address=:9199
            - -logstash.host=logstash02-service
            - -logstash.port=9600
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus-logstash01-exporter-services
  namespace: logstash
spec:
  selector:
    app: prometheus-logstash01-exporter
  ports:
    - name: exporter-port
      nodePort: 30008
      port: 80
      protocol: TCP
      targetPort: 9198
  type: NodePort
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus-logstash02-exporter-services
  namespace: logstash
spec:
  selector:
    app: prometheus-logstash02-exporter
  ports:
    - name: exporter-port
      nodePort: 30009
      port: 80
      protocol: TCP
      targetPort: 9199
  type: NodePort

看最终成果


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
存储 消息中间件 容器
当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地协同工作和交互。
当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地协同工作和交互。
|
4月前
|
Kubernetes 开发者 容器
"Kubernetes的生死抉择:揭秘Pod容器重启策略如何决定应用命运的惊天大戏"
【8月更文挑战第20天】Kubernetes (k8s) 是一个强大的容器编排平台,其中Pod是最小的运行单元。Pod的重启策略确保服务连续性,主要有Always(总是重启)、OnFailure(失败时重启)和Never(从不重启)。默认策略为Always。根据不同场景,如Web服务、批处理作业或一次性任务,可以选择合适的策略。K8s还支持健康检查等高级机制来控制容器重启。合理配置这些策略对维护应用稳定性至关重要。
164 4
|
16天前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
16天前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
16天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
|
16天前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
3月前
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
|
4月前
|
消息中间件 Kubernetes 容器
在K8S中,同⼀个Pod的不同容器互相可以访问是怎么做到的?
在K8S中,同⼀个Pod的不同容器互相可以访问是怎么做到的?
|
4月前
|
存储 Kubernetes 数据中心
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
|
4月前
|
Kubernetes 前端开发 API
在K8S中,在容器内如何获取pod和namespace名字?
在K8S中,在容器内如何获取pod和namespace名字?
下一篇
无影云桌面