Kubernetes常用操作与概念总结--从服务器导出mongo数据,并下载到本地

Kubernetes 常用操作与概念总结

本文总结 K8s 日常运维中的常见概念、命令和排错思路,适合快速查阅。


📑 目录


一、核心概念:Pod 与 Container

概念 说明
Pod(容器组) K8s 最小调度单位,包含一个或多个容器
Container(容器) 实际运行进程的单元,定义在 Pod 内
  • Pod 名:如 my-app-abc123-xyz99
  • 一个 Pod 可以有多个容器(如 1/2 READY 表示 2 个容器中有 1 个就绪)
  • resources(CPU、内存)配置在容器上,而不是 Pod 上

二、资源命名规则

Pod 命名格式

复制代码
<Deployment名>-<ReplicaSet哈希>-<Pod后缀>

示例my-app-abc123-xyz99

部分 含义
my-app Deployment 名称
abc123 ReplicaSet 的哈希值
xyz99 该 Pod 的唯一后缀

易错点

  • 编辑 Deployment 时用:kubectl edit deployment <Deployment名>
  • 不要 用 Pod 全名:kubectl edit deployment my-app-abc123-xyz99 ❌(会报 NotFound)

三、修改 Pod 资源配置

1. 编辑 Deployment(推荐)

资源配置写在 Deployment 的 Pod 模板中,修改 Deployment 才能持久生效:

bash 复制代码
kubectl edit deployment <Deployment名> -n <命名空间>

示例

bash 复制代码
kubectl edit deployment my-app -n default

2. 资源配置结构

yaml 复制代码
resources:
  limits:      # 最大可使用资源
    cpu: 100m
    memory: 100Mi
  requests:    # 调度时申请的保证资源
    cpu: 20m
    memory: 40Mi

3. 常用单位

单位 含义
m 毫核,1000m = 1 核 CPU
Mi Mebibytes(1024 进制)
Gi Gibibytes

4. 资源翻倍示例

配置项 原值 翻倍后
limits.cpu 50m 100m
limits.memory 50Mi 100Mi
requests.cpu 10m 20m
requests.memory 20Mi 40Mi

四、命名空间(Namespace)

  • kubectl 默认操作 default 命名空间
  • 其他命名空间需用 -n <namespace> 指定
  • 跨命名空间时,不加 -n 会报 NotFound

示例

bash 复制代码
# 指定命名空间
kubectl get pod -n default

# 查看所有命名空间
kubectl get pod -A

五、编辑资源后的保存与生效

1. 使用 vim/vi 编辑时

kubectl edit 会打开 vim/vi:

操作 命令
保存并退出 Esc:wq → 回车
不保存强制退出 Esc:q! → 回车
只保存不退出 Esc:w → 回车

2. 使修改生效

修改 Deployment 后,需要触发 Pod 重建:

bash 复制代码
# 方式一:滚动重启(推荐)
kubectl rollout restart deployment/my-app -n default

# 方式二:删除 Pod,由 Deployment 自动重建
kubectl delete pod my-app-abc123-xyz99 -n default

六、MongoDB 数据导出(mongodump)

1. 导出指定数据库

bash 复制代码
mongodump --uri 'mongodb://user:password@<host>:<port>/<数据库名>?authSource=admin' \
  --out /tmp/backup/<数据库名>_backup \
  --forceTableScan

2. 导出所有数据库

bash 复制代码
mongodump --uri 'mongodb://user:password@<host>:<port>/?authSource=admin' \
  --out /tmp/backup/mongo_full_backup \
  --forceTableScan

3. 参数说明

参数 含义
--uri MongoDB 连接字符串(用户名、密码、主机、端口、认证库)
--out 导出文件保存目录
--forceTableScan 强制使用表扫描(当索引不可用时使用)

4. 副本集连接示例

bash 复制代码
mongodump --uri 'mongodb://user:password@<host1>:<port>,<host2>:<port>/<数据库名>?authSource=admin&replicaSet=<副本集名>' \
  --out /tmp/backup/mongo_backup \
  --forceTableScan

5. 注意事项

  • 若导出过程中出现 Killed,多为内存不足,可调大 Pod 资源或按库分别导出
  • 导出数据位于容器内的指定路径,需通过 kubectl execkubectl cp 拷贝到本地(见下一节)

七、从 Pod 中拷贝数据到本地

重要概念

  • Pod 内的 /tmp 等路径属于容器内部文件系统
  • 在宿主机或跳板机上直接浏览,看不到容器内的这些目录
  • 必须通过 kubectl execkubectl cp 访问

完整操作流程示例

能执行 kubectl 的环境(本地或跳板机)依次执行:

