HiHuo
首页
博客
手册
工具
首页
博客
手册
工具
  • Kubernetes 进阶

    • /books/k8s/
    • Kubernetes 高阶学习手册
    • 01-架构与核心概念
    • 02-网络体系
    • 03-存储管理
    • 04-调度控制
    • 05-发布与弹性
    • 06-安全与治理
    • 07-观测与SRE
    • 08-可靠性运维
    • 09-成本与容量
    • 10-故障排查
    • 11-运维工具
    • 12-生产清单
    • 13-AI平台集成

01-架构与核心概念

Kubernetes Control Plane 和 Node 组件深度解析

学习目标

通过本模块学习,你将掌握:

  • Kubernetes 整体架构和组件职责
  • Control Plane 各组件的工作原理
  • Node 侧组件的协作机制
  • API 生态和扩展机制
  • 面试高频架构问题

一、Kubernetes 整体架构

核心设计理念

Kubernetes 采用声明式 API 和 控制器模式,通过以下核心概念实现容器编排:

┌─────────────────────────────────────────────────────────────┐
│                    Kubernetes 集群                          │
├─────────────────────────────────────────────────────────────┤
│  Control Plane (Master)                                    │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐           │
│  │ API Server  │ │  Scheduler  │ │ Controller  │           │
│  │             │ │             │ │ Manager     │           │
│  └─────────────┘ └─────────────┘ └─────────────┘           │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │                    etcd                                │ │
│  └─────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│  Worker Nodes                                               │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐           │
│  │   kubelet   │ │   kubelet   │ │   kubelet   │           │
│  │ kube-proxy  │ │ kube-proxy  │ │ kube-proxy  │           │
│  │  Container  │ │  Container  │ │  Container  │           │
│  │  Runtime    │ │  Runtime    │ │  Runtime    │           │
│  └─────────────┘ └─────────────┘ └─────────────┘           │
└─────────────────────────────────────────────────────────────┘

关键特性

特性说明优势
声明式 API描述期望状态,而非执行步骤幂等性、可重复性
控制器模式持续监控并修正实际状态自动化、自愈能力
微服务架构组件松耦合,独立部署可扩展性、可维护性
云原生设计为云环境优化弹性、可观测性

️ 二、Control Plane 组件详解

2.1 kube-apiserver(API 服务器)

职责:Kubernetes 集群的唯一入口点

核心功能

  • 认证(Authentication):验证用户身份
  • 鉴权(Authorization):检查用户权限
  • 准入控制(Admission Control):验证和修改请求
  • 审计(Audit):记录所有 API 请求
  • QPS 限流:防止 API 过载
  • 优先级队列:确保重要请求优先处理

工作原理

graph TD
    A[客户端请求] --> B[认证]
    B --> C[鉴权]
    C --> D[准入控制]
    D --> E[API 处理]
    E --> F[etcd 存储]
    F --> G[返回响应]

关键配置

# kube-apiserver 配置示例
apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-apiserver-config
data:
  kube-apiserver.yaml: |
    apiVersion: kubeapiserver.config.k8s.io/v1
    kind: KubeAPIServerConfiguration
    audit:
      logFormat: json
      logMaxAge: 30
    admission:
      plugins:
      - name: ResourceQuota
      - name: LimitRanger
    requestTimeout: 60s
    maxRequestsInFlight: 400

2.2 etcd(分布式存储)

职责:存储集群的所有状态数据

核心特性

  • 强一致性:Raft 算法保证数据一致性
  • 高可用性:支持多节点部署
  • 性能优化:SSD 存储,定期压缩
  • 备份恢复:支持快照和恢复

性能调优

# etcd 性能监控
ETCDCTL_API=3 etcdctl endpoint health --endpoints=https://127.0.0.1:2379

# 查看 etcd 状态
ETCDCTL_API=3 etcdctl endpoint status --endpoints=https://127.0.0.1:2379 -w table

# 定期压缩(减少存储空间)
ETCDCTL_API=3 etcdctl defrag --endpoints=https://127.0.0.1:2379

备份策略

# 创建快照
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key

# 恢复快照
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db \
  --data-dir /var/lib/etcd-restore

2.3 kube-scheduler(调度器)

职责:为新创建的 Pod 选择最合适的 Node

调度流程

graph TD
    A[Pod 创建] --> B[加入调度队列]
    B --> C[预选阶段<br/>Filter]
    C --> D[优选阶段<br/>Score]
    D --> E[选择最佳节点]
    E --> F[绑定到节点]

预选策略(Filter)

  • NodeAffinity:节点亲和性
  • PodAffinity:Pod 亲和性
  • Taints/Tolerations:污点和容忍
  • 资源检查:CPU、内存、存储
  • 端口冲突:检查端口占用

优选策略(Score)

  • LeastRequestedPriority:优先选择资源使用率低的节点
  • BalancedResourceAllocation:平衡 CPU 和内存使用
  • ImageLocalityPriority:优先选择已缓存镜像的节点
  • NodeAffinityPriority:节点亲和性权重

自定义调度器

