K8S Namespace & Pod 学习笔记
·
一、Namespace 资源对象
1. 核心概述
- 定义:K8S 集群级资源,将物理集群划分为多个虚拟集群,实现资源 / 租户 / 环境逻辑隔离。
- 应用场景:多团队、多项目、多环境(test/dev/prod)大型集群;小规模集群无需创建。
- 默认命名空间
kube-system:运行 K8S 系统组件default:未指定 Namespace 的资源默认归属
2. 基础管理操作
# 查看所有命名空间
kubectl get namespace/ns
# 查看指定命名空间详情
kubectl describe ns <ns名称>
# 创建命名空间
kubectl create ns <ns名称>
# 删除命名空间(级联删除内部所有资源)
kubectl delete ns <ns名称>
3. YAML 创建 Namespace
apiVersion: v1
kind: Namespace
metadata:
name: myns2
4. 核心使用场景
切换默认命名空间
kubectl config set-context --current --namespace=kube-system
查看命名空间级资源
kubectl api-resources --namespaced=true
资源限额(ResourceQuota)
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-quota
namespace: test
spec:
hard:
requests.cpu: '2'
requests.memory: 2Gi
limits.cpu: '4'
limits.memory: 4Gi
- 应用:
kubectl apply -f namespace-quota.yaml
5. Namespace 无法删除(Finalizers 处理)
- 作用:确保资源删除前完成清理,防止意外删除
- 手动移除卡住的 Fina代码lizers
# 查看finalizers
kubectl get ns <ns名称> -o json | jq '.metadata.finalizers'
# 导出配置
kubectl get ns <ns名称> -o json > ns.json
# 编辑ns.json,清空finalizers: []
# 强制更新
kubectl replace --raw "/api/v1/namespaces/<ns名称>/finalize" -f ns.json
注意:勿随意移除,避免资源泄漏
二、Pod 资源对象
1. 概述
- 定义:K8S 最小可部署计算单元,由1 个或多个容器组成,共享网络、存储、上下文。
- 组成:应用容器 + Init 容器(启动时运行)+ 临时容器(调试用)。
- 本质:建模应用 “逻辑主机”,容器并置调度、共享运行环境。
2. Pod 创建过程(K8S 高频面试题)
- 客户端通过
kubectl apply或 API 向apiserver提交创建请求 - apiserver 将 Pod 元数据写入etcd
- apiserver 通知scheduler 调度器,调度器筛选节点并绑定,结果回写 etcd
- apiserver 通知目标节点kubelet,kubelet 调用 Docker 创建容器
- 容器创建完成,kubelet 上报状态,apiserver 更新 etcd
3. Pod 资源清单详解
3.1 必选属性
| 参数名 | 字段类型 | 说明 |
|---|---|---|
| apiVersion | String | API 版本,常用 v1 |
| kind | String | 资源类型,固定 Pod |
| metadata | Object | 元数据(名称、命名空间、标签) |
| spec | Object | 容器详细定义 |
3.2 核心配置项
- 镜像拉取策略:Always(每次拉取)、Never(仅本地)、IfNotPresent(本地优先)
- 重启策略:Always(始终重启)、OnFailure(失败重启)、Never(不重启)
- 端口配置:containerPort(容器端口)、hostPort(主机端口,慎用)
- 资源限制:requests(初始资源)、limits(最大资源)
3.3 完整 YAML 示例
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources:
requests:
cpu: 0.5
memory: 512Mi
limits:
cpu: 1
memory: 1Gi
restartPolicy: Always
4. 标签(Label)
- 定义:key=value 键值对,用于资源分组、筛选、调度。
- 常用命令
# 打标签
kubectl label pods <pod名> release=v1
# 查看标签
kubectl get pods --show-labels
# 按标签筛选
kubectl get pods -l release=v1
# 移除标签
kubectl label pods <pod名> release-
5. Pod 资源限制
5.1 节点资源不足→调度失败(Pending)
Pod 申请资源超过节点可用资源,调度器无法分配节点。
resources:
limits:
cpu: '8'
memory: '8Gi'
requests:
cpu: '6'
排障:kubectl describe pod <pod名> 查看FailedScheduling事件
5.2 命名空间资源不足→创建失败
Pod 申请资源超过 Namespace 的 ResourceQuota 限制,直接报错 Forbidden。
6. Pod 常用命令
| 命令 | 作用 |
|---|---|
| kubectl apply -f pod.yaml | 创建 / 更新 Pod |
| kubectl get pods [-n ns] [-o wide] | 查看 Pod |
| kubectl delete pod <pod 名> | 删除 Pod |
| kubectl exec -it <pod 名> -- bash | 进入容器 |
| kubectl logs <pod 名> [-c 容器名] | 查看容器日志 |
| kubectl describe pod <pod 名> | 查看 Pod 详情与事件 |
三、整体总结
- Namespace:核心做逻辑隔离,配套资源限额规范使用,删除卡住处理 Finalizers。
- Pod:K8S 最小调度单元,掌握创建流程、资源清单、探针、状态排障是核心。
更多推荐




所有评论(0)