這是本文件的舊版!


在 K3s 環境透過 Rancher 建立 LibreNMS

  • 採用 K3s 環境已經定義好的
    • ingress + tls → librenms.k3s.ichiayi.com
    • nfs storage
  • 使用官方提供的 helm chart 進行安裝配置
  1. 加入 helm repo

    helm repo add librenms https://www.librenms.org/helm-charts
    helm repo update

  2. 產生 appkey Exp.

    $ echo "base64:$(head -c 32 /dev/urandom | base64)"
    base64:SkGsCIF2TZtQZx8swneh80I1sHQ3AYRD8UCkeze70Bs=

  3. 設定配置檔 librenms-values.yaml
    # ========================================
    # 完整、可直接使用的 librenms-values.yaml
    # ========================================
    global:
      storageClass: "nfs-client"      # 你的 NFS provisioner 名稱
     
    # ---------- 主要 LibreNMS ----------
    librenms:
      appkey: "base64:SkGsCIF2TZtQZx8swneh80I1sHQ3AYRD8UCkeze70Bs="  # 你已經有了,保留
      timezone: "Asia/Taipei"
     
      # 分散式 poller 必要設定
      configuration: |-
        $config['distributed_poller'] = true;
        $config['distributed_poller_group'] = 0;
        $config['poller_id'] = php_uname('n');
    
      image:
        repository: librenms/librenms
        tag: "24.5.0"
        pullPolicy: IfNotPresent
     
      # 讓所有 pod 都從 secret 讀資料庫密碼與 APP_KEY(安全)
      extraEnv:
        - name: APP_KEY
          valueFrom:
            secretKeyRef:
              name: librenms-secret
              key: app-key
        - name: DB_HOST
          value: "librenms-mysql"
        - name: DB_DATABASE
          value: "librenms"
        - name: DB_USERNAME
          value: "librenms"
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: librenms-secret
              key: db-password
     
      # 關鍵:讓 /opt/librenms 完整掛到 NFS(包含所有 rrd)
      persistence:
        enabled: true
        storageClass: "nfs-client"
        accessModes:
          - ReadWriteMany
        size: 50Gi                     # 建議一次給大,rrd 很吃空間
        mountPath: /opt/librenms       # 必須掛在這裡
     
      # 自動建立 admin 帳號 + 第一次安裝
      extraInitContainers:
        - name: librenms-setup
          image: librenms/librenms:24.5.0
          command: ["/bin/bash", "-c"]
          args:
            - |
              # 第一次安裝
              if [ ! -f /opt/librenms/.env ] || ! grep -q "APP_KEY=" /opt/librenms/.env; then
                echo "Running librenms:install..."
                php /opt/librenms/artisan librenms:install --no-interaction
              fi
     
              # 建立 admin 帳號(不會重複建立)
              if ! php /opt/librenms/artisan user:list --no-ansi | grep -q "admin.*Administrator"; then
                echo "Creating default admin user..."
                php /opt/librenms/artisan user:add admin \
                  --password=librenms \
                  [email protected] \
                  --role=admin \
                  --name="Administrator" \
                  --no-interaction
              fi
     
              chown -R librenms:librenms /opt/librenms
          volumeMounts:
            - name: data
              mountPath: /opt/librenms
    
      frontend:
        replicas: 1
        resources:
          requests:
            cpu: 250m
            memory: 512Mi
          limits:
            cpu: 1000m
            memory: 1Gi
    
      poller:
        replicas: 3
        resources:
          requests:
            cpu: 500m
            memory: 1Gi
          limits:
            cpu: 2000m
            memory: 2Gi
     
    # ---------- RRDcached(獨立大容量 NFS) ----------
    rrdcached:
      enabled: true
      persistence:
        enabled: true
        journal:
          enabled: true
          size: 2Gi
          storageClass: "nfs-client"
          accessMode: ReadWriteMany
        rrdcached:
          enabled: true
          size: 100Gi                 # 真正吃空間的地方,建議 50~200Gi
          storageClass: "nfs-client"
          accessMode: ReadWriteMany
      envs:
        - name: TZ
          value: "Asia/Taipei"
     
    # ---------- MySQL ----------
    mysql:
      enabled: true
      architecture: standalone
      auth:
        database: librenms
        username: librenms
        existingSecret: librenms-secret
        existingSecretPasswordKey: db-password
        rootPassword: "change_me_root_please"
      primary:
        persistence:
          enabled: true
          size: 20Gi
          storageClass: "nfs-client"
          accessModes:
            - ReadWriteOnce
        resources:
          requests:
            cpu: 250m
            memory: 1Gi
     
    # ---------- Redis ----------
    redis:
      enabled: true
      architecture: standalone
      auth:
        enabled: false
      master:
        persistence:
          enabled: true
          size: 2Gi
          storageClass: "nfs-client"
          accessModes:
            - ReadWriteOnce
     
    # ---------- Ingress ----------
    ingress:
      enabled: true
      className: nginx
      annotations:
        nginx.ingress.kubernetes.io/proxy-body-size: "64m"
        nginx.ingress.kubernetes.io/ssl-redirect: "true"
      hosts:
        - host: librenms.k3s.ichiayi.com
          paths:
            - path: /
              pathType: Prefix
      tls:
        - secretName: wildcard-k3s-ichiayi-com-tls
          hosts:
            - librenms.k3s.ichiayi.com
  4. 執行安裝

    helm install librenms -f librenms-values.yaml librenms/librenms

    • 如果安裝後要調整參數(修改 librenms-values.yaml), 需要修改後執行 helm upgrade

      helm upgrade librenms -f librenms-values.yaml librenms/librenms

  5. 進入 Librenms 網頁 Exp. https://librenms.k3s.ichiayi.com
    • 預設帳號密碼 admin / librenms
  1. 找到 frontend 的 pod(或任意一個 librenms pod 都可以)
  2. 在容器內部執行建立帳號指令

    php /opt/librenms/artisan user:add admin \
      --password=librenms \
      [email protected] \
      --role=admin

  • tech/k3s/librenms.1764240128.txt.gz
  • 上一次變更: 2025/11/27 18:42
  • jonathan