一、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 高频面试题)

  1. 客户端通过kubectl apply或 API 向apiserver提交创建请求
  2. apiserver 将 Pod 元数据写入etcd
  3. apiserver 通知scheduler 调度器,调度器筛选节点并绑定,结果回写 etcd
  4. apiserver 通知目标节点kubelet,kubelet 调用 Docker 创建容器
  5. 容器创建完成,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 详情与事件

三、整体总结

  1. Namespace:核心做逻辑隔离,配套资源限额规范使用,删除卡住处理 Finalizers。
  2. Pod:K8S 最小调度单元,掌握创建流程、资源清单、探针、状态排障是核心。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