最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

全球消息!【踩坑】Debian编译安装Podman和Prometheus-podman-exporter

来源:博客园

这个月一直在折腾 Grafana,中途遇到了各种各样的问题这两天折腾得差不多了,才有空把遇到的问题写出来一方面做个记录,另一方面也当给想要折腾的小伙伴们踩踩坑估计最近会陆续写一系列 Grafana 相关的文章 (前提是不像以前一样动不动鸽几个月),欢迎关注ヾ(≧▽≦*)oGrafana 折腾日志


(相关资料图)

前几个月,我把服务器上的容器管理工具从 Docker 全部换成了Podman

所以搭完 Grafana 后,就开始思考怎么把 Podman 给添加上去

一通搜索后,在 Github 上找到了prometheus-podman-exporter这个项目

但在阅读安装说明时发现它只支持 Podman 4.x,而 Debian11 的 stable 源中的最近版本是3.0.1,没办法只能自己编译新版本了 ̄へ ̄

系统环境

本文中的内容都在以下环境中测试:

用户: root架构: X86_64系统: Debian 11.6(bullseye)内核: 6.0.11-x64v1-xanmod1

编译安装 Podman

准备工作

安装依赖

按照文档,首先要使用apt安装以下依赖:

其中golang因为版本太老,这里暂时忽略,稍候单独从官网安装

apt install \  btrfs-progs \  crun \  git \  go-md2man \  iptables \  libassuan-dev \  libbtrfs-dev \  libc6-dev \  libdevmapper-dev \  libglib2.0-dev \  libgpgme-dev \  libgpg-error-dev \  libprotobuf-dev \  libprotobuf-c-dev \  libseccomp-dev \  libselinux1-dev \  libsystemd-dev \  pkg-config \  uidmap

执行以下命令安装Golang 1.19.4(撰写本文时的最新版本):

cd /tmp && \wget -O go.linux-amd64.tar.gz https://go.dev/dl/go1.19.4.linux-amd64.tar.gz && \rm -rf /usr/local/go && \tar -C /usr/local -xzf go.linux-amd64.tar.gz && \echo "export PATH=$PATH:/usr/local/go/bin;" > /etc/profile.d/golang.sh && \. /etc/profile.d/golang.sh && \rm go.linux-amd64.tar.gz

检查依赖版本

如果你和我一样使用的是 Debian11.x,那么可以跳过这个的步骤

  • golang>= 1.16 :
    # 查看当前版本  go version
  • conmon官方说要尽可能新,这个大家自己看着办吧ヾ(•ω•`)o
    # 获取最新版本curl -s https://api.github.com/repos/containers/conmon/releases/latest  | grep ""tag_name":" | sed -E "s/.*"([^"]+)".*/\1/"# 查看当前版本conmon --version
  • runc>= 1.0.0-rc4 或 1.0.1 (本文中使用crun替代)
    # 查看当前版本runc --version

安装 CNI Plugins

这里是一个大坑,我当初看到is done by defaultno further configuration is needed就直接跳过去了,结果安装完尝试启动容器的时候就会报错,找了好久才发现是这里漏了>︿<

以下命令可以下载最新版本的 CNI Plugins 并添加到/opt/cni/bin下:

cd /tmp && \wget -O cni-plugins.tar.gz \https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-$(curl -s https://api.github.com/repos/containernetworking/plugins/releases/latest  | grep ""tag_name":" | sed -E "s/.*"([^"]+)".*/\1/").tgz && \tar -C /opt/cni/bin cni-plugins.tar.gz && \rm cni-plugins.tar.gz

编译 Podman

首先克隆源码存储库,并检出到最新的tag:

git clone https://github.com/containers/podman.git && \cd podman && \git checkout $(curl -s https://api.github.com/repos/containers/podman/releases/latest  | grep ""tag_name":" | sed -E "s/.*"([^"]+)".*/\1/")

以下为推荐的构建参数,更多选项参见编译文档:

make BUILDTAGS="selinux seccomp"

如果没有错误,执行以下命令安装:

sudo make install PREFIX=/usr

Bash 自动补全

执行以下命令开启自动补全:

podman completion -f /etc/bash_completion.d/podman bash

重启终端后就可以享受类似 Docker 的自动补全了

删除无用的包(可选)

如果磁盘空间紧张或者短时间内不会再次编译,可以酌情删除以下依赖:

apt autoremove libbtrfs-dev \  libc6-dev \  libdevmapper-dev \  libglib2.0-dev \  libprotobuf-dev \  libprotobuf-c-dev \  libseccomp-dev \  libselinux1-dev

编译安装 prometheus-podman-exporter

解决完 Podman 的版本问题,接下来就轮到 exporter 了

Github:containers/prometheus-podman-exporter

安装说明: install.md

编译

照例先安装依赖:

apt install -y libgpgme-dev libbtrfs-dev libdevmapper-dev libassuan-dev pkg-config

克隆仓库并进入:

git clone https://github.com/containers/prometheus-podman-exporter && \cd prometheus-podman-exporter

编译可执行文件:

make binary

安装

实测项目自带的make install没有什么效果,所以我参考 prometheus-node-exporter 进行了安装:

首先把可执行文件复制到/usr/bin下:

cp ./bin/prometheus-podman-exporter /usr/bin/

为了实现后台运行,我写了一份 service 文件 (当然还是抄的 node-exporter),保存到/lib/systemd/system/prometheus-podman-exporter.service中:

[Unit]Description=Prometheus exporter for PodmanDocumentation=https://github.com/containers/prometheus-podman-exporter[Service]Restart=on-failureUser=rootEnvironmentFile=/etc/default/prometheus-podman-exporterExecStart=/usr/bin/prometheus-podman-exporter $ARGSExecReload=/bin/kill -HUP $MAINPIDTimeoutStopSec=20sSendSIGKILL=no[Install]WantedBy=multi-user.target

它会从/etc/default/prometheus-podman-exporter中读取环境变量ARGS,并用作启动的参数

例如想开启所有收集器,可以这么写:

# /etc/default/prometheus-podman-exporterARGS="--collector.enable-all"

提示:更多命令行参数见这里

写入 service 文件后,记得先重新加载一遍 daemon:

systemctl daemon-reload

现在我们就可以使用systemctl来管理 prometheus-podman-exporter 啦:

# 开启systemctl start prometheus-podman-exporter# 停止systemctl stop prometheus-podman-exporter# 开机启动systemctl enable prometheus-podman-exporter

下期预告

Grafana 折腾日志-其二 适用于 prometheus-podman-exporter 的 Grafana 仪表盘

最后

不得不吐槽一句,一个 exporter 最高占用将近 40M 内存,对低配小鸡真的不友好ヽ(≧□≦)ノ

关键词: 自动补全 当前版本 系统环境