Kubernetes

K8s 核心概念

·14 分钟阅读·5587 字

Kubernetes 核心概念速查手册,涵盖控制面、节点组件、Pod、Deployment、Service、配置、存储与调度等关键资源

📋 目录

K8s 核心概念

核心定义 Kubernetes 是面向容器化应用的集群编排系统,通过声明式 API、控制器调谐、调度器、Service 网络和存储抽象,实现应用部署、扩缩容、服务发现、滚动更新和故障自愈。

1. Kubernetes 的整体工作方式

Kubernetes 的核心思想是“声明期望状态,由控制器持续调谐实际状态”。用户通过 YAML 或 API 提交资源对象,控制面组件负责保存状态、调度 Pod、创建副本、维护网络入口,并在资源异常时自动修复。

用户提交 YAML / kubectl / API
  ↓
kube-apiserver 接收并校验
  ↓
etcd 保存期望状态
  ↓
controller-manager 调谐资源
  ↓
scheduler 为 Pod 选择节点
  ↓
kubelet 在节点上启动容器

Kubernetes 中的多数对象都围绕两个问题展开:

  1. 应用如何运行:Pod、Deployment、StatefulSet、DaemonSet、Job。
  2. 应用如何被访问和支撑:Service、Ingress、ConfigMap、Secret、PV、PVC、StorageClass。

2. 控制面组件

控制面负责维护集群状态和编排决策。

组件作用重要程度
kube-apiserver集群 API 入口,负责认证、鉴权、准入、资源读写⭐⭐⭐⭐⭐
etcd分布式键值存储,保存集群全部状态⭐⭐⭐⭐⭐
kube-controller-manager运行 Deployment、Node、Job 等控制器⭐⭐⭐⭐
kube-scheduler为未调度 Pod 选择合适节点⭐⭐⭐⭐
cloud-controller-manager对接云厂商负载均衡、节点和路由能力⭐⭐⭐

API Server 是有状态还是无状态? kube-apiserver 自身通常按无状态组件设计,集群状态持久化在 etcd 中。因此 API Server 可以部署多个副本,通过负载均衡实现高可用。

3. 工作节点组件

工作节点负责真正运行 Pod 和容器。

组件作用
kubelet节点代理,监听 Pod 分配结果并管理容器生命周期
kube-proxy维护 Service 转发规则,实现服务访问转发
容器运行时通过 CRI 启动容器,例如 containerd、CRI-O
CNI 插件提供 Pod 网络,例如 Calico、Cilium、Flannel
CSI 插件提供存储挂载与动态卷管理

深化阅读 如需理解每个组件的原理、工作流程和面试考点,详见 K8s 组件详解。

4. Pod

Pod 是 Kubernetes 中最小的部署和调度单元。一个 Pod 可以包含一个或多个容器,这些容器共享网络命名空间、存储卷和生命周期。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80

Pod 核心要点:

  • Pod 是逻辑主机,容器是其中运行的进程。
  • 同一 Pod 内容器共享同一个 IP 和端口空间。
  • Pod 通常是临时对象,重建后 IP 可能变化。
  • 生产环境一般不直接创建裸 Pod,而是通过 Deployment、StatefulSet、DaemonSet 等控制器管理。

5. Deployment

Deployment 用于声明式管理无状态应用,负责副本数、滚动更新和回滚。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.25

Deployment、ReplicaSet、Pod 的关系:

Deployment → ReplicaSet → Pod

常见能力:

  1. 维持期望副本数。
  2. 滚动更新应用版本。
  3. 支持快速回滚。
  4. 通过 selector 管理匹配标签的 Pod。

Deployment 滚动更新的关键参数是什么? maxSurge 表示更新期间允许额外创建的最大 Pod 数;maxUnavailable 表示更新期间允许不可用的最大 Pod 数。默认通常是 25%。

6. StatefulSet

StatefulSet 用于管理有状态应用,例如数据库、消息队列和需要稳定网络标识的中间件。

特性DeploymentStatefulSet
Pod 名称随机后缀,例如 nginx-7d8b9有序编号,例如 mysql-0
网络标识Pod IP 可能变化稳定 DNS 名称
存储通常共享或无状态每个 Pod 可绑定独立 PVC
启停顺序通常并行按序创建和删除
适用场景Web 服务、无状态应用MySQL、ZooKeeper、Kafka 等

StatefulSet 常与 Headless Service、PVC 配合使用。

7. DaemonSet

