2025-07-07 21:03:30
今天,我要给大家种草一款超赞的开源工具 Kite+,一个现代化、轻量级的 Kubernetes Dashboard,让你的集群管理变得高效又优雅!
没错,就是之前介绍过的探索 Kite:现代化轻量级 Kubernetes Dashboard,助力 DevOps 高效管理集群
这个项目确实很不错,主要是这个 UI 我很喜欢,再搭配上霞鹜文楷,简直善心悦目。
暂时只列出目前已经支持的特性。这也是为啥我要魔改的原因而不是上游 PR
Connectors子网连接器
(容器网络打通)、ProxyClasses
(主要应用场景是 LoadBalancer, 生成负载均衡 IP)目前仅提高 yaml 部署方式,一键部署。
kubectl apply -f https://raw.githubusercontent.com/ysicing/kite/refs/heads/main/deploy/install.yaml
可直接替换官方镜像
还有官方原来镜像拉取策略是 imagePullPolicy: IfNotPresent, 需要调整为 Always,那么每次升级你可以直接重启 Deploy 就行了。
迭代过程中的截图,不代表最新结果
这里以 OpenKruise 为例,集群维度只显示了大概。如果你未安装默认显示安装引导,且左边导航会隐藏 OpenKruise 子菜单。
打通 Tailscale 网络访问 k3s service 能力
我的使用场景主要有两大类,节点选择和负载均衡能力
apiVersion: tailscale.com/v1alpha1
kind: ProxyClass
metadata:
name: bj
namespace: tailscale
spec:
statefulSet:
pod:
nodeSelector:
node-role.kubernetes.io/bj: "true"
tolerations:
- operator: "Exists"
欢迎试用体验。有更好的想法可以告诉我哈。
关注我的微信公众号,更多技术吐槽和干货!
2025-07-02 21:26:40
在快节奏的现代生活中,随时记录灵感、想法或随手笔记变得越来越重要。如果你正在寻找一款轻量、开源、自托管的笔记工具,那么今天我要向大家安利一个宝藏项目 Ech0!它不仅简洁高效,还能让你完全掌控自己的数据。与此同时,也会把它与另一款热门开源笔记工具 Memos 做个对比,看看它们各自的亮点在哪里!
对 Memos 感兴趣的,也可以看看部署轻量私有化备忘录 memos
Ech0 是一款开源、自托管的轻量级发布平台,专为快速记录和分享个人想法、文字和链接而设计。它的核心理念是简洁、自由和隐私至上,让你专注于内容的创作,而无需被复杂的界面或繁琐的功能干扰。
仅从 Memos v0.18.2 版本为例,后续版本我觉得都是破坏性更新。本文主要从我个人角度简单对比一下
两者都一样开源,且都支持 Docker
对于我而言,短时间内 Ech0 还没放替代我的 Memos,数据迁移令人头大。但是期待 Echo 干翻 Memos,支持从 Memos 导入、支持 OIDC 等等。
项目地址: https://github.com/lin-snow/Ech0
Demo 地址: https://memo.vaaat.com/
值得一提的是,Ech0 还有一个二次开发版本 Ech0 Noise(高度完善的轻量说说笔记系统及 memos 的开源替代品),它在原版基础上增加了更现代化的 UI 设计(例如毛玻璃背景)和一键数据备份/恢复功能,视觉和体验上更像一个精致的社交平台。如果你喜欢更美观的界面,可以尝试这个版本。
听说还支持从 Memos 导入到 Noise, 没实操过
项目地址: https://github.com/rcy1314/echo-noise
Demo 地址: https://note.noisework.cn/
services:
ech0:
image: sn0wl1n/ech0:latest
# image: ccr.ccs.tencentyun.com/k7scn/ech0
container_name: ech0
ports:
- '6277:6277'
volumes:
- ./ech0/data:/app/data
environment:
- JWT_SECRET="Ooghooch1Oojanguz5dei1ahw0IPoh9d"
restart: always
pwgen 32 1
/app/data/config/config.yaml
, 具体可以参考官方示例
services:
noise:
image: noise233/echo-noise
# image: ccr.ccs.tencentyun.com/k7scn/echo-noise
container_name: noise
ports:
- '1314:1314'
volumes:
- ./noise/data:/app/data
restart: always
admin/admin
PS: demo 没跑起来, 提示账号密码错误 😂
无论你是想快速记录生活中的灵感,还是需要一个完全属于自己的内容分享平台,Ech0 都能以它的简洁和高效打动你。相比功能更全面的 Memos,Ech0 更像是一个轻盈的创作小助手,让你专注于思想的流动。如果你追求极简和隐私,Ech0 绝对值得一试!快去部署你的 Ech0,记录下你的每一个灵感火花吧! 你更喜欢 Ech0 的轻量分享,还是 Memos 的全面管理?欢迎在评论区分享你的想法!
最近感冒了状态不是很好, 没太多精力去看,7 月争取恢复一下节奏,给大家带来更多更好玩的开源软件。
关注我的微信公众号,更多技术吐槽和干货!
2025-06-26 23:12:35
在 Kubernetes 的世界里,集群管理是一项复杂而关键的任务。随着容器化技术的普及,越来越多的团队依赖 Kubernetes 进行大规模分布式系统的部署与管理。然而,Kubernetes 原生的管理工具(如 kubectl 或 Kubernetes Dashboard)要么需要较高的学习成本,要么界面复杂不够直观。今天,我们来聊聊一款现代化、轻量级的 Kubernetes 仪表板 Kite,它以优雅的设计和强大的功能,为 DevOps 工程师带来全新的集群管理体验!
有群友说是好多开发转运维了么?感觉现在人手一个 k8s dashboard, 上次介绍了解锁 Kubernetes 高效管理神器——k8m,让集群运维更简单,有兴趣可以看看
项目地址:https://github.com/zxh326/kite
Kite 是一个开源的 Kubernetes Dashboard,旨在提供轻量、直观、现代化的集群管理解决方案。它通过简洁的界面和强大的功能,帮助用户实时监控集群状态、管理资源并简化操作流程。相比传统的 Kubernetes Dashboard,Kite 不仅更美观,还更注重用户体验和性能优化,特别适合希望快速上手、专注于核心任务的 DevOps 团队
Kite 的功能设计围绕 Kubernetes 用户的实际需求,提供了从集群概览到精细化管理的全方位支持。以下是几个令人印象深刻的功能:
Kite 提供了一个直观的集群健康状态仪表板,展示实时的资源使用情况(如 CPU、内存、网络)。通过与 Prometheus 的集成,用户可以轻松查看关键指标,快速定位性能瓶颈
Kite 能够以图形化方式展示 Kubernetes 资源之间的关联(如 Deployment → Pods),帮助用户更清晰地理解集群的拓扑结构,简化排查问题的工作
通过 Kite 的界面,用户可以直接执行资源管理操作,包括创建、更新、删除、扩展和重启资源。无论是调整副本数还是重启 Pod,都能一键完成
Kite 内置 Web 终端确实是一大亮点
Kite 支持 GitHub OAuth 和自定义 OAuth 认证,同时提供简单的用户名/密码认证方式,确保访问安全可控
在众多 Kubernetes 管理工具中,Kite 凭借以下优势脱颖而出:
此外,Kite 默认不收集任何分析数据,但用户可通过设置 ENABLE_ANALYTICS=true 启用匿名数据收集,帮助开发者改进产品
一键快速上手,默认使用官方镜像,也可以手动编辑使用
ccr.ccs.tencentyun.com/k7scn/kite
kubectl apply -f https://raw.githubusercontent.com/zxh326/kite/refs/heads/main/deploy/install.yaml
默认情况下,没有用户验证的,可以通过配置环境开启密码认证或者 OAuth 验证
KITE_USERNAME/KITE_PASSWORD
等 Pod 启动完成,访问 svc 的 80 端口即可。
如果没有使用 tailscale 打通网络的话,可以 NodePort 或者 Ingress 方式访问
除了 InCluster 方式,也可以本地使用 docker 方式
docker run --rm -p 8080:8080 -v ~/.kube/config:/home/nonroot/.kube/config ghcr.io/zxh326/kite:latest
打开浏览器,访问 http://localhost:8080,即可进入 Kite 的管理界面
Kite 适用于以下场景:
后续 Kite 团队计划进一步增强与 Prometheus 和 Grafana 的集成,优化多集群管理功能,并支持更多的认证方式
Kite 是一个现代化、轻量级的 Kubernetes Dashboard,以其直观的界面、强大的功能和高效的性能,为 DevOps 工程师提供了一个优秀的集群管理解决方案。无论是新手还是资深从业者,Kite 都能帮助你更轻松地管理 Kubernetes 集群,专注于核心业务开发。
个人觉得 UI 设计确实很令人舒服,但是对于我这种重度依赖 CRD 来说,略显鸡肋
关注我的微信公众号,更多技术吐槽和干货!
2025-06-19 22:23:00
如果你是一名开发者或运维工程师,正在为 Kubernetes 集群的复杂管理而头疼,那么今天我要给你安利一款超好用的神器——k8m!这是一款轻量级、AI 驱动的 Mini Kubernetes AI Dashboard,专为简化集群管理而生,功能强大又易上手,堪称 Kubernetes 管理界的“效率担当”!
k8m 是一款跨平台的 Kubernetes 管理工具,集成了大模型、AI 智能体和 MCP(Model Context Protocol)支持,旨在通过智能化和轻量化的设计,让开发者与运维人员轻松驾驭 Kubernetes 集群。它的核心理念是 “AI 驱动,轻便高效,化繁为简”,不仅功能全面,还支持单文件部署,跨 Linux、macOS、Windows 等多平台,真正做到开箱即用!
k8m 的亮点多到数不过来,这里为你精选几个“真香”功能,让你感受它的强大:
新手真的很适合本地学习,简单又快捷
支持多集群统一管理,界面直观,集群切换一键搞定。无论是 Kind、MiniKube 还是生产环境的大集群,k8m 都能无缝接入,管理得井井有条。另外也支持多集群权限管理。支持对用户、用户组进行授权,可按集群授权,包括集群只读、Exec 命令、集群管理员三种权限。对用户组授权后,组内用户均获得相应授权。支持设置命名空间黑白名单
一键安装和管理 Helm 应用,快速部署常用工具,省时省力。
内置 AI 诊断功能,点击事件旁的“AI 解读”按钮,秒速分析异常原因,提供详细修复建议,排查问题 so easy!
k8m 遵循 MIT 协议,完全开源,允许自由定制和商用,更新频率高,bug 修复快
从 GitHub 下载最新版本:https://github.com/weibaohui/k8m
运行命令:./k8m,然后访问 http://127.0.0.1:3618
想用 Docker?直接用 docker-compose 启动,配置文件参考 GitHub 文档
---
apiVersion: v1
kind: Namespace
metadata:
name: k8m
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: k8m
name: k8m
namespace: k8m
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
labels:
app: k8m
name: k8m
namespace: k8m
rules:
- verbs:
- "*"
apiGroups:
- "*"
resources:
- "*"
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
labels:
app: k8m
name: k8m
rules:
- verbs:
- "*"
apiGroups:
- "*"
resources:
- "*"
- verbs:
- "*"
nonResourceURLs:
- "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app: k8m
name: k8m
namespace: k8m
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: k8m
subjects:
- kind: ServiceAccount
name: k8m
namespace: k8m
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: k8m
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: k8m
subjects:
- kind: ServiceAccount
name: k8m
namespace: k8m
---
apiVersion: v1
kind: Service
metadata:
name: k8m
namespace: k8m
labels:
app: k8m
spec:
ports:
- name: http-k8m
protocol: TCP
port: 3618
targetPort: 3618
selector:
app: k8m
type: ClusterIP
# type: LoadBalancer
# loadBalancerClass: tailscale
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: k8m-pvc
namespace: k8m
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
---
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
name: k8m
namespace: k8m
labels:
app: k8m
spec:
replicas: 1
selector:
matchLabels:
app: k8m
template:
metadata:
labels:
app: k8m
spec:
containers:
- name: k8m
# image: docker.io/weibh/k8m:v0.0.130
# image: ghcr.io/weibaohui/k8m:v0.0.130
image: registry.cn-hangzhou.aliyuncs.com/minik8m/k8m:v0.0.130
env:
# 是否开启debug模式
- name: DEBUG
value: "false"
# log输出日志级别,同klog用法
- name: LOG_V
value: "2"
# 监听的端口号
- name: PORT
value: "3618"
# 开启AI功能,默认开启
- name: ENABLE_AI
value: "true"
# # 是否启用临时管理员账户配置,默认关闭
- name: ENABLE_TEMP_ADMIN
value: "false"
# kubectl shell镜像地址
- name: KUBECTL_SHELL_IMAGE
value: "bitnami/kubectl:latest"
# Node shell镜像地址
- name: NODE_SHELL_IMAGE
value: "alpine:latest"
# 持久化数据库地址
- name: SQLITE_PATH
value: "/app/data/k8m.db"
# 启动程序后,是否自动连接发现的集群,默认关闭
- name: CONNECT_CLUSTER
value: "true"
# 是否自动注册纳管宿主集群,默认启用
- name: IN_CLUSTER
value: "true"
# 是否打印配置信息
- name: PRINT_CONFIG
value: "false"
ports:
- containerPort: 3618
protocol: TCP
name: http-k8m
livenessProbe:
httpGet:
path: /healthz
port: 3618
initialDelaySeconds: 30
periodSeconds: 10
imagePullPolicy: IfNotPresent
volumeMounts:
- name: k8m-data
mountPath: /app/data
restartPolicy: Always
serviceAccountName: k8m
volumes:
- name: k8m-data
persistentVolumeClaim:
claimName: k8m-pvc
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
labels:
app: k8m
name: k8m
namespace: k8m
spec:
rules:
- host: k8m.i.ysicing.net
http:
paths:
- backend:
service:
name: k8m
port:
name: http-k8m
path: /
pathType: ImplementationSpecific
将上面的 yaml 保存为 k8m.yaml
kubectl apply -f k8m.yaml
等待服务启动完成后访问ingress 域名,默认用户:k8m,默认密码 k8m
登录后第一件事就是新建新的管理员账号,开启 MFA,删除默认管理员(只有删除功能没法禁用)
支持 OIDC,其实就能对接很多 OAUTH 服务了,具体 OIDC 使用说明
内置模型其实也还行,当然也可以自己的模型
效果还是很不错的
想了解更多?可以直接访问 k8m 的 GitHub 仓库:https://github.com/weibaohui/k8m
简单贴一下,更多细节可以使用 Demo 用户名密码 demo/demo
通过 MCP 协议集成到 Cursor、Claude Desktop 等工具,解锁更多 AI 交互场景。 目前 k8m 内置 k8s 多集群 MCP 工具 49 种,可组合实现超百种集群操作,可作为 MCP Server 供其他大模型软件使用。轻松实现大模型管理 k8s,可详细记录每一次 MCP 调用,安全使用,无后顾之忧,避免操作越权。
在 Kubernetes 管理工具层出不穷的今天,k8m 凭借轻量、AI 驱动、易用的特点脱颖而出。无论是个人开发者学习 Kubernetes,还是企业团队优化运维流程,k8m 都能为你节省时间、提升效率。更重要的是,它完全免费、开源,背后还有活跃的社区支持,未来发展值得期待!
PS: 作者修复 BUG 速度特别快。
关注我的微信公众号,更多技术吐槽和干货!
2025-06-06 19:24:44
在 DevOps 实践中,软件包管理是不可或缺的一环。JFrog Artifactory 作为一款强大的制品管理工具,广泛应用于存储和管理二进制文件。本文简单介绍如何部署 Artifactory 开源版。
主要有客户需要部署这个,简单研究一下,上次用这个还是 4 年前了,新版本部署坑有点多,没老版本丝滑。简单说不如 Nexus,有兴趣的可以看看我之前写的私有化部署 Nexus3 镜像源
镜像有点点大
docker pull releases-docker.jfrog.io/jfrog/artifactory-oss:7.111.8
# 国内
docker pull ccr.ccs.tencentyun.com/k7scn/artifactory-oss:7.111.8
services:
traefik:
image: traefik:v3.4
container_name: traefik
networks:
- ysicing-net
command:
- "--api=true"
- "--api.insecure=true"
- "--api.dashboard=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.http.address=:80"
- "--providers.docker.network=ysicing-net"
- "--log.level=INFO"
- "--accesslog=true"
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik-dashboard.entrypoints=http"
- "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.192.168.23.16.sslip.io`)"
- "traefik.http.routers.traefik-dashboard.service=dashboard@internal"
- "traefik.http.routers.traefik-dashboard-api.entrypoints=http"
- "traefik.http.routers.traefik-dashboard-api.rule=Host(`traefik.192.168.23.16.sslip.io`) && PathPrefix(`/api`)"
- "traefik.http.routers.traefik-dashboard-api.service=api@internal"
- "traefik.http.middlewares.gzip.compress=true"
- "traefik.http.routers.traefik-dashboard.middlewares=gzip@docker"
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: always
artifactorydb:
image: docker.io/bitnami/postgresql:15
# image: ccr.ccs.tencentyun.com/k7scn/postgresql:15
container_name: artifactorydb
restart: always
networks:
- ysicing-net
volumes:
- './postgresql:/bitnami/postgresql'
environment:
- POSTGRESQL_USERNAME=bn_artifactory
- POSTGRESQL_DATABASE=bitnami_artifactory
- POSTGRESQL_PASSWORD=bitnami
artifactory:
image: releases-docker.jfrog.io/jfrog/artifactory-oss:7.111.8
# image: ccr.ccs.tencentyun.com/k7scn/artifactory-oss:7.111.8
container_name: artifactory
depends_on:
- artifactorydb
labels:
- "traefik.enable=true"
- "traefik.http.routers.artifactory.rule=Host(`artifactory.192.168.23.16.sslip.io`)"
- "traefik.http.routers.artifactory.service=artifactory"
- "traefik.http.services.artifactory.loadbalancer.server.port=8081"
- "traefik.http.routers.artifactory-ui.service=artifactory-ui"
- "traefik.http.routers.artifactory-ui.rule=Host(`artifactory-ui.192.168.23.16.sslip.io`)"
- "traefik.http.services.artifactory-ui.loadbalancer.server.port=8082"
networks:
- ysicing-net
environment:
- EXTRA_JAVA_OPTIONS=-Dartifactory.home=/var/opt/jfrog/artifactory
- JF_ROUTER_ENTRYPOINTS_EXTERNALPORT=8082
# ports:
# - 8082:8082 # for router communication
# - 8081:8081 # for artifactory communication
volumes:
- artifactory_data:/var/opt/jfrog/artifactory
- /etc/localtime:/etc/localtime:ro
- ./system.yaml:/opt/jfrog/artifactory/var/etc/system.yaml
restart: always
logging:
driver: json-file
options:
max-size: "50m"
max-file: "10"
ulimits:
nproc: 65535
nofile:
soft: 32000
hard: 40000
volumes:
artifactory_data:
driver: local
networks:
ysicing-net:
name: ysicing-net
driver: bridge
默认使用 pg 数据库,方便些
touch system.yaml
创建完配置文件,生成相关配置
shared:
database:
type: postgresql
driver: org.postgresql.Driver
url: jdbc:postgresql://artifactorydb:5432/bitnami_artifactory
username: bn_artifactory
password: bitnami
修改文件权限
chown -R 1030:1030 system.yaml
chmod 644 system.yaml
服务非常吃资源,机器配置太低不推荐。
docker compose up -d
地址:artifactory-ui.192.168.23.16.sslip.io
默认的账号密码 | 默认用户名 admin,默认密码 password
没有特殊要求,不推荐。
欢迎关注我的微信公众号,可以看看我郑再打工每天都在折腾什么。
2025-06-05 22:13:15
FFmpeg 是一个强大的开源多媒体处理工具,广泛应用于音视频的转换、裁剪、合并、提取等操作。无论是开发、剪辑还是日常处理,掌握 FFmpeg 的常用命令都能极大提升效率。本文整理了一些高频使用的 FFmpeg 命令,方便你快速上手或作为备忘录收藏!
临时需要处理一些上次到群晖 MinIO 的视频,写个流水线自动化处理。温故一下相关命令。
Fmpeg 是一个跨平台的音视频处理框架,支持几乎所有格式的音视频文件。它功能强大、命令灵活,堪称“音视频处理瑞士军刀”。以下是常见操作的命令合集,建议收藏备用!
将文件从一种格式转换为另一种格式,例如将 MP4 转为 AVI:
ffmpeg -i input.mp4 output.avi
-i:指定输入文件
提示:FFmpeg 会根据输出文件名自动推断目标格式
从视频中提取音频,例如提取 MP3
ffmpeg -i input.mp4 -vn -acodec mp3 output.mp3
裁剪视频的指定时间段,例如从第 10 秒到第 30 秒:
ffmpeg -i input.mp4 -ss 10 -t 20 output.mp4
# 通常搭配如下
ffmpeg -i input.mp4 -ss 10 -t 20 -c copy output.mp4
ffmpeg -ss 00:20:00 -i "input.mp4" -vframes 1 "01.jpg"
压缩视频文件大小,调整比特率:
ffmpeg -i input.mp4 -vcodec libx264 -b:v 1000k output.mp4
将视频缩放到指定分辨率,例如 1280x720:
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
更改视频帧率,例如从 60fps 转为 24fps:
ffmpeg -i input.mp4 -r 24 output.mp4
例如 h264 编码无损转换至 h265 编码
ffmpeg -c:v h264_cuvid -i input.mp4 -c:v hevc_nvenc -r 24 -c:a copy -x265-params lossless=1 output.mp4;
将视频转为图片序列,例如每秒提取一帧:
ffmpeg -i input.mp4 -vf fps=1 frame_%04d.png
快速查看音视频文件的详细信息:
ffmpeg -i input.mp4
输出包含编码格式、分辨率、时长等详细信息
通常如下所用一键输出视频的编码、帧率、码率
codec=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 input.mp4)
r_frame_rate=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 input.mp4)
bit_rate=$(ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4)
echo -e "$codec\t$r_frame_rate\t$bit_rate\tinput.mp4"
将多个视频文件合并为一个(需确保分辨率、编码一致):
# 创建文件列表 mv.txt
echo "file 'input1.mp4'" > mv.txt
echo "file 'input2.mp4'" >> mv.txt
ffmpeg -f concat -i mv.txt -c copy output.mp4
这个没用过,仅供参考
我仅在这两个环境实操过,其他环境可以参考官方文档,类似文档很详细了
另外结合脚本语言很方便,例如 bash
FFmpeg 的功能远不止这些,熟练使用后,你可以轻松应对音视频处理的各种场。对于我而言,掌握基本功能从视频中导出音频文件使用就行(大部分还用不上,因为还有一些第三方工具帮你自动一键搞定)
欢迎关注我的微信公众号。