Kubernetes Pod 管理完全指南:从基础命令到高级调度

Kubernetes Pod 管理完全指南:从基础命令到高级调度

文章目录

  • [Kubernetes Pod 管理完全指南:从基础命令到高级调度](#Kubernetes Pod 管理完全指南:从基础命令到高级调度)
    • 学习目标
    • [一、kubectl 概述](#一、kubectl 概述)
      • [1. 基础命令应用](#1. 基础命令应用)
      • [2. Node 节点管理集群](#2. Node 节点管理集群)
      • [3. 节点标签(Label)管理](#3. 节点标签(Label)管理)
    • 二、Namespace(命名空间)
      • [1. Namespace 基础操作](#1. Namespace 基础操作)
    • [Kubernetes Namespace 日常管理](#Kubernetes Namespace 日常管理)
      • [一、Namespace 数据结构](#一、Namespace 数据结构)
      • 二、日常查看操作
      • [三、创建 Namespace](#三、创建 Namespace)
      • [四、删除 Namespace](#四、删除 Namespace)
      • [五、Namespace 切换](#五、Namespace 切换)
      • [六、Namespace 编辑](#六、Namespace 编辑)
      • 七、命令速查表
    • [三、Pod 核心概念](#三、Pod 核心概念)
      • [了解 Pod 的调度和生命周期](#了解 Pod 的调度和生命周期)
      • [Pod 的特性](#Pod 的特性)
      • [Pod 分类](#Pod 分类)
    • [四、Pod 的 YAML 配置与操作](#四、Pod 的 YAML 配置与操作)
      • [1. 查看 Pod 的 YAML 语法帮助](#1. 查看 Pod 的 YAML 语法帮助)
      • [2. 创建自主式 Pod](#2. 创建自主式 Pod)
      • [3. 通过 YAML 文件管理 Pod](#3. 通过 YAML 文件管理 Pod)
      • [4. 控制 Pod 运行在特定的 Node 上](#4. 控制 Pod 运行在特定的 Node 上)
      • [5. Pod 标签设置](#5. Pod 标签设置)
    • [五、Pod 资源限制](#五、Pod 资源限制)
      • [Pod 重启策略(restartPolicy)](#Pod 重启策略(restartPolicy))
    • [六、Pod 包含多个容器](#六、Pod 包含多个容器)
      • [1. 创建多容器 Pod](#1. 创建多容器 Pod)
      • [2. 使用 kubectl 管理容器](#2. 使用 kubectl 管理容器)
      • [3. 交互式进入容器](#3. 交互式进入容器)
    • [七、Pod 调度约束:指定 Node 节点](#七、Pod 调度约束:指定 Node 节点)
      • 调度方式
      • [`nodeName` 与 `nodeSelector` 的核心区别](#nodeNamenodeSelector 的核心区别)
    • [附录:Kubernetes 资源类型(Kind)全览](#附录:Kubernetes 资源类型(Kind)全览)
    • 总结

学习目标

  • 掌握 kubectl 基础命令
  • 了解 namespace 的概念与操作
  • 掌握 pod 的核心概念
  • 掌握 pod 的创建、管理与调度操作

一、kubectl 概述

kubectl 是一个用于操作 Kubernetes 集群的命令行接口。通过利用 kubectl 的各种命令,可以实现 K8s 的各种功能。

1. 基础命令应用

bash 复制代码
# 1. 获取帮助
[root@master ~]# kubectl -h

# 2. 查看集群信息
[root@master ~]# kubectl cluster-info

# 3. 查看集群节点信息
[root@master ~]# kubectl get nodes

# 4. 查看集群节点详细信息
[root@master ~]# kubectl get -o wide nodes

# 5. 描述节点详细信息
[root@master ~]# kubectl describe node master
[root@master ~]# kubectl describe node node1

2. Node 节点管理集群

默认情况下,在 node 节点执行 kubectl 命令会报错。需要将 master 上的管理文件拷贝到 node 节点:

bash 复制代码
# 在 node 节点创建配置目录
[root@node1 ~]# mkdir /root/.kube

# 从 master 节点拷贝配置文件
[root@master ~]# scp /etc/kubernetes/admin.conf k8s-node1:/root/.kube/config

# 验证,在 node 节点输入 kubectl 命令不再报错
[root@node1 ~]# kubectl get nodes

3. 节点标签(Label)管理

Master 调度 Pod 到 Node 需要用到标签。

bash 复制代码
# 6. 查看节点标签信息
[root@master ~]# kubectl get node --show-labels

# 7. 设置节点标签信息(为 node1 和 node2 加上 role 标签)
[root@master ~]# kubectl label node node1 node-role.kubernetes.io/node=
[root@master ~]# kubectl label node node2 node-role.kubernetes.io/node=

# 验证
[root@master ~]# kubectl get nodes
[root@master ~]# kubectl get node --show-labels

自定义标签场景:

bash 复制代码
# 8. 给 node1 添加两个标签(地区:北京,区域:海淀)
[root@master ~]# kubectl label node node1 region=beijing zone=haidian
[root@master ~]# kubectl get node --show-labels

# 显示节点的相应标签
[root@master ~]# kubectl get nodes -L region,zone

# 查找 region=beijing 的节点
[root@master ~]# kubectl get nodes -L region=beijing

修改与删除标签:

bash 复制代码
# 9. 修改标签(--overwrite=true 覆盖原标签的 value 值)
[root@master ~]# kubectl label node node1 zone=chaoyang --overwrite=true
[root@master ~]# kubectl get nodes -L region,zone

# 10. 取消标签信息
[root@master ~]# kubectl label node node1 zone-
[root@master ~]# kubectl get nodes -L region,zone

# 11. 标签选择器
# 等值关系:=, !=
# 集合关系:KEY in (VALUE1, VALUE2....)
[root@master ~]# kubectl get node -l "region in (beijing,hebei)"

二、Namespace(命名空间)

Namespace 是对一组资源和对象的抽象集合(逻辑隔离)。

常用来隔离不同的用户,如 Kubernetes 自带的服务一般运行在 kube-system namespace 中。

常见的 Pod、Service、ReplicationController 和 Deployment 等都属于同一个 namespace(默认是 default)。

1. Namespace 基础操作

bash 复制代码
# 查看 namespace
 # 创建对象时未指定 namespace,默认数据放在 default 命名空间
 # 所有由 Kubernetes 系统创建的资源都在 kube-system 命名空间
 [root@master ~]# kubectl get namespace

1. default

  • 含义:这是默认命名空间

  • 用途 :如果你创建资源(如Pod,Deployment)时没有指定 -n <namespace>,它们就会默认落在这里

  • 建议:在实际生产或练习中,不建议把业务应用堆在 default 里。最好为每个项目或环境(如dev,prod)创建独立的命名空间,方便管理和清理
    2. kube-system

  • 含义:这是Kubernetes系统组件的"大本营"。

  • 用途:K8s自身运行所需的核心组件都部署在这里。

  • 关联:你之前安装的Calico(网络插件)以及核心组件(CoreDNS), kube-proxy等都在这个空间里。

  • 注意:不要随意删除这里的资源,否则会导致集群瘫痪。
    3. kube-public

  • 含义:公开的命名空间

  • 用途:这个空间里的资源对所有用户(包括未认证的用户)都是可见的。

  • 应用 :它通常只包含一个名为 cluster-info 的 ConfigMap,用于让新用户通过 kubectl cluster-info 命令获取集群的基本连接信息。一般用户不需要往这里放东西。
    4. kube-node-lease

  • 含义:这里用于节点心跳优化的命名空间(K8s v1.14+ 引入)

  • 用途:在早期版本中,节点心跳是通过更新Node对象实现的。当节点很多时会造成API Server压力巨大。现在,每个节点都会在这个命名空间下创建一个Lease(租约)对象来回报心跳。

  • 作用:它极大的减轻了控制平面的压力,让你能感觉到集群运行得更流畅


Kubernetes Namespace 日常管理

一、Namespace 数据结构

yaml 复制代码
apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace
  labels:
    env: production
    team: backend
  annotations:
    description: "生产环境命名空间"
spec:
  finalizers:
  - kubernetes    # 删除前需清理所有资源
status:
  phase: Active   # Active / Terminating

字段说明:

字段 说明
metadata.name 命名空间名称(不可修改)
metadata.labels 标签,用于筛选和分组
metadata.annotations 注解,附加描述信息
spec.finalizers 删除保护,确保资源清理完毕
status.phase Active(正常)/ Terminating(删除中)

系统默认 Namespace:

Namespace 用途
default 未指定 ns 的资源默认位置
kube-system K8s 系统组件(kube-dns、kube-proxy 等)
kube-public 所有用户可读,通常存放集群信息
kube-node-lease 节点心跳(Node Lease)

二、日常查看操作

bash 复制代码
# 查看所有 namespace
kubectl get ns
kubectl get namespaces

# 查看详细信息
kubectl get ns -o wide

# 查看某个 ns 详情
kubectl describe ns my-namespace

# 以 YAML 格式输出
kubectl get ns my-namespace -o yaml

# 查看某 ns 下所有资源
kubectl get all -n my-namespace

# 查看某 ns 下的 Pod
kubectl get pods -n my-namespace

# 查看所有 ns 的 Pod
kubectl get pods --all-namespaces
kubectl get pods -A

三、创建 Namespace

命令行创建:

bash 复制代码
kubectl create ns dev
kubectl create ns staging
kubectl create ns prod

YAML 创建(推荐):

yaml 复制代码
# newns2.yaml
apiVersion: v1          # api版本
kind: Namespace         # 创建对象的类型为Namespace
metadata:               # 定义元数据属性
  name: newns2          # 定义创建的对象名称
bash 复制代码
# 应用 yaml 文件创建 namespace
[root@master ~]# kubectl apply -f newns2.yaml
# 输出: namespace/newns2 created

# 查看创建结果
[root@master ~]# kubectl get ns

命名规则:

  • 小写字母、数字、-
  • 最长 63 个字符
  • 不能以 - 开头或结尾
  • 不能使用保留名:kube-systemkube-public

四、删除 Namespace

注意: 删除一个 namespace 会自动删除所有属于该 namespace 的资源。defaultkube-systemkube-public 命名空间不可删除。

bash 复制代码
# 删除(会删除该 ns 下所有资源!)
kubectl delete ns dev

# 强制删除(卡在 Terminating 时)
kubectl delete ns dev --force --grace-period=0
kubectl delete ns newns1
kubectl delete -f newns2.yaml

五、Namespace 切换

1. 临时切换(单次命令)

bash 复制代码
# -n 指定 namespace
kubectl get pods -n kube-system
kubectl get svc -n prod

2. 永久切换默认 Namespace

bash 复制代码
# 查看当前 context
kubectl config current-context

# 切换默认 namespace
kubectl config set-context --current --namespace=dev

# 验证
kubectl config view --minify | grep namespace

# 切回 default
kubectl config set-context --current --namespace=default

六、Namespace 编辑

bash 复制代码
# 使用 kubectl edit 编辑它的 YAML 语法
[root@master ~]# kubectl edit ns newns

# 或者使用 kubectl get 查看 YAML
[root@master ~]# kubectl get ns newns -o yaml
[root@master ~]# kubectl get ns newns -o json

七、命令速查表

操作 命令
列出所有 ns kubectl get ns
创建 ns kubectl create ns <name>
删除 ns kubectl delete ns <name>
切换默认 ns kubectl config set-context --current --namespace=<name>
查看当前 ns `kubectl config view --minify
查看 ns 详情 kubectl describe ns <name>
查看 ns 下所有资源 kubectl get all -n <name>
查看所有 ns 的 Pod kubectl get pods -A
按标签筛选 ns kubectl get ns -l <key>=<value>
查看 ns 配额 kubectl describe resourcequota -n <name>

三、Pod 核心概念

了解 Pod 的调度和生命周期

Workloads(实际运行的应用)分为 PodControllers

  • Pod 通过控制器实现应用的运行、伸缩、升级等。
  • Controllers 在集群中管理 Pod。
  • Pod 与控制器之间通过 label-selector (标签选择器) 相关联,这是唯一的关联方式

Pod 的特性

  • Pod 是 Kubernetes 最小的管理单位,一个 Pod 可以封装一个容器或多个容器。
  • 一个 Pod 里的多个容器可以共享存储和网络,可以看作一个逻辑的主机,外部访问 Pod 的 IP 地址即可。
  • 一个 Pod 里的多个容器可以共享存储卷,这个存储卷会被定义为 Pod 的一部分,并且可以挂载到该 Pod 里的所有容器的文件系统上。

Pod 分类

  • 无控制器管理的自主式 Pod:没有副本控制器控制,删除自主式 Pod 后不会重新创建。
  • 控制器管理的 Pod:控制器会按照定义的策略控制 Pod 的数量。发现 Pod 数量少了,会立即自动建立新的 Pod;一旦发现 Pod 多了,也会自动杀死多余的 Pod。

四、Pod 的 YAML 配置与操作

1. 查看 Pod 的 YAML 语法帮助

bash 复制代码
# 查看一级帮助
[root@master ~]# kubectl explain pod
# k8s 资源是有各种各样的类型,使用关键字 KIND 来声明资源类型,那么有哪些资源类型呢?Pod是其中一种

# 查看二级帮助
[root@master ~]# kubectl explain pod.metadata
[root@master ~]# kubectl explain pod.spec
[root@master ~]# kubectl explain pod.apiVersion
[root@master ~]# kubectl explain pod.status
[root@master ~]# kubectl explain pod.kind

# 查看三级帮助
[root@master ~]# kubectl explain pod.metadata.namespace
[root@master ~]# kubectl explain pod.spec.containers

2. 创建自主式 Pod

镜像拉取策略(imagePullPolicy):

  • Always:不管本地有没有镜像,都要从仓库中下载镜像(默认策略)。
  • Never:从来不从仓库下载镜像,只用本地镜像,本地没有就算了。
  • IfNotPresent:如果本地存在就直接使用,不存在才从仓库下载。

创建 httpd 服务的 Pod:

yaml 复制代码
# httpd.yaml
apiVersion: v1
kind: Pod
metadata:
  name: apachehttpd
spec:
  containers:
  - name: c1
    image: docker.1ms.run/library/httpd
    imagePullPolicy: IfNotPresent
    command: ["/bin/bash", "-c", "while true; do sleep 3600; done"]

字段详解:

  1. apiVersion: v1

    • 含义:指定使用的 Kubernetes API 版本。
    • 详解v1 是 Kubernetes 的核心 API 版本,包含了 Pod、Service、ConfigMap 等最基础的资源。如果是 Deployment,通常是 apps/v1
  2. kind: Pod

    • 含义:指定你要创建的资源类型。
    • 详解:这里定义的是一个 Pod(Kubernetes 最小调度单元)。也可以改成 Deployment、Service 等。
  3. metadata:

    • 含义:资源的元数据定义块。
    • 详解:用来描述 Pod 的基本信息,如名字、标签(Labels)、注解(Annotations)等。
  4. spec:

    • 含义:资源的具体规格(Specification)。
    • 详解 :这是最核心的部分,定义了 Pod 的实际运行状态,比如里面跑了什么容器,用什么镜像,挂载什么卷等。
      • containers: 含义:容器列表
      • - name: c1 含义:容器的名称
      • image: docker.1ms.run/library/httpd 含义:指定容器运行时使用的镜像
      • imagePullPolicy: IfNotPresent 含义:镜像拉取策略
        • IfNotPresent:如果本地已经有这个镜像,就不再拉取;如果没有,才去远程拉取。(最常用)
        • Always:每次启动 Pod 都重新拉取镜像(适合开发环境)。
        • Never:只使用本地镜像,从不拉取。
  5. command: ["/bin/bash", "-c", "while true; do sleep 3600; done"]

    • 含义:覆盖容器默认的启动命令(Entrypoint)。
    • 详解
      • ["/bin/bash", "-c"]:启动一个 Bash 环境,-c 表示后面跟的是字符串命令。
      • "while true; do sleep 3600; done":无限循环,每隔一小时,CPU 会被唤醒一次(虽然只干了一毫秒的活),稍微浪费一点点资源。

创建 stress 压力测试的 Pod:

yaml 复制代码
# pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: c1
    image: docker.1ms.run/polinux/stress
    imagePullPolicy: IfNotPresent
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

参数拆解:

  1. command: ["stress"] ------ 覆盖容器默认的启动命令,指定启动命令为 stress。
  2. args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"] ------ 传给 stress 命令的参数:
    • --vm 1:启动 1 个内存分配进程(派 1 个工人干活)
    • --vm-bytes 150M:每个进程只占 150M 内存(每个工人搬 150M 的砖头)
    • --vm-hang 1:分配完内存后,保持占用 1 秒(搬完砖头举着 1 秒钟再放下)

3. 通过 YAML 文件管理 Pod

bash 复制代码
# 创建 Pod
[root@master podtest]# kubectl apply -f httpd.yaml
[root@master podtest]# kubectl apply -f pod1.yaml

# 查看 Pod 信息
[root@master podtest]# kubectl get pods -o wide

# 查看 Pod 的详细信息
[root@master podtest]# kubectl describe pod httpd
[root@master podtest]# kubectl describe pod pod1

# 删除 Pod
[root@master podtest]# kubectl delete -f httpd.yaml
[root@master podtest]# kubectl delete -f pod1.yaml

4. 控制 Pod 运行在特定的 Node 上

bash 复制代码
# 在 node1 上打标签
[root@master podtest]# kubectl label node k8s-node1 region=beijing

修改 pod1.yaml,添加 nodeSelector

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: c1
    image: docker.1ms.run/polinux/stress
    imagePullPolicy: IfNotPresent
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
  nodeSelector:
    region: beijing
bash 复制代码
# 验证 Pod 是否调度到指定节点
[root@master podtest]# kubectl get pod -o wide

5. Pod 标签设置

说明: Pod 的 label 与 node 的 label 操作方式几乎相同。Node 的 label 用于 Pod 调度到指定节点;Pod 的 label 用于 Controller 关联控制的 Pod。

bash 复制代码
# 查看 Pod 标签
[root@master podtest]# kubectl get pods --show-labels

# 给 pod1 打标签
[root@master podtest]# kubectl label pod pod1 run=stress

# 删除 Pod 标签
[root@master podtest]# kubectl label pod pod1 run-
[root@master podtest]# kubectl get pods --show-labels

五、Pod 资源限制

可以对 Pod 内的容器进行资源限制(requestslimits)。

满足资源限制的 Pod(pod2.yaml):

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
  - name: c1
    image: docker.1ms.run/polinux/stress
    imagePullPolicy: IfNotPresent
    resources:
      limits:
        memory: "200M"
      requests:
        memory: "100M"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
  nodeSelector:
    region: beijing

超出资源限制的 Pod(pod3.yaml):

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod3
spec:
  containers:
  - name: c1
    image: docker.1ms.run/polinux/stress
    imagePullPolicy: IfNotPresent
    resources:
      limits:
        memory: "200M"   
      requests:
        memory: "100M"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "230M", "--vm-hang", "1"]
  nodeSelector:
    region: beijing
bash 复制代码
# 启动 Pod
[root@master podtest]# kubectl apply -f pod2.yaml
[root@master podtest]# kubectl apply -f pod3.yaml

# 查看 Pod 运行状态
[root@master podtest]# kubectl get pod

注意: 当容器请求的内存(如 230M)超过了 limits 限制(200M)时,Pod 状态会变为 OOMKilled 并不断重启。

Pod 重启策略(restartPolicy)

  • Always:表示容器挂了总是重启,这是默认策略。
  • OnFailure:表示容器状态为错误时才重启,也就是容器正常终止时不重启。
  • Never:表示容器挂了不予重启。

提示: 对于 Always 策略,容器只要挂了就会立即重启,非常耗费资源。因此 K8s 采用了退避延迟机制:第一次挂了立即重启,第二次延时 10s,第三次延时 20s......依次类推。

bash 复制代码
# 查看重启策略帮助
[root@master podtest]# kubectl explain pod.spec.restartPolicy

六、Pod 包含多个容器

一个 Pod 可以包含一个或者多个容器(这些容器通常是紧耦合关系,而不是同一个服务)。

1. 创建多容器 Pod

yaml 复制代码
# pod4.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod4
spec:
  containers:
  - name: c1
    image: docker.1ms.run/polinux/stress
    imagePullPolicy: IfNotPresent
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
  - name: c2
    image: docker.1ms.run/polinux/stress
    imagePullPolicy: IfNotPresent
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
  nodeSelector:
    region: beijing
bash 复制代码
[root@master podtest]# kubectl apply -f pod4.yaml
[root@master podtest]# kubectl get pods
# 输出 READY 2/2 表示两个容器均已正常运行

2. 使用 kubectl 管理容器

bash 复制代码
# 语法: kubectl exec <pod名> -c <容器名> -- <命令>
[root@master podtest]# kubectl exec pod4 -c c1 -- touch /aaaaaaaaaa
[root@master podtest]# kubectl exec pod4 -c c1 -- ls /

3. 交互式进入容器

bash 复制代码
[root@master podtest]# kubectl exec -it pod4 -c c2 /bin/bash
[root@master podtest]# kubectl exec pod4 -c c2 -- ls /

七、Pod 调度约束:指定 Node 节点

Kubernetes 会通过算法将 Pod 调度到 Node 节点上运行。为了实现容器主机资源的平衡使用,可以使用约束把 Pod 调度到指定的 Node 节点。

调度方式

  • nodeName:用于将 Pod 调度到指定的 Node 名称上。
  • nodeSelector:用于将 Pod 调度到匹配 Label 的 Node 上。

nodeName 是"直接点名"(绕过调度器),nodeSelector 是"按标签海选"(调度器参与)。

技术上可以在 YAML 中同时写上这两个字段(API 不会报错),但强烈不建议放在一起 ,因为 nodeName 的优先级绝对高于 nodeSelector,会导致 nodeSelector 完全失效并引发逻辑混乱。

nodeNamenodeSelector 的核心区别

维度 nodeName (指定节点名) nodeSelector (标签选择器)
工作原理 直接将 Pod 绑定到具体的 Node 名称上。 通过匹配 Node 的 Label(标签)来筛选节点。
调度器参与 ❌ 完全绕过 kube-scheduler。 ✅ 参与。调度器会结合资源、污点等综合评估。
匹配方式 精确匹配节点名称(字符串完全一致)。 键值对匹配(Key-Value),多个条件为 AND 逻辑。
灵活性 极低(写死了具体机器)。 较高(只要标签匹配,哪台机器都可以)。
容错与高可用 极差。若该节点宕机,Pod 直接失败,不会自动迁移。 较好。若某节点宕机,Pod 重建时可调到其他同标签节点。
适用场景 调试、特定硬件绑定、DaemonSet 底层实现。 区分环境(如 test/prod)、区分硬件(如 GPU/SSD)。

附录:Kubernetes 资源类型(Kind)全览

Kubernetes 中所有资源都通过 kind 字段声明类型。以下按类别整理:

一、工作负载(Workloads)

Kind 说明
Pod 最小调度单元,一个或多个容器
Deployment 无状态应用部署,支持滚动更新/回滚
StatefulSet 有状态应用(如数据库),有稳定网络标识和存储
DaemonSet 每个节点运行一个 Pod(如日志采集、监控)
ReplicaSet 控制 Pod 副本数(通常由 Deployment 管理)
Job 一次性任务,运行完即退出
CronJob 定时任务(如定时备份)

二、服务发现与网络(Service & Networking)

Kind 说明
Service 为一组 Pod 提供稳定的访问入口(ClusterIP/NodePort/LoadBalancer)
Ingress 七层(HTTP/HTTPS)路由规则
IngressClass 定义 Ingress 控制器类型
Endpoints Service 对应的后端 Pod IP 列表
NetworkPolicy 网络隔离策略(Pod 级别防火墙)

三、存储(Storage)

Kind 说明
PersistentVolume (PV) 集群级存储资源(如 NFS、云盘)
PersistentVolumeClaim (PVC) 用户对存储的申请
StorageClass 定义存储类型,支持动态创建 PV
CSIDriver CSI 存储驱动注册
VolumeAttachment 卷挂载到节点的关系

四、配置与密钥(Configuration)

Kind 说明
ConfigMap 存储非敏感配置(键值对、配置文件)
Secret 存储敏感信息(密码、证书、Token)

五、集群管理(Cluster)

Kind 说明
Namespace 资源隔离的逻辑分区
Node 集群中的工作节点
ResourceQuota 命名空间资源配额
LimitRange 命名空间中 Pod/容器的默认资源限制
CustomResourceDefinition (CRD) 自定义资源类型定义

六、权限控制(RBAC)

Kind 说明
Role 命名空间内权限定义
ClusterRole 集群级权限定义
RoleBinding 将 Role 绑定到用户/组/SA
ClusterRoleBinding 将 ClusterRole 绑定到用户/组/SA
ServiceAccount Pod 使用的服务账户

七、调度与伸缩(Scheduling & Autoscaling)

Kind 说明
HorizontalPodAutoscaler (HPA) 根据 CPU/内存自动扩缩 Pod 副本
VerticalPodAutoscaler (VPA) 自动调整 Pod 资源请求
PodDisruptionBudget (PDB) 保证滚动更新时最少可用 Pod 数
PriorityClass Pod 调度优先级
RuntimeClass 容器运行时选择

八、策略与治理(Policy)

Kind 说明
PodSecurityPolicy (PSP) Pod 安全策略(1.25 后已废弃)
PodSecurityAdmission Pod 安全准入(替代 PSP)
ValidatingAdmissionPolicy 准入校验策略
MutatingAdmissionPolicy 准入修改策略

九、API 与服务发现扩展

Kind 说明
APIService 扩展 API 聚合
MutatingWebhookConfiguration 准入控制器 Webhook(修改)
ValidatingWebhookConfiguration 准入控制器 Webhook(校验)

十、事件与观测

Kind 说明
Event 集群事件记录
Lease 分布式锁/节点心跳

总结

text 复制代码
Kubernetes 资源类型
├── 工作负载:Pod / Deployment / StatefulSet / DaemonSet / Job / CronJob
├── 网络:Service / Ingress / NetworkPolicy / Endpoints
├── 存储:PV / PVC / StorageClass
├── 配置:ConfigMap / Secret
├── 集群:Namespace / Node / ResourceQuota / LimitRange / CRD
├── 权限:Role / ClusterRole / RoleBinding / ServiceAccount
├── 伸缩:HPA / VPA / PDB
└── 扩展:CRD / Webhook / APIService

💡 记忆技巧: 日常开发最常用的是 Pod、Deployment、Service、Ingress、ConfigMap、Secret、Namespace、PVC 这 8 个,掌握它们就能覆盖 90% 的使用场景。

相关推荐
ZzzZZzzzZZZzzzz…1 小时前
K8s实战: 用OpenELB破解Service外部访问难题
云原生·容器·kubernetes
星核0penstarry1 小时前
OpenAI 模型第三方网络安全评估事件解析:背景、原理与改进路径(2)
安全·web安全·云原生
java_logo10 小时前
Docker 部署 NetBox:轻松搭建 IPAM / DCIM 网络资产管理平台
docker·容器·轩辕镜像·netbox部署·netbox部署方案·netbox部署文档·docker部署netbox
PC2005-cloud10 小时前
从零上手 openGauss:Docker 部署 + 全场景连接教程
运维·docker·容器
风曦Kisaki11 小时前
Kubernetes(K8s)笔记Day06: 持久化存储(emptyDir,hostPath,NFS),PV 和 PVC,StorageClass存储类
linux·运维·笔记·云原生·容器·kubernetes
Crazy________16 小时前
k8s部署若依微服务架构流程,v3.6.6
运维·云原生·容器·kubernetes·状态模式
阿里云云原生17 小时前
AI 创新实践论坛·上海站精彩回顾 & PPT 下载
云原生
阿里云云原生18 小时前
轮子还要自己造吗?SRE 团队视角:从“全栈自研”到“拥抱云原生可观测底座”的思考
云原生
生活爱好者!18 小时前
NAS还能用来开视频会议?docker一键部署MiroTalk SFU
运维·docker·容器