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

简介: 选择辅助容器还是另外拉起监控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

看最终成果


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
12月前
|
人工智能 Prometheus 监控
容器化AI模型的监控与治理:确保模型持续稳定运行
在前几篇文章中,我们探讨了AI模型的容器化部署及构建容器化机器学习流水线。然而,将模型部署到生产环境只是第一步,更重要的是确保其持续稳定运行并保持性能。为此,必须关注容器化AI模型的监控与治理。 监控和治理至关重要,因为AI模型在生产环境中面临数据漂移、概念漂移、模型退化和安全风险等挑战。全面的监控涵盖模型性能、数据质量、解释性、安全性和版本管理等方面。使用Prometheus和Grafana可有效监控性能指标,而遵循模型治理最佳实践(如建立治理框架、定期评估、持续改进和加强安全)则能进一步提升模型的可信度和可靠性。总之,容器化AI模型的监控与治理是确保其长期稳定运行的关键。
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
259 1
【赵渝强老师】Kubernetes中Pod的基础容器
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
267 1
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
211 1
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
287 1
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
842 1
|
消息中间件 Kubernetes 容器
在K8S中,同⼀个Pod的不同容器互相可以访问是怎么做到的?
在K8S中,同⼀个Pod的不同容器互相可以访问是怎么做到的?