环境

Ip主机名cpu内存
192.168.10.11master014c6G
192.168.10.12node14c6G
192.168.10.13node24c6G
192.168.10.100nfs2c2g
组件版本
UbuntuUbuntu 26.04 server
containerdv2 2.2.2
Kubernetesv1.36.1
victoria-metrics-k8s-stack0.87.0
victoriametrics-logs-datasource0.30.1

部署过程

一、把k8s组件默认的127.0.0.1监听改为0.0.0.0,使监控能访问到

1.备份原文件
mkdir -p /root/k8s-bak
cp -r /etc/kubernetes/manifests/* /root/k8s-bak/
ls /root/k8s-bak/

在这里插入图片描述

2.用sed修改其配置文件
sed -i 's/--bind-address=127.0.0.1/--bind-address=0.0.0.0/' /etc/kubernetes/manifests/kube-controller-manager.yaml
sed -i 's/--bind-address=127.0.0.1/--bind-address=0.0.0.0/' /etc/kubernetes/manifests/kube-scheduler.yaml
sed -i 's#--listen-metrics-urls=http://127.0.0.1:2381#--listen-metrics-urls=http://0.0.0.0:2381#' /etc/kubernetes/manifests/etcd.yaml
# 等待半分钟
kubectl -n kube-system get pod -l tier=control-plane -o wide

静态pod全起来即可
注:如果为多master群集,每个带有etcd的节点都需要改,且需要等第一个etcd起来再改第二个,以此类推
在这里插入图片描述

3.修改kube-proxy
kubectl -n kube-system get cm kube-proxy -o yaml \
  | sed 's/metricsBindAddress: ""/metricsBindAddress: "0.0.0.0:10249"/' \
  | kubectl apply -f -

kubectl -n kube-system rollout restart daemonset kube-proxy
4.验证配置
for x in "https://192.168.10.11:10257" "https://192.168.10.11:10259"; do
  echo -n "$x -> "; curl -k -o /dev/null -s -w "%{http_code}\n" $x/metrics
done
curl http://192.168.10.11:2381/metrics  -o /dev/null -s -w "etcd -> %{http_code}\n"
curl http://192.168.10.11:10249/metrics -o /dev/null -s -w "kube-proxy -> %{http_code}\n"

返回结果是200或者403就行,都代表通了
在这里插入图片描述

二、部署victoria-metrics-k8s-stack

1.添加仓库
helm repo add vm https://victoriametrics.github.io/helm-charts/
helm repo update
2.下载grafana插件

注:grafana想要查看收集到的日志需要安装victoriametrics-logs-datasource插件,但是服务器代理/contrainerd代理/容器内环境变量设置代理均拉不下来,所以只能上传到服务器内然后让grafana拉取本地服务器内的插件包
浏览器访问

https://github.com/VictoriaMetrics/victorialogs-datasource/releases/latest

目前最新版本是v0.30.1,下载zip包后传到服务器(192.168.10.11)上的/tmp目录下
在这里插入图片描述

3.在/tmp目录上起个临时 http 服务分发

这个页面不要关,后面起个新的连接,pod起来后就可以关闭了

cd /tmp/
chmod 777 victoriametrics-logs-datasource-v0.30.1.zip
python3 -m http.server 8000

在这里插入图片描述

4.验证

在其他机器上看能不能访问到
200就代表通了

 curl -I http://192.168.10.11:8000/victoriametrics-logs-datasource-v0.30.1.zip

在这里插入图片描述

5.编写value.yaml文件

vim value.yaml

# =============================================================================
# victoria-metrics-k8s-stack —— 生产配置(全集群版 HA)
# 集群标识: cluster=sit    存储类: nfs-client
# 单 master + 单 etcd(192.168.10.11)
# 【重点】所有数据存储组件均为集群版多副本,无单点:
#   - 指标: vmcluster (vmstorage×2 / vmselect×2 / vminsert×2, replicationFactor=2)
#   - 日志: vlcluster (vlstorage×2 / vlselect×2 / vlinsert×2)
# =============================================================================

# ======================== 指标存储:集群版 HA(vmcluster)=====================
vmsingle:
  enabled: false                         # ★单机版强制关闭,杜绝单点

vmcluster:
  enabled: true
  spec:
    retentionPeriod: "15d"
    replicationFactor: 2                  # 每份数据写2副本,挂1个storage不丢数据

    # --- 存储层:分片存储,每副本独立PVC(StatefulSet)---
    vmstorage:
      replicaCount: 2                     # ★集群:2副本,各自20Gi独立PVC
      storageDataPath: /vm-data
      storage:
        volumeClaimTemplate:
          spec:
            storageClassName: nfs-client
            accessModes: ["ReadWriteOnce"]
            resources:
              requests:
                storage: 20Gi
      resources:
        requests: { cpu: "250m", memory: 512Mi }
        limits:   { cpu: "1",    memory: 1Gi }

    # --- 查询层:多副本 ---
    vmselect:
      replicaCount: 2                     # ★集群:2副本
      cacheMountPath: /select-cache
      storage:
        volumeClaimTemplate:
          spec:
            storageClassName: nfs-client
            accessModes: ["ReadWriteOnce"]
            resources:
              requests:
                storage: 2Gi
      resources:
        requests: { cpu: "100m", memory: 256Mi }
        limits:   { cpu: "500m", memory: 512Mi }

    # --- 写入层:多副本 ---
    vminsert:
      replicaCount: 2                     # ★集群:2副本
      resources:
        requests: { cpu: "100m", memory: 128Mi }
        limits:   { cpu: "500m", memory: 256Mi }

# ============================ 采集器 vmagent ================================
# externalLabels: 给本集群采集的所有指标统一打 cluster=sit 标识
vmagent:
  enabled: true
  spec:
    externalLabels:
      cluster: sit                        # ★集群数据标识
    resources:
      requests: { cpu: "100m", memory: 256Mi }
      limits:   { cpu: "500m", memory: 512Mi }

# ------------------- 控制面组件抓取(endpoints 填具体 IP)-------------------
kubeApiServer:
  enabled: true
kubelet:
  enabled: true

kubeControllerManager:
  enabled: true
  endpoints:
    - 192.168.10.11
  service:
    enabled: true
    port: 10257
    targetPort: 10257
  vmScrape:
    spec:
      endpoints:
        - port: http-metrics
          scheme: https
          bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
          tlsConfig:
            insecureSkipVerify: true

kubeScheduler:
  enabled: true
  endpoints:
    - 192.168.10.11
  service:
    enabled: true
    port: 10259
    targetPort: 10259
  vmScrape:
    spec:
      endpoints:
        - port: http-metrics
          scheme: https
          bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
          tlsConfig:
            insecureSkipVerify: true

kubeEtcd:
  enabled: true
  endpoints:
    - 192.168.10.11
  service:
    enabled: true
    port: 2381
    targetPort: 2381
  vmScrape:
    spec:
      endpoints:
        - port: http-metrics
          scheme: http

kubeProxy:
  enabled: true
coreDns:
  enabled: true

# ---------------------------- 附属采集器 ------------------------------------
kube-state-metrics:
  enabled: true
prometheus-node-exporter:
  enabled: true

# ---------------------------- 告警 -----------------------------------------
vmalert:
  enabled: true
alertmanager:
  enabled: true

# ---------------------------- Grafana --------------------------------------
grafana:
  enabled: true
  adminPassword: "Admin@123456"
  env: #这里就是之前起的http服务分发
    GF_INSTALL_PLUGINS: "http://192.168.10.11:8000/victoriametrics-logs-datasource-v0.30.1.zip;victoriametrics-logs-datasource"
    GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS: "victoriametrics-logs-datasource"
  persistence:
    enabled: true
    storageClassName: nfs-client
    size: 5Gi

# ======================== 日志存储:集群版 HA(vlcluster)=====================
vlsingle:
  enabled: false                         # ★单机版强制关闭,杜绝单点

vlcluster:
  enabled: true
  spec:
    retentionPeriod: "15d"
    # --- 日志存储层:多副本 + 独立PVC ---
    vlstorage:
      replicaCount: 2                     # ★集群:2副本
      storage:
        volumeClaimTemplate:
          spec:
            storageClassName: nfs-client
            accessModes: ["ReadWriteOnce"]
            resources:
              requests:
                storage: 20Gi
      resources:
        requests: { cpu: "100m", memory: 256Mi }
        limits:   { cpu: "500m", memory: 512Mi }
    # --- 日志查询层:多副本 ---
    vlselect:
      replicaCount: 2                     # ★集群:2副本
    # --- 日志写入层:多副本 ---
    vlinsert:
      replicaCount: 2                     # ★集群:2副本

# ---------------------------- 日志采集 vlagent ------------------------------
vlagent:
  enabled: true
  spec:
    k8sCollector:
      enabled: true
6.部署
helm install vmks vm/victoria-metrics-k8s-stack -f value.yaml   -n monitor --create-namespace

三、验证

1. 把grafana的svc改成nodeport模式
kubectl get svc -A | grep grafana
kubectl edit svc -n monitor       vmks-grafana

把ClusterIP改成NodePort,注意大小写
在这里插入图片描述
查看随机的端口

kubectl get svc -A | grep grafana

在这里插入图片描述
这里是30723

2.浏览器访问

k8s节点+端口
我这里是192.168.10.11:30723
账号admin,密码是自己设置的那个
在这里插入图片描述
这里可以改成中文
在这里插入图片描述
随便查看几个仪表盘

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
etcd
在这里插入图片描述

以及日志
在这里插入图片描述

更多推荐