DaemonSet 确保每个符合条件的节点上运行一个 Pod 副本,常用于节点级组件。

典型场景:

  • 日志采集 Agent,例如 Fluent Bit。
  • 监控 Agent,例如 Node Exporter。
  • 网络插件,例如 Calico Node。
  • 存储插件的节点组件。
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      containers:
        - name: node-exporter
          image: prom/node-exporter:latest

8. Service

Service 为一组 Pod 提供稳定访问入口,解决 Pod IP 不稳定和负载均衡问题。

类型作用访问范围
ClusterIP集群内部虚拟 IP仅集群内访问
NodePort在每个节点暴露端口集群外通过节点 IP 和端口访问
LoadBalancer对接云厂商负载均衡对公网或内网暴露服务
ExternalNameDNS CNAME 映射映射外部域名
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080

深化阅读

9. Ingress

Ingress 提供 HTTP/HTTPS 七层入口,根据域名和路径将外部请求转发到不同 Service。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-service
                port:
                  number: 80

Ingress 本身只是规则对象,实际流量转发需要 Ingress Controller,例如 Nginx Ingress Controller、Traefik 或云厂商 Ingress Controller。

10. ConfigMap 与 Secret

ConfigMap 和 Secret 用于将配置与镜像解耦。

对象用途注意事项
ConfigMap保存普通配置,例如配置文件、环境变量不适合保存敏感信息
Secret保存密码、Token、证书等敏感数据默认只是 base64 编码,不等于强加密

ConfigMap 示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  LOG_LEVEL: info
  APP_MODE: prod

Pod 中引用:

envFrom:
  - configMapRef:
      name: app-config

11. 存储:PV、PVC、StorageClass

Kubernetes 使用 PV、PVC、StorageClass 抽象存储资源。

对象作用
PV集群中的实际存储资源
PVC用户对存储资源的申请
StorageClass动态创建 PV 的模板
CSI标准化存储插件接口

动态供给流程:

用户创建 PVC
  ↓
PVC 指定 StorageClass
  ↓
CSI provisioner 创建 PV
  ↓
PVC 与 PV 绑定
  ↓
Pod 挂载 PVC

详见 PV & PVC 完整深度详解 和 StorageClass + CSI 动态存储体系。

12. 调度相关概念

调度器负责为未绑定节点的 Pod 选择合适 Node。

常见调度约束:

机制作用
nodeSelector按节点标签选择节点
Node Affinity更灵活的节点亲和性规则
Pod Affinity让 Pod 尽量靠近某些 Pod
Pod Anti-Affinity让 Pod 尽量分散到不同节点
Taint / Toleration节点排斥与 Pod 容忍机制
TopologySpreadConstraints控制 Pod 在拓扑域中的分布

调度大致流程:

过滤不满足条件的节点
  ↓
为可用节点打分
  ↓
选择得分最高节点
  ↓
绑定 Pod 到节点

详见 kube-scheduler 完整工作原理。

13. 探针与生命周期

Kubernetes 通过探针判断容器状态。

探针作用
startupProbe判断应用是否启动完成
readinessProbe判断 Pod 是否可以接收流量
livenessProbe判断容器是否需要重启

生命周期钩子:

钩子作用
postStart容器启动后执行
preStop容器终止前执行

探针配置不当会导致服务频繁重启、发布卡住或流量过早进入。详见 K8s 探针机制 和 K8s 生命周期钩子。

14. RBAC 与 ServiceAccount

RBAC 用于控制谁可以对哪些资源执行哪些操作。

对象作用
ServiceAccountPod 在集群内访问 API Server 的身份
Role命名空间级权限规则
ClusterRole集群级权限规则
RoleBinding在命名空间内绑定权限
ClusterRoleBinding在集群范围绑定权限

权限检查命令:

kubectl auth can-i get pods --as system:serviceaccount:default:app

详见 Kubernetes RBAC 完整详解。

15. 常用排查入口

场景常用命令
查看资源kubectl get pod,svc,deploy -A
查看详情和事件kubectl describe pod <pod> -n <ns>
查看日志kubectl logs <pod> -n <ns>
进入容器kubectl exec -it <pod> -n <ns> -- sh
查看发布状态kubectl rollout status deploy/<name> -n <ns>
查看节点kubectl get node -o wide

常见故障可从 Pod 状态、事件、日志、Service Endpoint、节点资源和控制器状态逐层排查。详见 K8s 全场景常见问题完整排查手册。


关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro