Kubernetes

K8s 核心概念

·7 分钟阅读·2703 字

Kubernetes 核心概念速查手册,涵盖 Pod、Deployment、Service、ConfigMap 等关键资源

📋 目录

☸️ K8s 核心概念

关于本文档

Kubernetes 核心概念速查手册。本文档是 使用 kubeadm 创建集群kubeadm 参数全解 的概念配套。

#k8s #kubernetes #core-concepts #reference


🏗️ 集群架构

控制平面(Control Plane)

集群的”大脑”,负责管理和协调整个集群。

组件作用面试价值
kube-apiserver所有组件通信的入口,提供 REST API⭐⭐⭐⭐⭐
kube-controller-manager运行控制器(Deployment、Node 等)⭐⭐⭐⭐
kube-scheduler将 Pod 调度到合适的 Node⭐⭐⭐⭐
etcd分布式键值存储,保存集群所有状态⭐⭐⭐⭐⭐

面试题:API Server 是状态ful还是stateless? stateless。API Server 自身不存储状态,所有数据持久化到 etcd 中。这使得 API Server 可以水平扩展。

工作节点(Worker Node)

运行实际工作负载的机器。

组件作用
kubelet节点代理,负责管理 Pod 和容器
kube-proxy网络代理,维护节点上的网络规则
容器运行时如 containerd、CRI-O

深化阅读 如需深入了解每个组件的原理、工作流程及面试考点,请参阅 K8s 组件详解


📦 核心工作负载

Pod

Kubernetes 中最小的部署单元,封装一个或多个容器。

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

核心要点

  • Pod 中的容器共享网络命名空间(同一 IP 和端口空间)
  • Pod 是”逻辑主机”,容器是”进程”
  • Pod 是临时的,重建后 IP 会变化

Deployment

声明式地管理 Pod 的副本数量、滚动更新和回滚。

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 的滚动更新策略?

  • rollingUpdate.maxSurge:更新期间可以超出期望副本数的最大数量(默认 25%)
  • rollingUpdate.maxUnavailable:更新期间允许不可用的最大数量(默认 25%)

StatefulSet

用于管理有状态应用(数据库、消息队列等),保证 Pod 的身份和启动顺序。

特性DeploymentStatefulSet
Pod 名称随机后缀(如 nginx-7d8b9有序编号(如 mysql-0
存储共享卷每个 Pod 独立 PVC
启动顺序并行顺序(0, 1, 2…)
网络标识随机 IP稳定的 DNS 名称

DaemonSet

在每个节点上运行一个 Pod 副本(或指定节点),通常用于日志采集、监控、网络插件。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluentd:latest

🌐 网络与通信

Service

为一组 Pod 提供稳定的网络访问入口。

类型作用访问范围
ClusterIP集群内部虚拟 IP仅集群内可访问
NodePort节点端口映射(30000-32767)集群外可通过节点 IP:端口访问
LoadBalancer云厂商 LB 集成对外暴露服务
ExternalNameDNS CNAME 映射将 Service 映射到外部 DNS
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080

深化阅读

  • ../service/K8s Service 核心原理 — Service 底层原理、veth pair、iptables DNAT 全流程
  • ../service/K8s Service DNS 实现原理 — CoreDNS 解析流程与工作原理
  • ../network/kube-proxy 流量转发与代理模式详解 — kube-proxy 三种模式与数据包流转

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

网络策略(NetworkPolicy)

Pod 级别的防火墙,控制 Pod 之间的网络通信。

默认:Pod 之间可以互相通信(全通)。NetworkPolicy 实现”白名单”机制。