运维排忧解难
本文最后更新于:1 小时前
1 常用指令
[!NOTE] 符号说明
指令中小括号()内为选填项,<>为填充项(根据实际变量进行填充)。
1.1 Linux 指令
1.1.1 磁盘扩容
1.1.1.1 已存在磁盘(使用余量扩容分区)
1.1.1.1.1 确认剩余空间
使用 lsblk 或 fdisk -l 查看新增磁盘的设备名(如 /dev/sdb)
1 | |
查看磁盘总容量
/dev/sda总容量为 322.1GB,已分配的分区如下:/dev/sda1(启动分区):1GB/dev/sda2(LVM 物理卷):107.4GBcentos-root(根分区):53.7GBcentos-swap(交换分区):5.3GBcentos-home(用户数据分区):47.3GB
计算未使用空间
sda2的结束扇区为209715199,而/dev/sda总扇区为629145600,未分配空间约为 214.7GB(322.1GB - 107.4GB)查看文件系统
1 | |
1.1.1.1.2 扩容根目录逻辑卷
步骤 1:扩展 Sda2 分区
由于未分配空间位于 sda2 之后,需先扩展 sda2 分区以包含全部磁盘空间:
1 | |
步骤 2:扩展物理卷
将新增空间加入 LVM 物理卷:
1 | |
步骤 3:扩展逻辑卷
- 查看卷组(VG)信息
1 | |
- 扩展根逻辑卷(LV)
1 | |
步骤 4:调整文件系统
根据文件系统类型执行扩容:
- ext4 文件系统:
1 | |
- xfs 文件系统:
1 | |
1.1.1.1.3 验证结果
1 | |
1.1.1.1.4 注意事项
- 备份数据
操作前建议对重要数据备份,避免扩容失败导致数据丢失 - 文件系统类型
通过lsblk -f确认根目录文件系统类型(如 xfs 或 ext4)。 - 在线扩容
若使用 xfs 文件系统,支持在线扩容;ext4 需确保文件系统未损坏。
1.1.1.1.5 扩展场景(可选)
- 调整 home 分区空间
若无需保留home分区数据,可删除/dev/mapper/centos-home,将其空间合并到根目录:
- 备份 home 数据后卸载:
1 | |
- 扩展根逻辑卷:
1 | |
1.1.1.2 新增磁盘
1.1.1.2.1 VSphere 给虚拟机加新硬盘