bash 复制代码
# 1. 查看 Pod 名
kubectl get pod -n default -l app=<app名>

# 2. 从 Pod 里打包并保存到本机(把 <Pod名> 换成上一步得到的名字)
kubectl exec -n default <Pod名> -- tar czf - -C /tmp/backup data > /root/backup.tar.gz

# 3. 检查文件
ls -lh /root/backup.tar.gz

方法一:流式打包并下载(推荐)

能执行 kubectl 的终端运行:

bash 复制代码
kubectl exec -n default <Pod名> -- tar czf - -C /tmp/backup data > ./backup.tar.gz
  • tar czf -:在 Pod 内打包并输出到 stdout
  • > ./backup.tar.gz:在本地接收并保存

方法二:分步拷贝

bash 复制代码
# 1. 在 Pod 内打包
kubectl exec -n default <Pod名> -- tar czf /tmp/backup.tar.gz -C /tmp/backup data

# 2. 拷贝到本地
kubectl cp default/<Pod名>:/tmp/backup.tar.gz ./backup.tar.gz

# 3. 解压
tar xzf backup.tar.gz

通过跳板机

若本地(沙箱)无法直接访问集群,需先 SSH 到跳板机:

bash 复制代码
# 1. SSH 到跳板机
ssh root@192.168.1.100

# 2. 在跳板机上执行 kubectl 打包并保存
kubectl exec -n default <Pod名> -- tar czf - -C /tmp/backup data > /root/backup.tar.gz

# 3. 在本地从跳板机拉取
scp root@192.168.1.100:/root/backup.tar.gz ./

八、网络连通性检查

1. ping(ICMP)

bash 复制代码
ping -c 4 192.168.1.100
  • 能收到回复:网络可达
  • 无响应:可能被防火墙禁止或网络不通(ping 常被企业网络禁用)

2. 端口连通性(nc)

bash 复制代码
nc -zv 192.168.1.100 22
  • succeeded / open:端口可达
  • Connection refused:主机可达,端口未开放
  • Connection timed out:网络不通或防火墙拦截

3. kubectl 连通性

bash 复制代码
# 测试能否访问 K8s API(替换为实际 API 地址)
nc -zv 192.168.1.10 6443

kubectlUnable to connect to the server,说明当前环境无法访问集群 API,需通过 VPN 或跳板机。


九、常见错误与排错

1. deployments.apps "xxx" not found

原因 处理
用了 Pod 名而不是 Deployment 名 使用 kubectl edit deployment <Deployment名>
命名空间不对 加上 -n <namespace>

2. Unable to connect to the server: dial tcp xxx:6443: connect: invalid argument

  • 当前环境无法访问 K8s API 服务器
  • 处理:检查 VPN、网络,或通过跳板机执行 kubectl

3. 修改资源配置后不生效

  • 直接编辑 Pod 的修改可能在 Pod 重建时被覆盖
  • 处理:编辑 Deployment ,然后执行 kubectl rollout restart deployment/xxx

4. 在宿主机/跳板机找不到 Pod 内的文件

  • 容器有独立文件系统,宿主机上无法直接浏览
  • 处理:使用 kubectl execkubectl cp 从 Pod 拷贝数据

总结

场景 常用命令
修改 Pod 资源 kubectl edit deployment <名> -n <ns>:wqkubectl rollout restart
查看 Pod kubectl get pod -n <ns> -l app=<app名>
MongoDB 导出 mongodump --uri '...' --out /tmp/backup --forceTableScan
从 Pod 拷数据 kubectl exec ... tar ... > 本地文件kubectl cp
检查网络 pingnc -zv

标签:Kubernetes、kubectl、Pod、Deployment、MongoDB、mongodump、资源配置、运维

相关推荐
UP_Continue1 小时前
Linux--动静态库
linux·运维·服务器
CheungChunChiu1 小时前
Linux 音频系统全景解析:PipeWire、PulseAudio 与 ALSA 的层次关系
linux·运维·服务器·audio
你真是饿了2 小时前
7.进程间通信
linux·运维·服务器
TEC_INO2 小时前
Linux_12:通过多线程获取VENC的H264码流数据
linux·运维·服务器
hweiyu004 小时前
Linux 命令:setfacl
linux·运维·服务器
运维行者_4 小时前
深入解析 Docker 监控:核心指标完整清单
运维·服务器·网络·数据库·docker·容器·eureka
礼拜天没时间.4 小时前
容器网络配置——从互联到自定义桥接
运维·网络·docker·容器·centos
Boxsc_midnight4 小时前
【vLLM服务器并发能力测试程序】写一个python小程序来进行并发测试
服务器·python·vllm