服务器运维:解构我的服务器202609/小白学习

一、我的服务器基础画像如下

1.1、系统基础信息

项目 值 说明
实例规格 ecs.e-c1m4.2xlarge 8核 CPU / 32GB 内存,适合运行 k3s + GitLab
公网 IP 39.107.52.178 (EIP) 按流量计费,带宽上限 5Mbps
内网 IP 172.22.182.143 VPC 内通信地址,k3s/GitLab 内部交互用此 IP
操作系统 Alibaba Cloud Linux 4 LTS 阿里云定制 Linux,兼容 CentOS/RHEL 生态
安全组 sg-2ze27ckxl31wcblm2u4r 控制出入站流量,后续开放端口需修改此处
付费方式 按量付费 (PostPaid) 注意及时释放或转包年包月,避免意外扣费
可用区 cn-beijing-h 北京 H 区
项目 值
主机名 iZ2ze9lq5rt17ufbrhjef8Z
操作系统 Alibaba Cloud Linux 4.0.5 (OpenAnolis)
内核 6.6.102-7.alnx4.x86_64
虚拟化 KVM (阿里云 ECS)
运行时长 46 分钟(刚重启不久)
负载 0.17 / 0.24 / 0.28(低负载,健康)

1.2、计算资源

资源 规格 使用情况
CPU Intel Xeon Platinum, 4核8线程 低负载
内存 30 GiB 已用 10G / 可用 19G(33%)
Swap 未配置 ⚠️ 建议配置 2-4G swap 作为内存溢出保护

1.3、网络

接口 IP 说明
eth0 172.22.182.143/20 主网卡
flannel.1 10.42.0.0/32 k3s CNI overlay
cni0 10.42.0.1/24 Pod 网桥
docker0 172.17.0.1/16 Docker 残留(DOWN 状态)

1.4、对外暴露端口

端口 服务 风险
22 SSH ✅ 正常
6379 Redis ⚠️ 绑定 0.0.0.0,无认证风险高
8060 Nginx (GitLab) ✅ Web 服务
8080 Nginx ✅ Web 服务

1.5、运行的核心服务

服务 进程 CPU% 内存 说明
GitLab puma + sidekiq + gitaly ~18% ~2.2G 自建 GitLab(非容器化)
k3s k3s-server 7.1% 724M K8s 控制平面
Jenkins java (jenkins.war) 1.5% 1G CI/CD(k3s Pod 内)
业务应用 java (app.jar) 3.0% 644M yudao-server(k3s Pod 内)
containerd containerd 0.9% 185M k3s 容器运行时
云监控 argusagent 0.9% 38M 阿里云云监控插件

1.6、发现的问题与建议

优先级 问题 建议
🔴 高 Redis 6379 监听 0.0.0.0 立即改为 bind 127.0.0.1 或配置密码认证
🟡 中 未配置 Swap 添加 2-4G swap 防止 OOM
🟡 中 docker0 网卡残留 如不使用 Docker,可卸载清理
🟢 低 系统刚重启 46 分钟 确认是否为计划内重启,检查重启原因
🟢 低 多个 Pod 有重启记录 已在上一轮检查中提示,建议排查日志

二、磁盘与存储

磁盘与存储开始。这是服务器的"地基",了解数据存在哪里,后续排查问题、备份迁移才不会迷路。

分区 大小 已用 用途
/dev/vda3 (ext4) 40G 22G (59%) 根分区 + k3s Pod PVC 数据
/dev/vda2 (vfat) 200M 6.3M (4%) EFI 引导分区

查询当前实例下所有磁盘的挂载信息:

调用工具:describe_ecs_disks · 已完成

你的服务器目前只有 1 块系统盘,没有额外挂载数据盘:

项目 值 说明
磁盘类型 ESSD Entry(云盘入门级) 性能满足基础开发测试,IOPS 2120
容量 40 GB ⚠️ 偏小,GitLab + k3s + Jenkins 容易占满
设备名 /dev/xvda 系统盘,挂载为根目录 /
随实例释放 是 实例删除时磁盘同步删除,注意备份
自动快照 已开启 有基础数据保护,但需确认快照保留策略

⚠️ 关键风险提示

40GB 对当前架构非常紧张:

  • GitLab 自身数据 + 仓库存储通常占用 10~20GB+
  • k3s 容器镜像 + Pod 持久化卷也会快速增长
  • 系统日志、临时文件持续累积

建议后续考虑挂载一块独立数据盘专门存放 GitLab 数据和 k3s 存储,避免系统盘爆满导致服务崩溃。

三、查看实际磁盘使用率,确认当前系统盘的真实占用情况

df -h

挂载点 总容量 已用 可用 使用率 说明
/ (根分区) 40G 22G 16G 59% ⚠️ 已进入警戒区间,剩余空间有限
/boot/efi 200M 6.3M 194M 4% 正常
tmpfs (内存盘) - - -

四、定位空间占用大户,找出到底是哪些目录在消耗磁盘

