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 日常管理)
- [三、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` 的核心区别](#
nodeName与nodeSelector的核心区别)
- [附录:Kubernetes 资源类型(Kind)全览](#附录:Kubernetes 资源类型(Kind)全览)
-
- 一、工作负载(Workloads)
- [二、服务发现与网络(Service & Networking)](#二、服务发现与网络(Service & Networking))
- 三、存储(Storage)
- 四、配置与密钥(Configuration)
- 五、集群管理(Cluster)
- 六、权限控制(RBAC)
- [七、调度与伸缩(Scheduling & Autoscaling)](#七、调度与伸缩(Scheduling & Autoscaling))
- 八、策略与治理(Policy)
- [九、API 与服务发现扩展](#九、API 与服务发现扩展)
- 十、事件与观测
- 总结
学习目标
- 掌握
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-system、kube-public等
四、删除 Namespace
注意: 删除一个 namespace 会自动删除所有属于该 namespace 的资源。
default、kube-system、kube-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(实际运行的应用)分为 Pod 与 Controllers:
- 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"]
字段详解:
-
apiVersion: v1- 含义:指定使用的 Kubernetes API 版本。
- 详解 :
v1是 Kubernetes 的核心 API 版本,包含了 Pod、Service、ConfigMap 等最基础的资源。如果是 Deployment,通常是apps/v1。
-
kind: Pod- 含义:指定你要创建的资源类型。
- 详解:这里定义的是一个 Pod(Kubernetes 最小调度单元)。也可以改成 Deployment、Service 等。
-
metadata:- 含义:资源的元数据定义块。
- 详解:用来描述 Pod 的基本信息,如名字、标签(Labels)、注解(Annotations)等。
-
spec:- 含义:资源的具体规格(Specification)。
- 详解 :这是最核心的部分,定义了 Pod 的实际运行状态,比如里面跑了什么容器,用什么镜像,挂载什么卷等。
containers:含义:容器列表- name: c1含义:容器的名称image: docker.1ms.run/library/httpd含义:指定容器运行时使用的镜像imagePullPolicy: IfNotPresent含义:镜像拉取策略IfNotPresent:如果本地已经有这个镜像,就不再拉取;如果没有,才去远程拉取。(最常用)Always:每次启动 Pod 都重新拉取镜像(适合开发环境)。Never:只使用本地镜像,从不拉取。
-
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"]
参数拆解:
command: ["stress"]------ 覆盖容器默认的启动命令,指定启动命令为 stress。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 内的容器进行资源限制(requests 和 limits)。
满足资源限制的 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完全失效并引发逻辑混乱。
nodeName 与 nodeSelector 的核心区别
| 维度 | 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% 的使用场景。