apiVersion: v1
kind: Pod
metadata:
  name: custom-scheduler-pod
spec:
  schedulerName: my-custom-scheduler
  containers:
  - name: nginx
    image: nginx

2.4 kube-controller-manager(控制器管理器)

职责:运行各种控制器,确保集群状态符合期望

核心控制器

控制器职责关键资源
Deployment Controller管理 Deployment 和 ReplicaSetDeployment, ReplicaSet
StatefulSet Controller管理有状态应用StatefulSet
DaemonSet Controller确保每个节点运行一个 PodDaemonSet
Job Controller管理批处理任务Job, CronJob
Node Controller监控节点状态Node
EndpointSlice Controller管理服务端点EndpointSlice

控制器工作原理

graph TD
    A[期望状态] --> B[控制器监控]
    B --> C[比较实际状态]
    C --> D{状态一致?}
    D -->|是| E[无需操作]
    D -->|否| F[执行调谐操作]
    F --> G[更新实际状态]
    G --> B

2.5 cloud-controller-manager(云控制器)

职责:与云厂商 API 交互,管理云资源

功能模块

  • Node Controller:管理云实例生命周期
  • Route Controller:配置云路由
  • Service Controller:管理云负载均衡器
  • Volume Controller:管理云存储卷

️ 三、Node 侧组件详解

3.1 kubelet(节点代理)

职责:管理节点上的 Pod 生命周期

核心功能

  • Pod 生命周期管理:创建、启动、停止、删除
  • 健康检查:livenessProbe、readinessProbe
  • 卷挂载:处理 Volume 挂载
  • 容器运行时接口:通过 CRI 与容器运行时交互
  • 资源监控:监控节点资源使用情况

工作流程

graph TD
    A[API Server] --> B[kubelet]
    B --> C[Pod 规格]
    C --> D[创建容器]
    D --> E[健康检查]
    E --> F[状态上报]
    F --> A

关键配置

# kubelet 配置示例
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
authentication:
  webhook:
    enabled: true
authorization:
  mode: Webhook
cgroupDriver: systemd
containerRuntimeEndpoint: unix:///var/run/containerd/containerd.sock
podCIDR: 10.244.0.0/16

3.2 容器运行时(Container Runtime)

职责:实际运行容器的底层组件

主流选择

  • containerd(推荐):轻量级,性能好
  • CRI-O:专为 Kubernetes 设计
  • Docker:已废弃 dockershim

CRI 接口

// Container Runtime Interface 核心方法
type RuntimeService interface {
    // 创建 Pod
    RunPodSandbox(ctx context.Context, req *RunPodSandboxRequest) (*RunPodSandboxResponse, error)
    // 停止 Pod
    StopPodSandbox(ctx context.Context, req *StopPodSandboxRequest) (*StopPodSandboxResponse, error)
    // 创建容器
    CreateContainer(ctx context.Context, req *CreateContainerRequest) (*CreateContainerResponse, error)
    // 启动容器
    StartContainer(ctx context.Context, req *StartContainerRequest) (*StartContainerResponse, error)
}

3.3 CNI(容器网络接口)

职责:为 Pod 配置网络

主流 CNI 插件

  • Flannel:简单易用,VXLAN 模式
  • Calico:功能丰富,支持网络策略
  • Cilium:基于 eBPF,高性能
  • Weave:简单部署,自动发现

CNI 工作原理

graph TD
    A[Pod 创建] --> B[kubelet]
    B --> C[调用 CNI 插件]
    C --> D[创建网络接口]
    D --> E[配置路由规则]
    E --> F[Pod 网络就绪]

3.4 kube-proxy(网络代理)

职责:实现 Service 的负载均衡

工作模式

  • iptables 模式:通过 iptables 规则实现
  • IPVS 模式:基于内核 IPVS 实现
  • eBPF 模式:基于 eBPF 程序实现

负载均衡原理

# 查看 iptables 规则
iptables -t nat -L KUBE-SERVICES

# 查看 IPVS 规则
ipvsadm -ln

# 查看 Service 端点
kubectl get endpoints

四、API 生态与扩展

4.1 原生资源类型

工作负载资源

  • Pod:最小部署单元
  • ReplicaSet:副本集管理
  • Deployment:无状态应用部署
  • StatefulSet:有状态应用部署
  • DaemonSet:节点守护进程
  • Job/CronJob:批处理任务

服务发现资源

  • Service:服务抽象
  • Ingress:HTTP/HTTPS 路由
  • EndpointSlice:服务端点

存储资源

  • PersistentVolume:持久卷
  • PersistentVolumeClaim:持久卷声明
  • StorageClass:存储类

4.2 策略与治理资源

访问控制

  • RBAC:基于角色的访问控制
  • ServiceAccount:服务账户
  • Role/ClusterRole:角色定义
  • RoleBinding/ClusterRoleBinding:角色绑定

资源管理

  • ResourceQuota:资源配额
  • LimitRange:资源限制
  • HPA/VPA:自动扩缩容
  • PodDisruptionBudget:Pod 中断预算

网络策略

  • NetworkPolicy:网络隔离策略

