Kubernetes 常用操作与概念总结
本文总结 K8s 日常运维中的常见概念、命令和排错思路,适合快速查阅。
📑 目录
- 一、核心概念:Pod 与 Container
- 二、资源命名规则
- 三、修改 Pod 资源配置
- 四、命名空间(Namespace)
- 五、编辑资源后的保存与生效
- 六、MongoDB 数据导出(mongodump)
- 七、从 Pod 中拷贝数据到本地
- 八、网络连通性检查
- 九、常见错误与排错
一、核心概念: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 才能持久生效:
kubectl edit deployment <Deployment名> -n <命名空间>
示例:
kubectl edit deployment my-app -n default
2. 资源配置结构
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
示例:
# 指定命名空间
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 重建:
# 方式一:滚动重启(推荐)
kubectl rollout restart deployment/my-app -n default
# 方式二:删除 Pod,由 Deployment 自动重建
kubectl delete pod my-app-abc123-xyz99 -n default
六、MongoDB 数据导出(mongodump)
1. 导出指定数据库
mongodump –uri 'mongodb://user:password@<host>:<port>/<数据库名>?authSource=admin' \\
–out /tmp/backup/<数据库名>_backup \\
–forceTableScan
2. 导出所有数据库
mongodump –uri 'mongodb://user:password@<host>:<port>/?authSource=admin' \\
–out /tmp/backup/mongo_full_backup \\
–forceTableScan
3. 参数说明
| –uri | MongoDB 连接字符串(用户名、密码、主机、端口、认证库) |
| –out | 导出文件保存目录 |
| –forceTableScan | 强制使用表扫描(当索引不可用时使用) |
4. 副本集连接示例
mongodump –uri 'mongodb://user:password@<host1>:<port>,<host2>:<port>/<数据库名>?authSource=admin&replicaSet=<副本集名>' \\
–out /tmp/backup/mongo_backup \\
–forceTableScan
5. 注意事项
- 若导出过程中出现 Killed,多为内存不足,可调大 Pod 资源或按库分别导出
- 导出数据位于容器内的指定路径,需通过 kubectl exec 或 kubectl cp 拷贝到本地(见下一节)
七、从 Pod 中拷贝数据到本地
重要概念
- Pod 内的 /tmp 等路径属于容器内部文件系统
- 在宿主机或跳板机上直接浏览,看不到容器内的这些目录
- 必须通过 kubectl exec 或 kubectl cp 访问
完整操作流程示例
在能执行 kubectl 的环境(本地或跳板机)依次执行:
# 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 的终端运行:
kubectl exec -n default <Pod名> — tar czf – -C /tmp/backup data > ./backup.tar.gz
- tar czf -:在 Pod 内打包并输出到 stdout
- > ./backup.tar.gz:在本地接收并保存
方法二:分步拷贝
# 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 到跳板机:
# 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)
ping -c 4 192.168.1.100
- 能收到回复:网络可达
- 无响应:可能被防火墙禁止或网络不通(ping 常被企业网络禁用)
2. 端口连通性(nc)
nc -zv 192.168.1.100 22
- succeeded / open:端口可达
- Connection refused:主机可达,端口未开放
- Connection timed out:网络不通或防火墙拦截
3. kubectl 连通性
# 测试能否访问 K8s API(替换为实际 API 地址)
nc -zv 192.168.1.10 6443
若 kubectl 报 Unable 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 exec 或 kubectl cp 从 Pod 拷贝数据
总结
| 修改 Pod 资源 | kubectl edit deployment <名> -n <ns> → :wq → kubectl rollout restart |
| 查看 Pod | kubectl get pod -n <ns> -l app=<app名> |
| MongoDB 导出 | mongodump –uri '…' –out /tmp/backup –forceTableScan |
| 从 Pod 拷数据 | kubectl exec … tar … > 本地文件 或 kubectl cp |
| 检查网络 | ping、nc -zv |
标签:Kubernetes、kubectl、Pod、Deployment、MongoDB、mongodump、资源配置、运维
网硕互联帮助中心



评论前必须登录!
注册