大家好,我是 WeiyiGeek,一名深耕安全運(yùn)維開發(fā)(SecOpsDev)領(lǐng)域的技術(shù)從業(yè)者,致力于探索DevOps與安全的融合(DevSecOps),自動(dòng)化運(yùn)維工具開發(fā)與實(shí)踐,企業(yè)網(wǎng)絡(luò)安全防護(hù),歡迎各位道友一起學(xué)習(xí)交流、一起進(jìn)步 。
0x00 前言簡述
描述:上一篇【國產(chǎn)化監(jiān)控新選擇!夜鶯Nightingale在OpenEuler上的極簡部署指南】,作者簡單介紹了夜鶯監(jiān)控系統(tǒng),以及如何通過二進(jìn)制的方式部署夜鶯(nightingale),本篇將介紹如何使用自行構(gòu)建夜鶯監(jiān)控容器鏡像,并通過docker容器化快部署夜鶯,最后作者以生產(chǎn)環(huán)境為例,演示在 Kubernetes 集群環(huán)境下部署一個(gè)最新版本的夜鶯監(jiān)控系統(tǒng),以便于后續(xù)接入 Prometheus 以及 VictoriaMetrics 監(jiān)控指標(biāo)數(shù)據(jù)和 jaeger 鏈路追蹤,并使用夜鶯監(jiān)控系統(tǒng)進(jìn)行分組告警通知和抑制告警。
原文鏈接:?https://articles.zsxq.com/id_pe9p5cw2x8f2.html
實(shí)踐環(huán)境:
# 獲取最新版本號(hào),截止發(fā)稿前最新版本為 v8.0.0-beta.14
curl -s https://api.github.com/repos/ccfos/nightingale/releases/latest | grep?"tag_name"?| cut -d?'"'?-f 4
??# v8.0.0-beta.14
# 獲取最新二進(jìn)制包下載鏈接地址
curl -s https://api.github.com/repos/ccfos/nightingale/releases/latest | grep?"browser_download_url"?| grep?"linux-amd64.tar.gz"?| cut -d?'"'?-f 4
??# https://github.com/ccfos/nightingale/releases/download/v8.0.0-beta.14/n9e-v8.0.0-beta.14-linux-amd64.tar.gz
0x01 容器化部署夜鶯監(jiān)控系統(tǒng)
Docker 容器方式部署
描述:夜鶯官網(wǎng)已經(jīng)寫的非常詳細(xì)了,你只需要安裝 docker 以及 docker-compose 環(huán)境,便可開箱即用,此處不再贅述。
Docker 環(huán)境說明
$ docker version
Client: Docker Engine - Community
?Version: ? ? ? ? ? 26.1.3
Server: Docker Engine - Community
?Engine:
? Version: ? ? ? ? ?26.1.3
$ docker-compose version
Docker Compose version v2.23.0
操作實(shí)踐
# 方式1.拉取源代碼
git?clone?--depth=1 https://github.com/ccfos/nightingale.git
# 方式2.二進(jìn)制安裝包
mkdir -vpls /opt/n9e &&?cd?/opt/n9e
download_url=$(curl -s https://api.github.com/repos/ccfos/nightingale/releases/latest | grep?"browser_download_url"?| grep?"linux-amd64.tar.gz"?| cut -d?'"'?-f 4)
wget https://gh.wygk.eu.org/$download_url
tar -zxvf?${download_url##*/}
# 不論通過那種方式,解壓后都有一個(gè) docker/compose-bridge 目錄,進(jìn)入這個(gè)目錄執(zhí)行 docker-compose up -d 命令即可(國內(nèi)網(wǎng)絡(luò),鏡像下載可能會(huì)失敗,您需要自行解決科學(xué)上網(wǎng)的問題)
ls ?docker/compose-bridge?
# docker-compose.yaml ?etc-categraf ?etc-mysql ?etc-nightingale
cd?/opt/n9e/docker/compose-bridge
docker compose up -d
[+] Running 5/5
# ?? Container victoriametrics ?Started ? ? ? ?0.6s
# ?? Container redis ? ? ? ? ? ?Started ? ? ? ?0.6s
# ?? Container mysql ? ? ? ? ? ?Started ? ? ? ?0.6s
# ?? Container nightingale ? ? ?Started ? ? ? ?0.2s
# ?? Container categraf ? ? ? ? Started ? ? ? ? ? ? ? ? ? ? ? ??
執(zhí)行完畢后,Docker compose 便會(huì)啟動(dòng)了多個(gè)容器,分別是:
- victoriametrics:時(shí)序數(shù)據(jù)庫,和 Prometheus 兼容,性能更好redis:緩存數(shù)據(jù)庫,夜鶯使用 Redis 來存儲(chǔ) jwt token 和機(jī)器的心跳元信息mysql:關(guān)系型數(shù)據(jù)庫,夜鶯使用 MySQL 來存儲(chǔ)用戶信息、告警規(guī)則、儀表盤等配置類數(shù)據(jù)nightingale:夜鶯監(jiān)控的核心服務(wù)categraf:監(jiān)控數(shù)據(jù)采集器,負(fù)責(zé)采集主機(jī)的 CPU、內(nèi)存、磁盤等指標(biāo)數(shù)據(jù).
當(dāng)然你也可以單獨(dú)只運(yùn)行 nightingale (主要是臨時(shí)測試使用),注意:未持久化數(shù)據(jù)容器重啟后丟失,例如:
# 創(chuàng)建并運(yùn)行夜鶯監(jiān)控容器
docker run -d --name nightingale
? -e GIN_MODE=release
? -e TZ=Asia/Shanghai
? -p 17000:17000
? -p 20090:20090
? --restart=always
? flashcatcloud/nightingale:latest
? sh -c?"/app/n9e"
# 查看容器運(yùn)行狀態(tài)
docker ps
# CONTAINER ID ? IMAGE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ?CREATED ? ? ? ? STATUS ? ? ? ? PORTS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NAMES
# 504c6c8d7a2f ? flashcatcloud/nightingale:latest ? ? ? ? ? ? ? ?"sh -c /app/n9e" ? 4 seconds ago ? Up 3 seconds ? 0.0.0.0:20090->20090/tcp, :::20090->20090/tcp, 0.0.0.0:17000->17000/tcp, :::17000->17000/tcp ? nightingale
# 若開啟了主機(jī)防火墻一定要開放 17000 和 20090 端口,否則無法訪問夜鶯監(jiān)控系統(tǒng)
firewall-cmd --add-port=17000/tcp --add-port=20090/tcp --permanent
firewall-cmd --reload
等待幾分鐘,夜鶯監(jiān)控系統(tǒng)便會(huì)啟動(dòng)成功,你可以通過瀏覽器訪問 http://127.0.0.1:17000 來查看夜鶯的 Web 界面,默認(rèn)用戶名是 root,默認(rèn)密碼是 root.2020。
注意:請把 127.0.0.1 替換成你的服務(wù)器 IP 地址。
weiyigeek.top-登錄容器部署的夜鶯圖
參考來源:https://n9e.github.io/zh/docs/install/compose/
Kubernetes 集群環(huán)境中部署
描述:考慮到在當(dāng)下企業(yè)生產(chǎn)環(huán)境中,通常會(huì)使用 Kubernetes 容器編排工具來管理容器化應(yīng)用,而不是 Docker 以及其他容器。此外由于筆者企業(yè)內(nèi)部有安全合規(guī)要求,通常不會(huì)直接使用外部工具提供的鏡像,而是自行構(gòu)建夜鶯監(jiān)控系統(tǒng)的容器鏡像,并通過私有倉庫進(jìn)行分發(fā),以保證基礎(chǔ)鏡像的安全性,穩(wěn)定性,所以作者首先將構(gòu)建私有鏡像,然后將以 Kubernetes 為例演示如何部署夜鶯監(jiān)控系統(tǒng)。
構(gòu)建夜鶯監(jiān)控私有鏡像
1.在安裝有docker環(huán)境的主機(jī)下執(zhí)行以下步驟,此處以最新版本 v8.0.0-beta.14 為例,構(gòu)建私有鏡像
download_url=$(curl -s https://api.github.com/repos/ccfos/nightingale/releases/latest | grep?"browser_download_url"?| grep?"linux-amd64.tar.gz"?| cut -d?'"'?-f 4)
mkdir /usr/local/src/n9e?
wget https://gh.wygk.eu.org/$download_url
tar -zxvf?${download_url##*/}? -C /usr/local/src/n9e/
2.創(chuàng)建 Dockerfile 文件,此處以 Python python:3-slim 為基礎(chǔ)鏡像構(gòu)建夜鶯監(jiān)控系統(tǒng)容器鏡像
# 提前拉取基礎(chǔ)鏡像,否則構(gòu)建過程會(huì)比較慢
docker pull python:3-slim
# 編寫 Dockerfile 文件
tee /usr/local/src/n9e/Dockerfile <<EOF
FROM python:3-slim
WORKDIR /app
ADD n9e /app/
ADD etc /etc/n9e/
ADD integrations /app/integrations/
RUN sed -i -e?'s#http://deb.debian.org#https://mirrors.huaweicloud.com#g'?/etc/apt/sources.list.d/debian.sources && apt update && apt install -y iputils-ping curl && apt clean && pip install requests -i?"https://mirrors.aliyun.com/pypi/simple/"
EXPOSE 17000
ENV N9E_CONFIGS="/etc/n9e/"
CMD ["/app/n9e",?"-h"]
EOF
上述步驟中,我將?/app
?目錄設(shè)置為夜鶯程序二進(jìn)制文件存放目錄,/app/integrations?
集成目錄包含比如 MySQL、Redis、Elasticsearch 等各個(gè)監(jiān)控目標(biāo)的內(nèi)置儀表盤、告警規(guī)則等,通過環(huán)境變量?/etc/n9e
?設(shè)置為夜鶯配置文件的存放目錄。
3.切換到 /usr/local/src/n9e 目錄下,執(zhí)行構(gòu)建鏡像并推送鏡像到私有倉庫命令,若還沒部署私有倉庫的可參考作者此文【GitOps實(shí)踐 | 快速在銀河麒麟KylinOS國產(chǎn)系統(tǒng)部署最新Harbor企業(yè)私有鏡像倉庫】
# 構(gòu)建鏡像
docker build -t harbor.weiyigeek.top/library/nightingale:v8.0.0-beta.14 .?
# 登錄私有倉庫
docker login harbor.weiyigeek.top
# 推送鏡像到私有倉庫
docker push harbor.weiyigeek.top/library/nightingale:v8.0.0-beta.14
至此,私有鏡像構(gòu)建完畢!
創(chuàng)建夜鶯監(jiān)控持久化依賴數(shù)據(jù)庫
描述:作者準(zhǔn)備一臺(tái)服務(wù)器,我這里用的是兩臺(tái) OpenEuler 24.03 虛擬機(jī),安裝 Docker 環(huán)境,我這里用的是 MariaDB 作為數(shù)據(jù)庫,Redis 作為緩存,然后在安裝夜鶯時(shí)分別使用它們。
OS:OpenEuler 24.03 LTS SP1?
Docker : 26.1.3
MariaDB:11.6.2
Redis: 7.2.4
溫馨提示:此處所使用的?OpenEuler 24.03
?虛擬機(jī)已進(jìn)行主機(jī)加固,滿足等保 3 級(jí)要求,若有此方面需求的道友,可訪問此篇【OpenEuler 24.03系統(tǒng)主機(jī)安全加固及配置優(yōu)化實(shí)踐指南】文章中的鏈接獲取加固腳本。
這里不再老生常談Docker部署安裝了,若你還不會(huì)可在上述加固腳本中獲取 Docker 安裝命令一鍵安裝,或者參考作者以前Docker部署文章,以及參考官方教程即可,下面著重介紹使用 Docker-Compose 快速進(jìn)行 MariaDB 和 Redis 的部署。
MariaDB 部署
- 1.持久化目錄以及配置文件準(zhǔn)備
# 持久化目錄 (此處僅為作者示例路徑,請根據(jù)實(shí)際環(huán)境調(diào)整.)
mkdir -vp /data/mariadb/{deploy,data,config}
# MariaDB 配置文件
cd?/data/mariadb/
tee config/my.cnf <<'EOF'
[mysqld]
# 數(shù)據(jù)存儲(chǔ)目錄
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
# 開啟 binlog
log_bin = /var/lib/mysql/mysql_bin
log_bin_index = /var/lib/mysql/mysql_bin.index
server_id = 1
expire_logs_days = 7
max_binlog_size = 100M
binlog_format = ROW
sync_binlog = 1
# 優(yōu)化參數(shù)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
# 連接數(shù)
max_connections = 1024
max_user_connections = 256
# 連接緩沖大小
sort_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 8M
join_buffer_size = 8M
# 日志
slow_query_log = 0
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 2
# 字符串
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 禁止域名解析,提升連接速度
skip-name-resolve
# 禁止使用符號(hào)鏈接
symbolic-links = 0
EOF
-
- 2.創(chuàng)建
docker-compose.yml
- ?配置文件
cd?/data/mariadb/deploy/
tee docker-compose.yml <<'EOF'
services:
? mariadb:
? ? image: mariadb:11.6.2
? ? container_name: mariadb
? ? restart: always
? ? environment:
? ? ? MARIADB_ROOT_PASSWORD: WeiyiGeek.top
? ? ? MYSQL_DATABASE: app
? ? ? MARIADB_USER: app
? ? ? MARIADB_PASSWORD: WeiyiGeek.top
? ? volumes:
? ? ? - /data/mariadb/data:/var/lib/mysql
? ? ? - /data/mariadb/config:/etc/mysql/conf.d
? ? ports:
? ? ? -?"3306:3306"
EOF
-
- 3.進(jìn)入
docker-compose.yml
- ?文件所在目錄,執(zhí)行下述命令快速部署并啟動(dòng) MariaDB 容器。
# 部署運(yùn)行
docker-compose up -d
# 查看容器運(yùn)行狀態(tài)
docker ps
??# 890e26f87859 ? mariadb:11.6.2 ?"docker-entrypoint.s…" ? 3 months ago ? Up 3 months ? 0.0.0.0:3306->3306/tcp ? mariadb
- 4.進(jìn)入 MariaDB 容器,登錄數(shù)據(jù)庫,并創(chuàng)建夜鶯數(shù)據(jù)庫所需用戶。
# 進(jìn)入容器中Shell
docker?exec?-it mariadb bash
# 使用 root 用戶登錄數(shù)據(jù)庫,密碼為前面 docker-compose.yml 中 MARIADB_ROOT_PASSWORD 環(huán)境變量設(shè)置的值
sudo mysql -u root
# 將 root 用戶使用 caching_sha2_passwor 插件認(rèn)證(MySQL 8.x)需要進(jìn)行設(shè)置
# mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
# 創(chuàng)建 n9e 用戶 password 修改為符合 STRONG 規(guī)則的密碼
mysql> CREATE USER?'n9e'@'%'?IDENTIFIED BY?'www.weiyigeek.top';
# 授予 n9e 用戶對 n9e_v6 數(shù)據(jù)庫操作的所有權(quán)限
mysql> GRANT ALL PRIVILEGES ON n9e_v6.* TO?'n9e'@'%';
# 刷新權(quán)限
mysql> FLUSH PRIVILEGES;
-
- 5.將上述解壓目錄中
/usr/local/src/n9e/n9e.sql
- ?文件上傳到 OpenEuler 虛擬機(jī)中并導(dǎo)入到 MariaDB 數(shù)據(jù)庫中。
ls /opt/nightingale
??# cli ?docker ?etc ?integrations ?n9e ?n9e-cli ?n9e-edge ?n9e.log ?n9e.sql ?payload.json
# 導(dǎo)入數(shù)據(jù)庫
docker?exec?-i 890e26f87859 mariadb -h 127.0.0.1 -u n9e -pWeiyiGeek < n9e.sql
# 查看導(dǎo)入情況
root@890e26f87859:/# mariadb -h 127.0.0.1 ?-u n9e -p
Enter password:
Welcome to the MariaDB monitor. ?Commands end with ; or g.
Your MariaDB connection id is 9
Server version: 11.6.2-MariaDB-ubu2404-log mariadb.org binary distribution
MariaDB [(none)]> show databases;
+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| n9e_v6 ? ? ? ? ? ? |
+--------------------+
2 rows?inset?(0.004 sec)
# 查看數(shù)據(jù)庫用戶列表
MariaDB [(none)]> use n9e_v6;
MariaDB [n9e_v6]> SELECT * from n9e_v6.users;
+----+----------+----------+-----------+-------+-------+----------+-------+----------+------------+--------+------------------+------------+-----------+------------+-----------+
| id | username | nickname | password ?| phone | email | portrait | roles | contacts | maintainer | belong | last_active_time | create_at ?| create_by | update_at ?| update_by |
+----+----------+----------+-----------+-------+-------+----------+-------+----------+------------+--------+------------------+------------+-----------+------------+-----------+
| ?1 | root ? ? | 超管 ? ? | root.2020 | ? ? ? | ? ? ? | ? ? ? ? ?| Admin | NULL ? ? | ? ? ? ? ?0 | ? ? ? ?| ? ? ? ? ? ? ? ?0 | 1746854092 | system ? ?| 1746854092 | system ? ?|
+----+----------+----------+-----------+-------+-------+----------+-------+----------+------------+--------+------------------+------------+-----------+------------+-----------+
1 row?inset?(0.001 sec)
# 退出
MariaDB [n9e_v6]>?exit;
Redis 部署
- 1.持久化目錄以及配置文件準(zhǔn)備
mkdir -vp /data/redis/{deploy,data,config,logs}
cd?/data/redis/
tee config/redis.conf <<'EOF'
# 綁定任意接口、服務(wù)端口、后臺(tái)運(yùn)行。
bind?0.0.0.0
port 6379
# 容器里必須設(shè)置為no
daemonize no
supervised auto
# redis服務(wù)pid進(jìn)程文件名
pidfile?"/var/run/redis.pid"
# 關(guān)閉保護(hù)模式,并配置使用密碼訪問
protected-mode no
# 數(shù)據(jù)文件保存路徑,rdb/AOF文件也保存在這里
dir?"/data"
# 日志文件記錄文件(notice / verbose)
logfile?"/logs/redis.log"
loglevel notice
# 慢查詢配置
slowlog-log-slower-than 6000
slowlog-max-len 1024
# 內(nèi)存策略
# maxmemory 2gb
# maxmemory-policy volatile-lru
# 最大客戶端連接數(shù)
maxclients 10000
# 客戶端連接空閑多久后斷開連接,單位秒,0表示禁用
timeout 60
tcp-keepalive 120
# Redis 數(shù)據(jù)持久化混合模式(RDB/AOF)配置
# RDB 文件名
dbfilename?"dump.rdb"
# 數(shù)據(jù)自動(dòng)保存腳本條件, 例如900s中有10key發(fā)生變化
save 900 10
# 啟用增量式同步 (推薦),減少 RDB 保存期間的延遲毛刺
rdb-save-incremental-fsync yes
# 對RDB文件進(jìn)行壓縮,建議以(磁盤)空間換(CPU)時(shí)間。
rdbcompression yes
# 版本5的RDB有一個(gè)CRC64算法的校驗(yàn)和放在了文件的最后。這將使文件格式更加可靠。
rdbchecksum yes
# AOF開啟
appendonly yes
# AOF文件名
appendfilename?"appendonly.aof"
# 可選值 always, everysec,no,建議設(shè)置為everysec
appendfsync everysec
# 混合持久化,重寫時(shí)使用RDB格式作為AOF開頭,減少文件大小
aof-use-rdb-preamble yes
# 7.0+版本特性,除非需要否則關(guān)閉時(shí)間戳記錄
aof-timestamp-enabled no
# 當(dāng)前AOF文件比上次重寫后文件大100%時(shí)觸發(fā)重寫
auto-aof-rewrite-percentage 100
# AOF文件至少達(dá)到64MB才會(huì)觸發(fā)重寫
auto-aof-rewrite-min-size 64mb
# 重寫時(shí)增量式同步,避免大延遲峰值
aof-rewrite-incremental-fsync yes
- 2.創(chuàng)建 docker-compose.yml 配置文件
version:?"3.8"
services:
? redis:
? ? image: harbor.weiyigeek.top/docker/library/redis:7.2.7-alpine3.21
? ? container_name: redis
? ? restart: unless-stopped
? ? hostname: redis
? ? privileged:?true
? ? ports:
? ? ? -?"6379:6379"
? ? volumes:
? ? ? - /data/redis/data:/data
? ? ? - /data/redis/logs:/logs
? ? ? - /data/redis/config/redis.conf:/etc/redis/redis.conf
? ? environment:
? ? ? - REDIS_PASSWORD=WeiyiGeek.top
? ? ? - REDIS_MAXMEMORY=6gb
? ? ? - REDIS_MAXMEMORY_POLICY=allkeys-lru
? ? ? - REDIS_DISABLE_THP=yes
? ??command:
? ? ? - /bin/sh
? ? ? - -c
? ? ? - |
? ? ? ? sysctl -w vm.overcommit_memory=1 &&
? ? ? ? sysctl -w net.core.somaxconn=8196 &&
? ? ? ? redis-server /etc/redis/redis.conf --requirepass $$REDIS_PASSWORD
? ? deploy:
? ? ? resources:
? ? ? ? limits:
? ? ? ? ? cpus:?"2.0"
? ? ? ? ? memory:?"8G"
? ? healthcheck:
? ? ??test: ["CMD",?"redis-cli",?"-a",?"$$REDIS_PASSWORD",?"ping"]
? ? ? interval: 15s
? ? ? timeout: 5s
? ? ? retries: 3
- 3.創(chuàng)建并運(yùn)行 redis 容器,查看容器運(yùn)行狀態(tài)
docker-compose up -d
docker ps?
5067e2985cc7 ?redis:7.2.7-alpine3.21 ??"docker-entrypoint.s…"? ?5 weeks ago ? ?Up 5 weeks (healthy) ? 0.0.0.0:6379->6379/tcp ? redis
- 4.進(jìn)入容器驗(yàn)證 Redis 數(shù)據(jù)庫運(yùn)行狀態(tài)
docker?exec?-it redis sh
/data?# redis-cli
127.0.0.1:6379> auth WeiyiGeek.top
OK
127.0.0.1:6379> ping
PONG
將上述 MariDB 以及 Redis 容器部署完成后,還需配置防火墻允許 3306 、6379 端口通行。
[root@OpenEuler /data]# firewall-cmd --add-port=3306/tcp ?--add-port=63749/tcp --permanent
[root@OpenEuler /data]# firewall-cmd --reload
至此,Mariadb 數(shù)據(jù)庫、Redis 緩存數(shù)據(jù)庫創(chuàng)建完畢!
K8S 集群中部署運(yùn)行夜鶯監(jiān)控系統(tǒng)
步驟 01.將鏡像構(gòu)建節(jié)點(diǎn)中?/usr/local/src/n9e/etc/
?目錄文件打包上傳至kubernetes集群節(jié)點(diǎn)中,作者這里直接放在NFS共享磁盤中?/storage/app/devops/nightingale/config
,便于容器可以部署運(yùn)行在各個(gè)工作節(jié)點(diǎn)。
# 夜鶯監(jiān)控配置文件目錄樹形結(jié)構(gòu)
tree /usr/local/src/n9e/etc/
.
├── config.toml
├── edge
│ ? └── edge.toml
├── metrics.yaml
└── script
? ? ├── notify.bak.py
? ? ├── notify_feishu.py
? ? ├── notify.py
? ? └── rule_converter.py
# 在 K8S 集群 master 節(jié)點(diǎn)上創(chuàng)建配置文件持久化目錄
mkdir -vp /storage/app/devops/nightingale/config
ls /storage/app/devops/nightingale/config
? config.toml ?edge ?metrics.yaml ?script
步驟 02.修改配置文件中的數(shù)據(jù)庫相關(guān)配置項(xiàng)(請根據(jù)實(shí)際情況做修改),例如:
vim /storage/app/devops/nightingale/config/config.toml
[Global]
RunMode =?"release"# 生產(chǎn)環(huán)境建議設(shè)置為 release
[Log]
Dir =?"logs"
# log level: DEBUG INFO WARNING ERROR
Level =?"INFO"? ? ?# 日志級(jí)別
[HTTP]
Host =?"0.0.0.0"# 監(jiān)聽所有網(wǎng)卡
Port = 17000 ? ? ?# 監(jiān)聽端口, 默認(rèn)17000
CertFile =?""? ? ?# 證書文件路徑,默認(rèn)不啟用 HTTPS
KeyFile =?""? ? ??# 證書密鑰文件路徑,默認(rèn)不啟用 HTTPS
.....
# mariadb 數(shù)據(jù)庫配置信息
[DB] ?
DSN =?"n9e:WeiyiGeek.top@tcp(10.20.1.21:3306)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local&allowNativePasswords=true"
Debug =?false
DBType =?"mysql"
MaxLifetime = 7200
MaxOpenConns = 150
MaxIdleConns = 50
# redis 數(shù)據(jù)庫配置信息
[Redis] ??
Address =?"10.20.1.21:6379"
Password =?"WeiyiGeek.top"
DB = 0
RedisType =?"standalone"
......
步驟 03.在 K8S 集群中創(chuàng)建名稱空間以及 Deployment 資源部署清單。
# 創(chuàng)建命名空間
kubectl create ns devops
# 創(chuàng)建部署文件
tee deployment.yaml <<'EOF'
apiVersion: v1
kind: Service
metadata:
? name: nightingale
? annotations:
? ? ops.k8s.io/desc: 夜鶯監(jiān)控告警平臺(tái)
? ? ops.k8s.io/git: https://github.com/ccfos/nightingale
? ? ops.k8s.io/name: nightingale
? ? ops.k8s.io/type: app
? ? ops.k8s.io/url: https://n9e.weiyigeek.top
? namespace: devops
spec:
? selector:
? ? app: nightingale
? ? ref: prod
? ports:
? ? - name: http
? ? ? port: 17000
? ? ? targetPort: 17000
? ? - name: metrics
? ? ? port: 20090
? ? ? targetPort: 20090
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
? name: nightingale
? labels:
? ? app: nightingale
? ? ref: prod
namespaces: devops
spec:
? replicas: 1
? selector:
? ? matchLabels:
? ? ? app: nightingale
? ? ? ref: prod
? template:
? ? metadata:
? ? ? labels:
? ? ? ? app: nightingale
? ? ? ? ref: prod
? ? ? annotations:
? ? ? ? ops.k8s.io/desc: 夜鶯監(jiān)控告警平臺(tái)
? ? ? ? ops.k8s.io/git: https://github.com/ccfos/nightingale
? ? ? ? ops.k8s.io/name: nightingale
? ? ? ? ops.k8s.io/type: app
? ? ? ? ops.k8s.io/url: https://n9e.weiyigeek.top
? ? spec:
? ? ? containers:
? ? ? - name: nightingale
? ? ? ? image: harbor.weiyigeek.top/library/nightingale:v8.0.0-beta.14
? ? ? ? imagePullPolicy: IfNotPresent
? ? ? ??command: ["sh",?"-c",?"/app/n9e"]
? ? ? ? env:
? ? ? ? - name: GIN_MODE
? ? ? ? ? value: release
? ? ? ? - name: TZ
? ? ? ? ? value: Asia/Shanghai
? ? ? ? - name: N9E_PROXY_URL
? ? ? ? ? value: qyapi.weixin.qq.com,oapi.dingtalk.com,smtp.exmail.qq.com
? ? ? ? - name: APP_NAME
? ? ? ? ? valueFrom:
? ? ? ? ? ? fieldRef:
? ? ? ? ? ? ? apiVersion: v1
? ? ? ? ? ? ? fieldPath: metadata.annotations['ops.k8s.io/name']
? ? ? ? - name: APP_DESC
? ? ? ? ? valueFrom:
? ? ? ? ? ? fieldRef:
? ? ? ? ? ? ? apiVersion: v1
? ? ? ? ? ? ? fieldPath: metadata.annotations['ops.k8s.io/desc']
? ? ? ? - name: APP_GIT
? ? ? ? ? valueFrom:
? ? ? ? ? ? fieldRef:
? ? ? ? ? ? ? apiVersion: v1
? ? ? ? ? ? ? fieldPath: metadata.annotations['ops.k8s.io/git']
? ? ? ? - name: APP_URL
? ? ? ? ? valueFrom:
? ? ? ? ? ? fieldRef:
? ? ? ? ? ? ? apiVersion: v1
? ? ? ? ? ? ? fieldPath: metadata.annotations['ops.k8s.io/url']
? ? ? ? - name: APP_NAMESPACE
? ? ? ? ? valueFrom:
? ? ? ? ? ? fieldRef:
? ? ? ? ? ? ? apiVersion: v1
? ? ? ? ? ? ? fieldPath: metadata.namespace
? ? ? ? ports:
? ? ? ? - containerPort: 17000
? ? ? ? ? name: http
? ? ? ? - containerPort: 20090
? ? ? ? ? name: metrics
? ? ? ? volumeMounts:
? ? ? ? - name: config
? ? ? ? ? mountPath: /etc/n9e/
? ? ? volumes:
? ? ? - name: config
? ? ? ? hostPath:
? ? ? ? ? path: /storage/app/devops/nightingale/config
? ? ? ? ??type: Directory
? ? ? restartPolicy: Always
EOF
步驟 04.準(zhǔn)備使用?ingress-nginx
?服務(wù)來暴露 nightingale 服務(wù),其反向代理配置規(guī)則如下所示,當(dāng)前你也可直接使用NodePort 方式暴露夜鶯監(jiān)控服務(wù)端口,不過作者還是建議通過域名方式,這樣更便于業(yè)務(wù)管理,還可做安全訪問限制。
tee n9e-ingress.yaml <<'EOF'
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
? annotations:
? ? nginx.ingress.kubernetes.io/enable-cors:?"true"
? labels:
? ? ref: n9e
? ? url: n9e.weiyigeek.top
? name: n9e
? namespace: devops
spec:
? ingressClassName: nginx
? rules:
? - host: n9e.weiyigeek.top
? ? http:
? ? ? paths:
? ? ? - backend:
? ? ? ? ? service:
? ? ? ? ? ? name: nightingale
? ? ? ? ? ? port:
? ? ? ? ? ? ? number: 17000
? ? ? ? path: /
? ? ? ? pathType: ImplementationSpecific
? tls:
? - hosts:
? ? - n9e.weiyigeek.top
? ? secretName: ssl.weiyigeek.top
EOF
特別注意:配置完成后,請?jiān)趦?nèi)部DNS服務(wù)器中添加域名解析。
步驟 05.運(yùn)行創(chuàng)建的資源配置清單,并查看部署狀態(tài)。
# 創(chuàng)建
kubectl apply -f deployment.yaml?
kubectl apply -f n9e-ingress.yaml
# 查看
kubectl get pod -n devops -o wide | grep?"nightingale"
# nightingale-697b8dd677-2fgkd ? ?1/1 ? ? Running ? 0 ? ? ? ? ?14d ? 172.16.131.155 ? cqksy-02 ? <none> ? ? ? ? ? <none>
kubectl get svc -n devops ?| grep?"nightingale"
# nightingale ? ?ClusterIP ? 10.96.208.154 ? <none> ? ? ? ?17000/TCP,20090/TCP ? 10m
kubectl get ingress -n devops -o wide
# NAME ? ? ?CLASS ? HOSTS ? ? ? ? ? ? ? ? ? ? ? ? ? ADDRESS ? PORTS ? ? AGE
# n9e ? nginx ? monitor.cqksy.cn ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80, 443 ? 10m
步驟 06.部署完成后,使用瀏覽器訪問?https://n9e.weiyigeek.top
?,然后使用缺省密碼登錄,從而驗(yàn)證服務(wù)正常運(yùn)行。
至此,實(shí)踐完畢!
本章,作者以自身企業(yè)需求為突破點(diǎn),實(shí)踐了自定義構(gòu)建私有鏡像,并通過容器的方式部署運(yùn)行在企業(yè)內(nèi)部 Kubernetes 高可用集群中,使得當(dāng)夜鶯監(jiān)控系統(tǒng)容器發(fā)生故障時(shí)可以及時(shí)恢復(fù),從而不影響其它核心業(yè)務(wù)的監(jiān)控,好了,今天就說到這里了,請大家持續(xù)關(guān)注我喲,我將在后續(xù)文章中實(shí)踐夜鶯監(jiān)控預(yù)警系統(tǒng)在企業(yè)內(nèi)部從0到1落地實(shí)踐,希望能幫助到大家。
END