4.3 扩展机制

CRD(自定义资源定义)

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myresources.example.com
spec:
  group: example.com
  versions:
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              replicas:
                type: integer
                minimum: 1
                maximum: 10
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource

Operator 模式

// 自定义控制器示例
type MyResourceController struct {
    client    kubernetes.Interface
    informer  cache.SharedIndexInformer
    workqueue workqueue.RateLimitingInterface
}

func (c *MyResourceController) processNextWorkItem() bool {
    obj, shutdown := c.workqueue.Get()
    if shutdown {
        return false
    }
    
    // 处理资源变更
    err := c.syncHandler(obj.(string))
    if err != nil {
        c.workqueue.AddRateLimited(obj)
        return true
    }
    
    c.workqueue.Done(obj)
    return true
}

Admission Webhook

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionWebhook
metadata:
  name: my-webhook
webhooks:
- name: my-webhook.example.com
  clientConfig:
    service:
      name: my-webhook-service
      namespace: default
      path: "/validate"
  rules:
  - operations: ["CREATE", "UPDATE"]
    apiGroups: ["apps"]
    apiVersions: ["v1"]
    resources: ["deployments"]

️ 五、命令速记

集群信息查看

# 查看集群信息
kubectl cluster-info

# 查看节点状态
kubectl get nodes -o wide

# 查看组件状态
kubectl get pods -n kube-system

# 查看 API 资源
kubectl api-resources

# 查看 API 版本
kubectl api-versions

组件调试

# 查看 kube-apiserver 日志
kubectl logs -n kube-system kube-apiserver-master

# 查看 etcd 状态
kubectl get pods -n kube-system -l component=etcd

# 查看调度器日志
kubectl logs -n kube-system kube-scheduler-master

# 查看控制器管理器日志
kubectl logs -n kube-system kube-controller-manager-master

资源管理

# 查看所有资源
kubectl get all --all-namespaces

# 查看资源详情
kubectl describe node <node-name>
kubectl describe pod <pod-name>

# 查看资源 YAML
kubectl get pod <pod-name> -o yaml

# 编辑资源
kubectl edit pod <pod-name>

六、面试核心问答

Q1: Kubernetes 的整体架构是怎样的?

答案要点:

  • Control Plane:API Server、etcd、Scheduler、Controller Manager
  • Worker Nodes:kubelet、kube-proxy、容器运行时、CNI
  • 声明式 API 和控制器模式
  • 微服务架构设计

Q2: kube-apiserver 的作用和特性?

答案要点:

  • 集群唯一入口点
  • 认证、鉴权、准入控制
  • 审计、限流、优先级队列
  • RESTful API 设计

Q3: etcd 在 Kubernetes 中的作用?

答案要点:

  • 存储集群所有状态数据
  • 强一致性保证
  • 高可用部署
  • 性能优化和备份策略

Q4: kube-scheduler 的调度流程?

答案要点:

  • 预选阶段(Filter)
  • 优选阶段(Score)
  • 绑定阶段(Bind)
  • 可扩展的调度框架

Q5: 如何实现 Kubernetes 的高可用?

答案要点:

  • Control Plane 多节点部署
  • etcd 集群部署
  • 负载均衡器配置
  • 数据备份和恢复策略

七、故障排查

常见问题诊断

1. API Server 无法访问

# 检查 API Server 状态
kubectl cluster-info

# 检查证书
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout

# 检查网络连通性
telnet <master-ip> 6443

2. etcd 连接失败

# 检查 etcd 状态
ETCDCTL_API=3 etcdctl endpoint health

# 检查 etcd 日志
journalctl -u etcd -f

# 检查证书
ETCDCTL_API=3 etcdctl --cert-file=/etc/kubernetes/pki/etcd/server.crt \
  --key-file=/etc/kubernetes/pki/etcd/server.key \
  --ca-file=/etc/kubernetes/pki/etcd/ca.crt \
  endpoint health

3. 节点 NotReady 状态

# 检查节点详情
kubectl describe node <node-name>

# 检查 kubelet 状态
systemctl status kubelet

# 检查容器运行时
systemctl status containerd

八、最佳实践

生产环境建议

  1. Control Plane 高可用

    • 至少 3 个 Master 节点
    • 使用负载均衡器
    • 定期备份 etcd
  2. 安全配置

    • 启用 RBAC
    • 使用 TLS 加密
    • 定期轮换证书
  3. 监控告警

    • 部署 Prometheus + Grafana
    • 监控关键指标
    • 设置告警规则
  4. 资源管理

    • 设置合理的 requests/limits
    • 使用 ResourceQuota
    • 定期清理无用资源

九、总结

通过本模块学习,你已经掌握了:

  • Kubernetes 整体架构和设计理念
  • Control Plane 各组件的职责和工作原理
  • Node 侧组件的协作机制
  • API 生态和扩展机制
  • 常见故障排查方法
  • 生产环境最佳实践

下一步建议:继续学习 02-网络体系,深入了解 Kubernetes 网络通信机制。

Prev
Kubernetes 高阶学习手册
Next
02-网络体系