Prometheus v3.2.1 离线部署方式
通过helm部署prometheus会自动部署Node-expoter只需要添加prometheus的抓取规则!!
删除: 清除之前安装的 Prometheus 如果你之前已经安装了 Prometheus,需要清除原有的 Prometheus 安装,确保新的安装不受干扰。可以使用 helm uninstall 来卸载 Prometheus。
helm uninstall prometheus --namespace <your-namespace>
如果你不记得安装时使用的命名空间,可以先列出所有命名空间:
kubectl get namespaces
1.预备工作:准备 Helm Chart 和镜像
1.1 在外网环境中下载 Prometheus Helm Chart 和相关镜像
在外网环境中拉取 Prometheus 镜像(v3.2.1)
拉取 Prometheus 3.2.1 镜像并保存为 tar 文件:
docker pull prom/prometheus:v3.2.1 docker save prom/prometheus:v3.2.1 -o prometheus-v3.2.1.tar
同样,如果你还需要拉取其他镜像(如 Alertmanager、Prometheus Operator),也可以执行类似的操作:
拉取 Alertmanager 镜像:
docker pull prom/alertmanager:v0.21.0 docker save prom/alertmanager:v0.21.0 -o alertmanager-v0.21.0.tar
拉取 Prometheus Operator 镜像:
docker pull quay.io/coreos/prometheus-operator:v0.38.1 docker save quay.io/coreos/prometheus-operator:v0.38.1 -o prometheus-operator-v0.38.1.tar
下载 Prometheus Helm Chart
在外网环境中,首先添加 Prometheus Helm 仓库并拉取 Helm Chart:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm fetch prometheus-community/kube-prometheus-stack --version 17.0.0 --untar
这样,你就会在当前目录下得到一个 kube-prometheus-stack 文件夹,它包含了所有 Helm Chart 的文件。
1.2 将文件拷贝到内网环境
将以下文件拷贝到内网环境:
镜像 tar 文件: prometheus-v3.2.1.tar,alertmanager-v0.21.0.tar,prometheus-operator-v0.38.1.tar
Prometheus Helm Chart 文件夹: kube-prometheus-stack
可以使用 USB 驱动、局域网文件共享、SFTP 等方式将文件传输到内网。
2.在内网环境中加载镜像
在内网环境中,你需要将上面下载并传输的镜像加载到每个 Kubernetes 节点上。
加载 Prometheus 镜像 docker load -i prometheus-v3.2.1.tar 加载 Alertmanager 镜像 docker load -i alertmanager-v0.21.0.tar 加载 Prometheus Operator 镜像 docker load -i prometheus-operator-v0.38.1.tar 确保每个 Kubernetes 节点都加载了这些镜像,尤其是在多节点环境下。
3.配置 Helm 使用本地镜像
修改 values.yaml 文件,以便 Helm 使用你已经加载到内网环境的镜像。
打开 kube-prometheus-stack 文件夹中的 values.yaml,修改镜像部分指向本地镜像。以下是一个示例:
prometheus:image:repository: prom/prometheustag: v3.2.1pullPolicy: IfNotPresent # 如果内网环境已加载镜像,这样 Helm 会避免从外网拉取镜像 alertmanager:image:repository: prom/alertmanagertag: v0.21.0pullPolicy: IfNotPresent prometheusOperator:image:repository: quay.io/coreos/prometheus-operatortag: v0.38.1pullPolicy: IfNotPresent
4.安装 Helm Chart
确保你已经安装了 Helm,并且 Kubernetes 环境已经配置好。然后进入 kube-prometheus-stack 文件夹(即你下载并解压的 Helm Chart 目录):
cd /path/to/kube-prometheus-stack 安装 Prometheus Stack,使用修改后的 values.yaml 文件: helm install prometheus ./kube-prometheus-stack -f values.yaml --namespace <your-namespace> --create-namespace helm install prometheus ./kube-prometheus-stack -f D:\KTKJ\Prometheus\kube-prometheus-stack\values.yaml --namespace monitoring --create-namespace 如果你已经安装过 Prometheus,可以使用 helm upgrade 命令来更新: helm upgrade prometheus ./kube-prometheus-stack -f values.yaml --namespace <your-namespace> helm upgrade prometheus ./kube-prometheus-stack -f D:\KTKJ\Prometheus\kube-prometheus-stack\values.yaml --namespace monitoring --set prometheus-node-exporter.enabled=false
5.验证安装
安装完成后,可以通过以下方式验证 Prometheus 是否安装成功:
5.1 检查 Pods 状态
使用 kubectl get pods 命令查看所有 Pods 是否正常运行:
kubectl get pods -n <your-namespace> 确保 prometheus-operated、alertmanager 和其他相关 Pods 都处于 Running 状态。
5.2 访问 Prometheus Web UI
使用 kubectl port-forward 将 Prometheus 的 Web UI 映射到本地端口:
kubectl port-forward -n <your-namespace> svc/prometheus-operated 9090:9090 然后在浏览器中访问 http://localhost:9090 来查看 Prometheus Web UI。
5.3 查看 Prometheus 日志
如果 Prometheus 没有正常启动,可以查看其日志以便调试:
kubectl logs -n <your-namespace> <prometheus-pod-name> 总结 这是在 没有外网访问的内网环境 中安装 Prometheus 3.2.1 的完整步骤:
在外网环境中:
下载 Prometheus 镜像、Alertmanager 镜像、Prometheus Operator 镜像,并保存为 tar 文件。
下载 Prometheus Helm Chart。
将文件传输到内网环境:
通过 USB 或其他方式将下载的文件传输到内网。
在内网环境中:
使用 docker load 命令加载所有 Docker 镜像。
修改 Helm Chart 中的 values.yaml 文件,指向本地镜像。
使用 Helm 安装 Prometheus。
验证:
使用 kubectl get pods 检查 Pods 是否正常运行。
使用 kubectl port-forward 访问 Prometheus Web UI。
查看日志以排除潜在问题。
这样,你就可以在没有外网的情况下成功部署并运行 Prometheus。
-----------------------------------------------------------问题处理------------------------------------------------------
更改yaml配置文件: nodeExporter: image: repository: <your-registry>/prom/node-exporter tag: v1.3.1 我的yaml文件没有这些信息,我要新增嘛?怎么新增?
ChatGPT 说: 是的,你需要在 values.yaml 文件中 新增 nodeExporter 的配置,来指定使用你私有镜像仓库中的镜像。如果你的 values.yaml 文件没有相关的 nodeExporter 配置,你可以手动添加这一部分。
步骤:如何新增 nodeExporter 镜像配置 找到 values.yaml 文件: 通常,values.yaml 文件位于你通过 Helm 安装的 Prometheus chart 包中。你可以在 kube-prometheus-stack Chart 中找到该文件。
在 values.yaml 文件中新增 nodeExporter 配置: 你可以按照以下方式添加或修改 nodeExporter 部分,确保 Kubernetes 使用你的私有仓库镜像。
nodeExporter: image: repository: <your-registry>/prom/node-exporter # 修改为你私有仓库的地址 tag: v1.3.1 # 修改为你需要的镜像标签 pullPolicy: IfNotPresent # 如果你已经将镜像加载到本地节点,设置为 IfNotPresent 避免重新拉取 repository:这里是你私有仓库的地址,比如:<your-registry>/prom/node-exporter。
tag:这里是你需要的镜像版本,例如 v1.3.1。
pullPolicy:建议设置为 IfNotPresent,这样 Kubernetes 在没有找到本地镜像时才会尝试拉取。设置为 Always 会强制每次启动时都拉取镜像。
如果没有找到 nodeExporter 配置: 如果你的 values.yaml 中根本没有 nodeExporter 相关的配置,不用担心,你只需将上面这段代码添加到文件中,放到适当的位置。通常,nodeExporter 配置会在 prometheus 配置部分下:
prometheus: nodeExporter: image: repository: <your-registry>/prom/node-exporter tag: v1.3.1 pullPolicy: IfNotPresent 如果没有该部分,可以直接加在文件的最下面,确保其格式正确。
保存并重新安装 Prometheus: 修改完 values.yaml 文件后,重新执行 Helm 安装或升级命令,确保新配置生效:
helm upgrade --install prometheus ./kube-prometheus-stack -f values.yaml --namespace <your-namespace> 总结: 是的,你需要新增 nodeExporter 配置,在 values.yaml 文件中明确指定 nodeExporter 镜像的位置,尤其是在内网环境中需要使用私有镜像仓库时。
修改后的配置示例:
nodeExporter: image: repository: <your-registry>/prom/node-exporter tag: v1.3.1 pullPolicy: IfNotPresent 这样配置之后,Prometheus 会使用你私有镜像仓库中的 node-exporter 镜像,而不会尝试从外部拉取镜像。如果其他组件(如 Prometheus、Alertmanager 等)也需要这样配置,记得按相同方式修改。
从输出中可以看到, docker-desktop 节点的操作系统标签是 kubernetes.io/os=linux,并没有 kubernetes.io/os=windows 的标签。这意味着你的集群中没有标记为 Windows 的节点,所有节点都是 Linux 节点。 解决方案: 如果你希望在 Windows 上运行 node-exporter,你需要在 Kubernetes 集群中引入 Windows 节点。以下是一些步骤和选项来解决这个问题:
-
确保集群支持 Windows 节点 目前,Windows 节点和 Linux 节点通常可以混合部署,但是你需要确保 Kubernetes 集群正确配置以支持 Windows 节点。Docker Desktop 默认情况下只包含 Linux 节点,因此你需要额外的步骤来启用 Windows 节点。
-
在 Kubernetes 集群中加入 Windows 节点 如果你希望使用 Windows 节点,你需要确保你有一个 Windows 节点可以加入到集群。你可以设置一个支持 Windows 的 Kubernetes 节点环境。以下是一般的步骤:
在 Windows 上安装 Kubernetes 节点:
你需要在一个支持 Windows 节点的环境中安装 Kubernetes。你可以使用 Windows Server 2019 或 Windows 10 版本,确保启用了 Hyper-V 和容器支持。
如果你使用的是 Docker Desktop,可以启用 Windows 容器模式并将其加入到集群中。要实现这一点,你需要在 Docker Desktop 设置中切换到 "Windows Containers" 模式。
将 Windows 节点加入 Kubernetes 集群:
在安装并配置好 Windows 节点后,你可以通过 kubeadm 或其他 Kubernetes 管理工具将 Windows 节点加入到集群中。Windows 节点将自动带有 kubernetes.io/os=windows 标签。
-
修改 DaemonSet 配置 一旦你的 Windows 节点被成功加入到 Kubernetes 集群并且标记为 kubernetes.io/os=windows,你可以更新 DaemonSet 来调度 node-exporter 到 Windows 节点。
如前所述,使用以下命令编辑 DaemonSet:
kubectl edit daemonset prometheus-prometheus-node-exporter -n monitoring 然后将 nodeSelector 更新为:
nodeSelector: kubernetes.io/os: windows
-
验证 DaemonSet 部署 完成这些操作后,使用以下命令检查 node-exporter 是否在 Windows 节点上正确运行:
kubectl get daemonsets -n monitoring 确保 node-exporter 的 DESIRED 和 CURRENT 都显示为 1,并且它被调度到 Windows 节点上。
总结: 你的当前节点(docker-desktop)是 Linux 节点,因此 node-exporter 只会在 Linux 节点上运行。
要在 Windows 上运行 node-exporter,需要确保集群中有 Windows 节点,并将其正确标记为 kubernetes.io/os=windows。
一旦 Windows 节点加入集群,可以修改 DaemonSet 的配置,将 node-exporter 调度到 Windows 节点上。
kubectl edit daemonset prometheus-prometheus-node-exporter -n monitoring nodeSelector: kubernetes.io/os: windows
-- kubectl delete daemonset node-exporter -n monitoring -- kubectl apply -f D:\KTKJ\Prometheus\node-exporter-daemonset.yaml -- kubectl get daemonset node-exporter-daemonset -n monitoring