不背锅运维:享一个具有高可用性和可伸缩性的ELK架构实战案例

监控方案

方案一

对于一个 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

看最终成果

图片

图片
本文转载于WX公众号:不背锅运维(喜欢的盆友关注我们):https://mp.weixin.qq.com/s/9CoMoaTux8T6edSEx3Blew

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我将为您详细介绍一个运维工程师常用的 Jenkins 和 GitLab 项目,包括项目的名称、描述、使用场景、配置方法和运行流程等方面的内容。 1. 项目名称:DevOpsPipeline 2. 项目描述:该项目是一个基于 Jenkins 和 GitLab 的 DevOps 自动化流水线,用于管理和协调多个开发团队的代码变更,并确保这些变更能够顺利地部署到生产环境中。 3. 使用场景: - 代码管理:使用 GitLab 托管代码仓库,并使用 Jenkins 进行持续集成和持续交付。 - 构建:使用 Jenkins 构建工具进行应用程序的编译和打包,生成可执行文件和 Docker 镜像。 - 测试:使用 Jenkins 调用测试工具进行自动化测试,包括单元测试、集成测试、性能测试等。 - 部署:使用 Jenkins 部署工具将应用程序部署到测试环境、预发布环境和生产环境中。 4. 项目配置: - GitLab:创建一个 GitLab 代码仓库,并将代码推送到该仓库中。 - Jenkins:创建一个 Jenkins 项目,配置 Jenkinsfile 文件,定义构建、测试和部署的流程,并设置触发器和构建参数等。 - 测试工具:根据项目需要选择合适的测试工具,如 JUnit、Selenium、JMeter 等,并在 Jenkins 中安装和配置相应的插件和工具。 - 部署工具:根据项目需要选择合适的部署工具,如 Ansible、Docker、Kubernetes 等,并在 Jenkins 中安装和配置相应的插件和工具。 5. 项目运行流程: - 提交代码:开发人员将代码推送到 GitLab 代码仓库中。 - 自动化构建:Jenkins 检测到代码变更,自动触发构建流程,编译应用程序并生成可执行文件和 Docker 镜像。 - 自动化测试:Jenkins 调用测试工具进行自动化测试,包括单元测试、集成测试、性能测试等。 - 自动化部署:Jenkins 调用部署工具将应用程序部署到测试环境、预发布环境和生产环境中。 具体实现过程如下: 1)在 GitLab 中创建一个空项目,并将项目代码上传到该项目中。 2)在 Jenkins 中创建一个新的 Pipeline 项目,将 GitLab 项目的仓库地址添加到 Jenkinsfile 文件中,定义了一系列的 stages,例如代码拉取、构建、测试、部署等,如下所示: ``` pipeline { agent any stages { stage('Code Checkout') { steps { git branch: 'master', url: 'https://gitlab.example.com/username/project.git' } } stage('Build') { steps { sh 'mvn clean package' } } stage('Test') { steps { sh 'mvn test' } } stage('Deploy') { steps { sh 'ansible-playbook deploy.yml' } } } } ``` 3)在 Jenkins 中安装并配置相应的插件和工具,如 Maven、JUnit、Ansible 等。 4)在 Jenkins 中配置触发器,可以选择定时触发、代码变更触发、手动触发等方式。 5)在 Jenkins 中配置构建参数,如构建环境、构建版本等。 6)运行 Jenkins Pipeline 项目,Jenkins 将自动拉取 GitLab 项目中的代码,执行构建、测试和部署的操作,并生成构建报告和部署日志。 总之,该项目的目的是为了实现 DevOps 自动化流程,减少人工干预,提高应用程序的发布速度和质量,从而使开发团队能够更加专注于应用程序的开发和创新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值