Kubernetes架构完全解析:核心概念与组件详解


categories: - Kubernetes核心概念 tags: - Kubernetes - 架构 - Pod - Service - etcd - API Server


Kubernetes架构完全解析

前言

Kubernetes(简称K8s)是Google开源的容器编排平台,已成为容器编排的事实标准。本教程将带你从零开始,系统掌握Kubernetes的核心概念和实战技能。

Kubernetes是什么?

Kubernetes是一个用于自动部署、扩缩和管理容器化应用程序的开源系统。它提供了:

  • 服务发现与负载均衡:自动分配IP地址和DNS名称
  • 自动装箱:根据资源需求自动调度容器
  • 存储编排:自动挂载存储系统
  • 自动恢复:重启失败的容器
  • 水平扩缩:根据CPU使用率自动调整Pod数量
  • 密钥与配置管理:安全存储敏感信息

Kubernetes架构核心组件

控制平面(Control Plane)

负责整个集群的管理决策和调度:


┌─────────────────────────────────────────────────────────────┐
│                      Control Plane                          │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐│
│  │   API Server│ │  Scheduler  │ │   Controller Manager    ││
│  │   (6443)    │ │   (10259)   │ │   (10252)               ││
│  └─────────────┘ └─────────────┘ └─────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────┐│
│  │                    etcd (2379-2380)                      ││
│  │              集群状态存储、高可用                          ││
│  └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘

核心组件详解:

组件 端口 作用
API Server 6443 RESTful API入口,集群大脑
Scheduler 10259 资源调度,选择最优节点
Controller Manager 10252 维护集群状态,处理控制器逻辑
etcd 2379-2380 分布式键值存储,保存所有集群数据

工作节点(Worker Node)

运行实际工作负载的计算资源:


┌─────────────────────────────────────────────────────────────┐
│                      Worker Node                            │
│  ┌─────────────────────────────────────────────────────────┐│
│  │                    Kubelet (10250)                      ││
│  │        负责与API Server通信,管理节点上的Pod            ││
│  └─────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────┐│
│  │                    Kube-Proxy (10249)                   ││
│  │            维护网络规则,实现服务发现和负载均衡          ││
│  └─────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────┐│
│  │              Container Runtime (Docker/Containerd)       ││
│  │                    负责运行容器                          ││
│  └─────────────────────────────────────────────────────────┘│
│  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐              ││
│  │ Pod1 │ │ Pod2 │ │ Pod3 │ │ Pod4 │ │ Pod5 │              ││
│  └──────┘ └──────┘ └──────┘ └──────┘ └──────┘              ││
└─────────────────────────────────────────────────────────────┘

核心概念图解


┌─────────────────────────────────────────────────────────────────┐
│                         Kubernetes Cluster                       │
│                                                                  │
│  ┌──────────────┐     ┌──────────────┐     ┌──────────────┐    │
│  │    Node 1    │     │    Node 2    │     │    Node 3    │    │
│  │  ┌─────────┐  │     │  ┌─────────┐  │     │  ┌─────────┐  │    │
│  │  │  Pod    │  │     │  │  Pod    │  │     │  │  Pod    │  │    │
│  │  │ ─────── │  │     │  │ ─────── │  │     │  │ ─────── │  │    │
│  │  │ nginx   │◄─┼─────┼─►│ nginx   │◄─┼─────┼─►│ nginx   │  │    │
│  │  │         │  │     │  │         │  │     │  │         │  │    │
│  │  │ app:v1  │  │     │  │ app:v1  │  │     │  │ app:v1  │  │    │
│  │  └─────────┘  │     │  └─────────┘  │     │  └─────────┘  │    │
│  └───────────────┘     └───────────────┘     └───────────────┘    │
│          │                   │                    │              │
│          └───────────────────┼────────────────────┘              │
│                              │                                  │
│                    ┌─────────┴─────────┐                       │
│                    │     Service       │                       │
│                    │   (Load Balancer) │                       │
│                    │   10.96.0.1:80    │                       │
│                    └───────────────────┘                       │
│                              │                                  │
└──────────────────────────────┼──────────────────────────────────┘
                               │
                    ┌──────────┴──────────┐
                    │     Ingress         │
                    │   /app/* -> SVC    │
                    └─────────────────────┘
                               │
                    ┌──────────┴──────────┐
                    │      User          │
                    └────────────────────┘

核心概念详解

Pod

Pod是Kubernetes中最小的可部署计算单元,通常包含:

  • 一个或多个容器:共享网络和存储
  • 共享网络命名空间:同一Pod内容器通过localhost通信
  • 共享存储卷:容器间数据共享

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
    tier: frontend
spec:
  containers:
  - name: nginx
    image: nginx:1.25
    ports:
    - containerPort: 80
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 500m
        memory: 256Mi

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
        ports:
        - containerPort: 80

Service

Service为一组Pod提供稳定的网络访问:


apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: ClusterIP  # ClusterIP, NodePort, LoadBalancer, ExternalName
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP

ConfigMap与Secret

用于管理配置和敏感信息:


# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_URL: mysql://db:3306
  LOG_LEVEL: info

---
# Secret
apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
data:
  # base64编码
  DB_PASSWORD: cGFzc3dvcmQxMjM=  # echo -n "password123" | base64

总结

理解Kubernetes架构和核心概念是掌握容器编排的基础。下一章我们将学习如何安装和配置Kubernetes集群。

核心要点:

发表回复

后才能评论