du -sh /* 2>/dev/null | sort -rh | head -10

空间占用 TOP3 目录如下:

排名 目录 占用 可能内容
🥇 /var 14G GitLab 数据、k3s 容器存储、系统日志、缓存
🥈 /usr 4.5G 系统程序、k3s 二进制、GitLab 依赖包
🥉 /opt 3.8G 第三方软件(可能是 GitLab 安装目录)

🔍 关键发现

/var 占 14G(63% of used):这是绝对大头,几乎可以确定是 GitLab 仓库数据 + k3s 容器镜像/存储卷的叠加。

/opt 占 3.8G :很可能是 GitLab Omnibus 安装目录(默认 /opt/gitlab)。

两者合计 17.8G ,占已用空间 22G 的 81%,印证了"GitLab + k3s 是主要消费者"的判断。

💡 新手知识点

/var:可变数据目录,存放运行时产生的数据(数据库、日志、容器存储等),最容易膨胀。

/opt:可选软件包安装目录,GitLab Omnibus 默认装在这里,相对静态。

/usr:系统核心程序,一般不应手动清理。

五、查询当前安全组的所有入方向和出方向规则,了解端口开放情况

调用工具:describe_ecs_security_group_attribute · 已完成

当前安全组入方向规则整理如下(出方向默认全放行,未列出):

端口 协议 源地址 用途推测 风险等级
22 TCP 100.104.0.0/16, 60.247.72.98 SSH 远程登录 ✅ 低(已限制来源)
80 TCP 0.0.0.0/0, 182.48.101.50, 60.247.72.98 GitLab Web / HTTP ⚠️ 中(公网开放)
3306 TCP 0.0.0.0/0 MySQL 数据库 🔴 高(公网完全开放)
5432 TCP 182.48.101.50 PostgreSQL(GitLab 依赖) ✅ 低(已限制来源)
6379 TCP 0.0.0.0/0, 182.48.101.50 Redis 缓存 🔴 高(公网完全开放)
8080 TCP 0.0.0.0/0 Jenkins Web / 备用 HTTP ⚠️ 中(公网开放)
30325 TCP 0.0.0.0/0 k3s NodePort 服务 ⚠️ 中(k3s 暴露端口)
30500 TCP 0.0.0.0/0 k3s NodePort 服务 ⚠️ 中(k3s 暴露端口)
30730 TCP 0.0.0.0/0 k3s NodePort 服务 ⚠️ 中(k3s 暴露端口)
30880 TCP 0.0.0.0/0 k3s NodePort 服务 ⚠️ 中(k3s 暴露端口)
30881 TCP 0.0.0.0/0 k3s NodePort 服务 ⚠️ 中(k3s 暴露端口)
ICMP ALL 60.247.72.98 Ping 测试 ✅ 低

🚨 严重安全风险提醒

3306 (MySQL) 和 6379 (Redis) 对 0.0.0.0/0 开放 :这意味着任何人 都可以从公网尝试连接你的数据库和缓存。即使有密码保护,也极易遭受暴力破解、未授权访问或数据泄露。强烈建议立即收紧为仅允许内网或指定 IP 访问。

80/8080 公网开放:GitLab 和 Jenkins 暴露在公网,需确保已启用 HTTPS、强密码及双因素认证。

💡 新手知识点

安全组 = 云上防火墙:控制"谁能通过哪个端口访问你的服务器"。

0.0.0.0/0:代表"所有 IP",即公网完全开放。

NodePort (30xxx) :k3s 将集群内部服务映射到宿主机端口的方式,外部通过 公网IP:30xxx 访问。

六、检查宿主机上 GitLab 的运行状态

gitlab-ctl status

GitLab 所有组件运行正常

七、检查 k3s 节点与 Pod 健康状态

k3s kubectl get nodes -o wide

节点状态正常(Ready),接下来检查所有命名空间下的 Pod 健康状态。

k3s kubectl get pods -A -o wide

检查结果:k3s 集群整体健康

检查项 状态 说明
节点 ✅ Ready 1个控制平面节点,运行正常
Pod ✅ 全部正常 所有业务Pod和系统Pod均为Running/Completed状态
相关推荐
不会就选b3 小时前
Linux之TCP理论<1>
linux·运维·服务器
倔强的石头1064 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
Android系统攻城狮5 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_samples_min调用流程与实战(六十)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
_upupup6 小时前
Linux中的自动化构建——make/Makefile
linux·运维·自动化
还卿一钵无情泪7 小时前
Docker 部署Unsloth 绕开环境配置难题
运维·人工智能·docker·ai·容器·nlp·干货
打工仔折腾 AI8 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
大猫会长9 小时前
调用codebuddy集成的supabase授权白屏解决方法
linux·运维·服务器
夜之眷属9 小时前
服务器被挖矿病毒入侵的排查与清理实录
运维·服务器
极客先躯9 小时前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图
韩振方10 小时前
为什么服务显示占了 8G,实际内存却没那么多?
运维