添加完成硬盘后,重启虚拟机以识别到新硬盘。
1.1.1.2.2 新硬盘创建物理卷(PV)
首先,你需要将 sdb 磁盘转化为物理卷。
1 | |
1.1.1.2.3 扩展卷组(VG)
将这个新的物理卷加入到现有的卷组中
1 | |
1.1.1.2.4 扩展逻辑卷(LV)
现在可以扩展 / 根目录所在的逻辑卷了,以增加 100GB 为例(根据实际情况调整大小)
1 | |
如果你想使用 sdb 上的所有空间
1 | |
1.1.1.2.5 扩展文件系统
最后一步是扩展文件系统以使用新增的空间。这个步骤依赖于你 / 根目录使用的文件系统类型。
如果是 ext4 文件系统
1 | |
如果是 XFS 文件系统
1 | |
1.1.2 检查磁盘空间并清理
你的系统根分区 /dev/mapper/centos-root 已 100% 满了(196G 已用完,仅剩 104K),必须立即清理,否则系统可能崩溃、服务宕机、无法登录。
1.1.2.1 🔍 第一步:快速定位大目录(按大小排序)
运行以下命令,从根目录开始,找出占用空间最大的目录:
1 | |
✅ 输出示例:
1
2
3
4
5150G /var
30G /usr
10G /home
5G /opt
...
重点关注 /var、/tmp、/home、/root、/usr 等目录。
1.1.2.2 🧹 第二步:重点清理常见“临时/日志”目录
1.1.2.2.1 清理系统日志(通常在 /var/log)
1 | |
1.1.2.2.2 清理临时目录
1 | |
1.1.2.2.3 清理 YUM 缓存(如果是 CentOS/RHEL)
1 | |
1.1.2.2.4 清理 Docker(如果你用了 Docker)
1 | |
1.1.2.2.5 清理旧内核(如果 /boot 也满,但你这里 /boot 只用了 5%)
1 | |
1.1.2.3 🔎 第三步:查找大文件(>100MB)
1 | |
常见“罪魁祸首”:
- 日志文件:
*.log、journal、catalina.out(Tomcat) - 数据库 dump 文件:
*.sql、*.bak - 临时下载文件:
/root/*.zip、/tmp/*.tar.gz - 应用缓存:
/home/*/.cache、/var/lib/*
1.1.2.4 💡 第四步:紧急释放空间(如果上述不够)
1.1.2.4.1 方案 A:临时扩容(如果用了 LVM)
但你的 df -h 显示是 LVM(/dev/mapper/centos-root),可检查是否有未分配空间:
1 | |
如果有剩余,可扩容(但需先清理出一点空间才能操作)。
1.1.2.4.2 方案 B:删除无用大文件(谨慎!)
1 | |
⚠️ 切勿删除你不认识的文件! 尤其是
/bin、/sbin、/lib下的文件。
1.1.2.5 ✅ 第五步:预防措施
- 设置 logrotate(自动轮转日志)
1
sudo vi /etc/logrotate.d/your_app - 监控磁盘使用
1
2
3
4# 安装监控工具
sudo yum install -y ncdu
# 交互式查看目录大小
sudo ncdu / - 定期清理脚本
1
2# 添加 cron 任务
echo "0 2 * * 0 /usr/bin/yum clean all" | sudo crontab -
1.1.2.6 🚨 紧急操作建议
你现在 必须立即清理至少 1~2GB 空间,否则:
systemd可能无法写日志- SSH 可能拒绝新连接
- 数据库可能 crash
优先执行:
1 | |
然后再次运行:
1 | |
确认 / 分区 Use% 降到 95% 以下。
完成清理后,建议用 ncdu 工具深入分析:
1 | |
它会交互式显示目录大小,方便你精准定位“空间吞噬者”。
1.1.3 Ssh 连接
-p 指定端口,默认不带则为 22 端口
1 | |
1.1.4 Glusterfs 文件挂载
1 | |
卷名通过 rancher 里找到对应的 volume 查看。
1.1.5 文件传输
通过 ssh 协议用于在本地计算机和远程计算机之间安全地复制文件
- 本地到远程
1 | |
- 远程到本地
1 | |
1.1.6 查看路由表
1 | |
1.1.7 查看资源
查看所有资源占用情况,降序排列,top 默认会实时更新显示的信息,通常每秒刷新一次。
1 | |
- 排序:
- 按 CPU 使用率排序:按
P键。 - 按内存使用率排序:按
M键。 - 按执行时间排序:按
T键。
- 按 CPU 使用率排序:按
- 搜索进程:
- 输入
u键,然后输入用户名,可以显示该用户的所有进程。 - 输入
p键,然后输入进程 ID(PID),可以快速定位到特定进程。
- 输入
- 过滤进程:
- 输入
U键,然后输入用户名,可以过滤显示该用户的进程。 - 输入
P键,然后输入进程 ID(PID),可以过滤显示该 PID 的进程。
- 输入
- 杀死进程:
- 输入
k键,然后输入进程 ID 和要发送的信号(默认是 SIGTERM,即 15),可以杀死进程。
- 输入
1.1.8 查看进程
ps 命令在 Unix-like 系统中用于显示当前进程的状态。
1 | |
参数说明
USER:进程所有者的用户名。PID:进程的 ID。%CPU:进程占用的 CPU 百分比。%MEM:进程占用的内存百分比。VSZ:虚拟内存大小(Virtual Size)。RSS:实际内存大小(Resident Set Size)。TTY:进程终端类型。STAT:进程状态。START:进程启动时间。TIME:进程占用 CPU 的时间。COMMAND:启动进程的命令。
常见组合
- ps aux (–sort=-%mem/cpu): 显示所有进程(按照内存/CPU 使用率降序排列进程)
- ps -ef:显示所有进程的完整信息。
- ps -p PID:显示特定进程的详细信息。
1.1.9 查看内存
以人类可读的方式展示内存使用状态。
1 | |
1.1.10 查看硬盘
以人类可读的方式展示磁盘分配状态。
1 | |
1.1.11 查看系统日志
journalctl 是 systemd 系统服务管理器的一部分,用于查询和显示日志消息。它提供了一种方便的方式来查看系统日志,特别是与特定服务或单元相关的日志。
1 | |
查看系统日志
1 | |
查找 cpu 相关日志:
1 | |
1.1.12 查看编辑文件
1.1.12.1 搜索文件
按照关键词搜索含有关键词的文件
1 | |
1 | |
1 | |
搜索指定文件名的文件
1 | |
1.1.12.2 查看文件数量
1 | |
1.1.12.3 查看目录
列出当前目录下的文件和文件夹
1 | |
常见搭配
- ls -lh:组合使用
-l和-h选项,以易读的格式显示文件大小。 - ls -l:以长列表格式显示文件详细信息,包括权限、所有者、大小和最后修改时间。
- ls -lt:以修改时间排序,最新修改的文件排在最前面。
- ls -lS:以文件大小排序。
- ls -a:显示所有文件,包括以点(
.)开头的隐藏文件。 - ls -R:递归地列出所有子目录的内容。
- ls -F:在每个文件名后添加一个字符以指示文件类型,例如,
/表示目录,*表示可执行文件。 - ls -o:显示文件所有者和组,但不显示组名。
- ls –color:使用颜色来区分不同类型的文件。
- ls *.txt:列出当前目录下所有的
.txt文件。
- ls -lh:组合使用
参数解释:
drwxr-xr-x 10 root root 4.0K Feb 22 21:41 clash- d:目录/文件
- rwx:文件所有者的权限,
r代表可读(read),w代表可写(write),x代表可执行(execute) - r-x:文件所有者同组的用户(group)的权限,可读可执行但不可写
- r-x:其他用户(others)的权限,可读可执行但不可写
- 10:硬链接指向这个目录的个数,目录至少为2(一个是
.表示当前目录,另一个是..表示父目录),加上目录下文件和子目录的数量。 - root root:文件所有者和组的名称。
- 4.0K:目录占用空间大小(不包括子文件和子目录)。
- Feb 22 21:41:目录最后修改的日期和时间。
- clash:目录名称。
1.1.12.4 查看内容
查看文件内容,打印在控制台
1 | |
1.1.12.5 新建文件
新增一个文件,或写入内容到文件中
1 | |
1.1.12.6 编辑内容
使用 Vim 编辑器编辑文件
1 | |
- 常见操作:
- i:进入插入写模式
- esc:退出当前模式
- :指令模式
- :q:直接退出
- :wq:保存退出
1.2 K8s 和 Docker 相关指令
1.2.1 K8s
1.2.1.1 集群
获取 prod 集群中所有节点信息
1 | |
1.2.1.2 节点
获取指定命名空间下的所有 pod
1 | |
获取指定 pod 的详情(可根据 event 排查 pod 的错误信息)
1 | |
条件查询指定命名空间下指定状态的 pod 并批量删除
1 | |
eg:
1 | |
强制删除 pod
1 | |
1.2.1.3 Pod
启动定时任务
1 | |
启动定时任务并查看日志
1 | |
1.2.1.4 Deployment
1.2.1.4.1 查看 deployment 的标签
1 | |
1.2.1.4.2 实时查看控制台日志
1 | |
1.2.1.5 复制文件
1 | |
1.2.1.6 创建 Configmap
- 命令创建
通过参数
--from-literal直接指定键值对。这种方式比较适用于临时测试使用,而且不适合配置很多的情况。
1 | |
- 文件创建
通过参数
--from-file来指定文件。查看内容如下:
1 | |
1.2.2 Docker
1.2.2.1 配置镜像
为镜像仓库配置下载源,查看 /etc/docker/daemon.json 文件来确定当前配置的镜像源,如果该文件不存在或为空,则默认使用 Docker 官方镜像源。
- 查看镜像源配置
1 | |
- 修改配置
多个镜像源以逗号分隔
1 | |
常见镜像源:
- public-image-mirror
- ISCAS 开源镜像站
- docker.rainbond.cc
- 网易云镜像源
- icu紧急镜像源
- 阿里云镜像源
- 上海交大镜像站
- 南京大学镜像站
- DockerHub国内镜像源列表-20240618
- 从 Docker Hub 拉取镜像受阻?这些解决方案帮你轻松应对
- 国内无法拉取Docker镜像了?这些方法拯救你的Docker-腾讯云开发者社区-腾讯云
测速(测速前先移除本地的镜像!)
docker rmi nginx:latest
time docker pull nginx:latest
- 重启服务更新配置
1 | |
1.2.2.2 保存镜像
将指定本地镜像保存为 tar 压缩包
1 | |
1.2.2.3 加载镜像
根据指定镜像压缩包加载镜像到本地
1 | |
1.2.2.4 删除镜像
删除所有未使用的镜像,容器和存储卷。
1 | |
1.2.2.5 更新镜像
对已有的变更环境进行保存以便于 pod 重启后维持最新环境
1 | |
OPTIONS-a或--author:设置镜像的作者字段。-c或--change:应用 Dockerfile 指令来创建镜像。-m或--message:提交时的说明信息。-p或--pause:提交时暂停容器运行(默认为 true)。
CONTAINER是你要提交的容器的 ID 或名称。REPOSITORY是新创建镜像的仓库名称。TAG是可选的,用于给镜像指定一个标签,如果不指定,默认标签是latest。
1.3 MySQL 指令
1.3.1 找到配置文件位置
1 | |
1.3.2 查看日志所在位置
1 | |
2 常见问题
[!warning] Tips
- 重启(物理机、虚拟机、服务、pod 等) 可能是
最直接常见的办法,但不是最有效的办法,具体问题具体分析,重在根据问题逐步搜索的排查思路,自顶向下排查,自底向上解决。- 遇到问题不要慌,众里寻它先百度,属是不行再问路,先思考后动脑,多学多看多实践,能力日益节节高。
2.1 镜像无法拉取
- 原因:由于国内防火墙导致国外官方镜像仓库被墙无法拉取镜像,本地镜像库缓存导致拉取时没有找到最新镜像,docker 网络问题,系统网络问题
- 办法:
- 出国旅游:windosw 开启魔法拉取镜像后通过 docker save 和 load 转移镜像,并 push 到本地私有镜像仓库留存。
- 取而代之:寻找国内镜像源仓库,直接拉取国内镜像仓库的镜像到本地,并推送到本地私有仓库留存。(国内镜像仓库不稳定,可能会清除镜像)
- 重启 docker:docker pull 卡在 waiting 则可能是网络问题,将 pod 所在节点的 docker 进行重启。
- 检查 hosts 添加记录:
cat /etc/hosts记录格式:ip domain - 重启系统网络:
sudo systemctl restart NetworkManager
2.2 内存/硬盘满载/溢出
- 原因:随着时间的累积和负载变化,内存或硬盘资源可能会不够,虚拟机负载过大,无法提供正常响应。
- 办法:
- 内存:清理无用进程(kill),重启虚拟机(reboot),扩容内存(vcenter 扩大虚拟机内存)
- 硬盘:查看磁盘分区和挂载情况(df -h),清理无用文件(rm -rf),转移文件(mv),硬盘扩容(分配更多分布式存储容量,添加一块磁盘并进行磁盘分区)
2.3 挂载卷存储满载
- 原因:挂载的数据卷存储容量有限,当满载后无法在挂载目录下新增目录或文件。
- 办法:
- 清理挂载目录下无用的文件,腾出可用空间
- 对挂载卷进行扩容,增加其存储容量。
2.4 CPU 核心过多软锁定
- 问题描述:
1 | |
- 原因:日志表明系统遇到了一个“软锁定”(soft lockup)的情况。这通常意味着某个进程或线程在 CPU 上运行了很长时间,导致系统监视器认为它可能已经冻结或卡住。
- 死锁:一个或多个进程可能陷入了死锁状态,导致 CPU 无法处理其他任务。
- 资源竞争:进程之间可能存在资源竞争,导致 CPU 长时间占用。
- 无限循环:代码中可能存在无限循环,导致 CPU 被持续占用。
- 内核问题:可能是内核本身的问题,比如驱动程序或内核补丁引起的问题。
- 高负载:系统可能由于高负载而无法及时响应。
cpu stuck 软锁定的原因有很多种,比如供电不足、虚拟机 cpu 核心数超过物理机核心数、虚拟机/物理机 cpu 太忙或磁盘 IO 太高、linux 内核 bug 等
- 办法:
- 使用
cat /var/dmesg或journalctl查看内核日志。 - 查看核心数是否过多(eg:32),关机减少核心数(eg:12);所有虚拟机的虚拟 cpu 加起来可能会超过物理机实际 cpu 线程数,但单个虚拟机的虚拟 cpu 处理器数不能超过物理机线程数,一般虚拟 cpu 个数和物理机 cpu 个数保持一致,总处理器数设为物理机的一半。(参考:虚拟机如何选择处理器和内核数量,实现最佳性能_虚拟机设置cpu处理器只有处理内核数量-CSDN博客)
- 使用
2.5 内存占用虚高
vmware虚拟机内存异常占用问题一例_esxi8.0占用内存怎么处理
2.6 MySQL 故障
参考:MySQL启动报错[ERROR] InnoDB: Trying to access page number 4294967295 in space 0, space name innodb
2.6.1 K8s 集群连不上
k8s 集群 kubelet日志报错 command failed“ err=“failed to parse kubelet flag: unknown flag: –network-p_command failed” err=”failed to parse kubelet flag
kubelet 版本节点之间不一致
查看状态和日志:
1 | |
查看版本:
1 | |
版本降级:
1 | |
重启 kubelet:
1 | |
2.7 Rancher 故障
2.7.1 Rancher 连不上 Apiserver
原因:cni 上层的网络组件出现了问题,可能是网络相关的 pod(kube-system 空间下或者直接-A 查看所有涉及到网络相关的 pod)挂了,重启后拉不到镜像导致网络不可用。
解决:排查网络相关组件 pod 是否正常,不正常则根据 event 和 status 进行解决。
2.8 集群域名修改
2.8.1 修改 242nginx 域名配置
修改 admin/nginx 目录下的 nginx 域名配置。
再使用 ./config 脚本更新重启 nginx 以生效配置。
2.8.2 改 233gitlab 配置文件里的域名
配置文件位置:/etc/gitlab/gitlab.rb
修改 gitlab 配置后重启,同步修改集群内的 gitlab-runner 配置(configmap)里的域名。
2.8.3 改 102harbor 配置文件里的域名
配置文件位置:/opt/harbor_1_7/harbor.cfg
修改 harbor 配置后重启,同步修改集群内的所有镜像的仓库地址(基础设施、定时任务、应用服务等)。
2.8.4 修改 kubelet 的配置仓库鉴权域名
配置文件位于:/var/lib/kubelet/config.json
修改里面的仓库域名。
2.9 Harbor 镜像仓库清理
- 定位清理目标项目:登录 harbor 镜像仓库(registry.csdcinfo.cn),进入需要清理的项目。
- 过滤出待删除仓库镜像:进入需要删除的仓库,按照日期升序多选选中需要删除的镜像。

- 删除选中的 tag 镜像:在仓库中删除前面选中的 tag 镜像。

- 清理磁盘空间:上述删除仅为软删除并没有释放磁盘空间,需要进入系统管理的垃圾清理点击立即清理垃圾,此时会将前面软删除的镜像实际删除释放出占用的空间。

2.10 Mongodb 启动失败
问题:Rollback failed with unrecoverable error: UnrecoverableRollbackError: not willing to roll back more than 86400 seconds of data. Have: 263733 seconds
原因:分片挂掉没有及时启动,导致数据不一致,无法启动。
解决办法:
- 关闭 mongo 集群,找到这个分片的主分片,把它的整个目录复制到无法启动的那台分片上
- 增大同步时间限制,添加环境变量 MONGODB_EXTRA_FLAGS = –setParameter=rollbackTimeLimitSecs=172800,通过以下指令验证:mongo -u username -p password –authenticationDatabase admin –eval “db.adminCommand({getParameter: 1, rollbackTimeLimitSecs: 1})”
3 常用镜像
3.1 基础设施
3.1.1 Longhorn
longhornio/csi-attacher:v2.2.1-lh1
longhornio/csi-provisioner:v1.6.0-lh1longhornio/csi-resizer:v0.5.1-lh1
longhornio/csi-snapshotter:v2.1.1-lh1
longhornio/longhorn-engine:v1.1.0
longhornio/longhorn-instance-manager:v1_20201216
longhornio/longhorn-manager:v1.1.0
longhornio/csi-node-driver-registrar:v1.2.0-lh1
longhornio/longhorn-ui:v1.1.0
3.1.2 数据库
3.1.2.1 关系型
busybox:1.32
registry.csdc.info/publish/mysql:5.7.31
mysql:5.7.31
nacos/nacos-mysql-master:latest
nacos/nacos-mysql-slave:latest
prom/mysqld-exporter
3.1.2.2 非关系型
3.1.2.2.1 Redis
registry.csdc.info/publish/redis507
registry.csdc.info/publish/redis-exporter135
oliver006/redis_exporter:v1.3.4
registry.csdc.info/publish/redisinsight:latest
3.1.2.2.2 Neo4j
neo4j:3.5
3.1.2.2.3 ELK
registry.csdc.info/publish/elasticsearch-ik-py:7.16.2
registry.csdc.info/publish/elasticsearch-ik:7.9.2
docker.elastic.co/kibana/kibana:7.16.2
registry.csdc.info/elk/logstash/logstash:7.16.2
docker.elastic.co/eck/eck-operator:1.9.1
3.1.2.2.4 Mongodb
registry.csdc.info/publish/mongodb424:latest
registry.csdc.info/publish/mongodb-exporter:latest
3.1.2.3 OSS
minio/minio:RELEASE.2022-03-17T06-34-49Z
3.1.3 反向代理
nginx:stable
nginx:1.7.9
nginx:1.15
3.1.4 微服务中间件
3.1.4.1 Nacos
nacos/nacos-server:0.9.0
registry.csdc.info/publish/nacos/nacos-server:0.9.0
nacos/nacos-server:2.0.3
registry.csdc.info/publish/nacos221:latest
3.1.4.2 RabbitMQ
docker.io/bitnami/rabbitmq:3.11.6-debian-11-r0
3.1.4.3 Seata
docker.io/seataio/seata-server:latest
registry.csdc.info/etms/seata-server:latest
3.1.5 Gitlab
registry.csdc.info/publish/docker:stable-dind
gitlab/gitlab-runner:alpine-v13.7.0
gitlab/gitlab-runner-helper:x86_64-943fc252
3.1.6 Harbor
harbor.newershoe.com:8443/library/etcd
3.1.7 监控看板
3.1.7.1 Grafana
rancher/grafana-grafana:7.1.5
rancher/prometheus-auth:v0.2.1
grafana/loki:2.4.2
grafana/grafana:8.3.5
grafana/promtail:2.1.0
3.1.7.2 Prometheus
rancher/prom-prometheus:v2.18.2
rancher/coreos-prometheus-config-reloader:v0.39.0
rancher/jimmidyson-configmap-reload:v0.3.0
rancher/mirrored-library-nginx:1.19.9-alpine
3.1.8 SSH
registry.csdc.info/publish/panubo-sshd:latest
panubo/sshd
3.1.9 其他
registry.csdc.info/publish/dingtalk-chatbot:1.0.3
registry.csdc.info/publish/databasetools:0.0.2
registry.csdc.info/publish/rsync-ssh:latest
rancher/rancher-agent:v2.5.8
rancher/fleet:v0.3.1
rancher/gitjob:v0.1.8
rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1
rancher/nginx-ingress-controller:nginx-0.35.0-rancher1
rancher/calico-kube-controllers:v3.16.1
rancher/calico-cni:v3.16.1
rancher/calico-pod2daemon-flexvol:v3.16.1
rancher/calico-node:v3.16.1
rancher/coreos-flannel:v0.13.0-rancher1
rancher/coredns-coredns:1.7.0
rancher/cluster-proportional-autoscaler:1.8.1
rancher/metrics-server:v0.3.6
rancher/hyperkube:v1.19.3-rancher1
registry.csdc.info/publish/k8s-sidecar:1.15.1
registry.csdc.info/publish/kube-state-metrics:v2.2.4
quay.io/prometheus/alertmanager:v0.23.0
jimmidyson/configmap-reload:v0.5.0
quay.io/prometheus/node-exporter:v1.3.0
prom/pushgateway:v1.4.2
quay.io/prometheus/prometheus:v2.31.1
rancher/rancher-operator:v0.1.3
registry.csdc.info/publish/tomcat:7
registry.csdc.info/elk/filebeat:7.9.2
registry.csdc.info/publish/locust-tasks
registry.csdc.info/publish/kubectl:v1.14
3.1.10 Research
conda:fus
centos:latest
nvidia/cuda:10.1-devel-ubuntu18.04
nvidia/cuda:10.1-cudnn7-devel-centos7
4 数据备份
4.1 备份清单
4.1.1 数据库备份
应用数据库备份(每天):
- K8s 内备份:
- srdb: mysql,mongodb
- smdb: mysql
- hsas: mysql
- cweb(每月):mysql
- dbServ(220)上备份:
- cmis:mysql(auth),oracle
4.1.2 文件备份
应用文件备份:
- K8S 内备份(每天):
- srdb
- smdb
- hsas
- cmis
- cweb(每月)
FTP 文件备份:
210 上备份(每早上 8 点):autosync_push.sh
GitLab 代码备份(每周天):autobackup.sh
4.2 注意事项
oracle 数据库定时任务无法备份如下报错:
ORA-31634: 作业已存在
ORA-31664: 如果采用默认值, 将无法构造唯一的作业名
参考:ORA-31634: 作业已存在
原因:job 队列满了。
解决:
1. 先查询出所有未运行的 Jobs:SELECT 'DROP TABLE ' || OWNER_NAME ||'.'|| JOB_NAME ||';' FROM DBA_DATAPUMP_JOBS WHERE STATE='NOT RUNNING';
2. 删除查询到的定时任务计划表:DROP TABLE CMIS.SYS_EXPORT_SCHEMA_xx;
5 应用部署
5.1 新建项目
5.1.1 Gitlab
在 gitlab 新建一个要开发部署的项目
5.1.2 Harbor
在 harbor 镜像仓库新建一个私有项目,后续该应用的所有镜像都存储在该镜像仓库,便于后续上传和拉取应用镜像。
[!NOTE] 注意
harbor 以 docker 容器化部署的,重启 102 虚拟机或者 docker 后需要启动所有相关的容器才能恢复正常。
6 宿主机 IP 更换
- 将 ESXi 主机置于维护模式。(可跳过)
- 使用 ESXi 主机 UI Client 或 KVM 或 ssh 直接连接。(可跳过)
- 更改 IP 地址并更新 DNS 服务器。
1
2
3cp /etc/vmware/esx.conf.backup /etc/vmware/esx.conf #备份宿主机配置文件
esxcli network ip interface ipv4 set -i vmk0 -I 192.168.88.206 -N 255.255.255.0 -t static #修改ip
esxcli network ip interface ipv4 get #查看是否生效 - 将 ESXi 主机取消维护模式,迁移原虚拟机回来。(可跳过)
- 编辑虚拟机网络状态为已连接,否则 ping 不通。
[!NOTE] 注意
重启 harbor,openrestry。
7 RKE 调整集群节点
- 到目标集群的 etcd0 节点上,一般在 home/root 目录或者/home/docker 目录下有 rke 及 cluster.yml 配置文件。
- 修改
cluster.yml配置文件,对节点或其他配置进行修改。 - 通过
rke up --update-only --config cluster.yml指令更新集群配置。
- 注意所有节点的 docker 版本要和 rke 支持的版本对应,RKE 1.2.1 仅支持 Docker 1.13.x ~ 19.03.x。
RKE 1.3.24 支持 Docker 20.10.x ~ 26.x,不对应就降低 docker 版本。- 如果是新增节点按照下面详细过程配置添加,如果是移除节点重新添加则 cluster.yml 文件先注释掉节点配置,更新集群一遍后再取消注释逐步加 role(先加 worker 再加 controller 或 etcd 等)。
7.1 详细过程
所有 etcd 和 master 和 worker 节点的
/etc/hosts添加上所有节点名称和 ip 对应解析。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22192.168.88.129 etcd0 etcd0.linux.csdc
192.168.88.128 etcd1
192.168.88.127 etcd2
192.168.88.126 master0
192.168.88.125 master1
192.168.88.124 master2
192.168.88.123 build0
192.168.88.122 node0
192.168.88.121 node1
192.168.88.120 node2
192.168.88.119 node3
192.168.88.118 node4
192.168.88.117 node5
192.168.88.116 node6
192.168.88.115 node7
192.168.88.190 gpu
192.168.88.192 gpu2 h3cgpu
192.168.88.194 gpu3 h3cgpu2
192.168.88.196 gpu4 h3cgpu3
192.168.88.102 registry.csdcinfo.cn registry.csdc.info
192.168.88.233 gitlab.csdcinfo.cn gitlab.csdc.info
192.168.88.231 rancher.csdcinfo.cn rancher.csdc.infovim /etc/sysctl.conf1
2
3net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1刷新配置
1
2modprobe br_netfilter
sysctl -p关闭防火墙
1 | |
- 关闭 selinux
1 | |
主机 swap 分区设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14#永久关闭,需要重启操作系统生效。
sudo swapoff -a
# 注释掉 /etc/fstab 里所有 swap 行
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 应该无输出
swapon --show
free -h # Swap 行应为 0B
# cat /etc/fstab
···
#/dev/mapper/centos_192-swap swap defaults {} {}
#临时关闭,不需要重启操作系统,即刻生效。
# swapoff a时间同步
1
2
3yum -y install ntpdate
crontab -e
0 */1 * * * ntpdate time1.aliyun.com添加 rancher 用户
使用 CentOS 时,不能使用 root 账号,因此要添加专用的账号进行 docker 相关操作。重启系统以后才能生效,只重
的!重启后,rancher 用户也可以直接使用 docker ps 命令1
2
3useradd rancher
usermod -aG docker rancher
echo 123 | passwd --stdin rancher复制 ssh 证书
从 rke 二进制文件安装主机上复制,如果已经复制,则可不需要重复性复制。
- 复制证书
1
ssh-copy-id rancher@worker02 - 验证 ssh 证书是否可用
在 rke 二进制文件安装主机机测试连接其它集群主机,验证是否可使用 docker ps 命令即可。1
ssh rancher@worker02
8 ack 集群 arthas 调试方法
1 | |
9 手动调整专网默认缺省路由
1 | |
9.1 创建 Systemd 服务固化路由配置
适用于使用 Systemd 的现代 Linux 系统(CentOS 7+, Ubuntu 16.04+)
- 创建服务文件:
1 | |
- 写入以下内容:
1 | |
- 启用并启动服务:
1 | |
10 Glusterfs 常用操作
10.1 查看容量
1 | |
10.2 扩容
在 170 主节点上执行以下命令
1 | |
11 K8s静态路由配置
本地Windows如果需要能够访问k8s的内部网络,需要做静态路由:
测试环境
1
route add 10.44.0.0 mask 255.255.0.0 -p 192.168.88.115正式环境
1
route add 10.42.0.0 mask 255.255.0.0 -p 192.168.88.133研究环境
1
route add 10.64.0.0 mask 255.255.0.0 -p 192.168.88.126查看静态路由表
1
route print
