5·基础入门入门

Kubernetes 核心组件

kubernetescomponentscore

Kubernetes 核心组件

学习目标

  1. 掌握 Kubernetes 的核心资源对象
  2. 理解 Pod、Deployment、Service 的作用
  3. 了解 Namespace 和 ConfigMap/Secret 的用途

核心概念

核心资源对象

┌─────────────────────────────────────────────────────────────┐
│                    核心资源对象                              │
├─────────────────────────────────────────────────────────────┤
│  工作负载:Pod, Deployment, StatefulSet, DaemonSet, Job    │
│  服务发现:Service, Ingress                                │
│  配置存储:ConfigMap, Secret                                │
│  存储:PersistentVolume, PersistentVolumeClaim             │
│  命名空间:Namespace                                       │
└─────────────────────────────────────────────────────────────┘

Pod

定义:
• 最小部署单元
• 一个或多个容器的集合
• 共享网络和存储

特点:
┌─────────────────────────────────────┐
│  Pod                                │
│  ┌────────────┐ ┌────────────┐     │
│  │ Container 1│ │ Container 2│     │
│  │            │ │            │     │
│  │ 共享:      │ │ 共享:      │     │
│  │ • Network  │ │ • Network  │     │
│  │ • IPC      │ │ • IPC      │     │
│  │ • Volume   │ │ • Volume   │     │
│  └────────────┘ └────────────┘     │
└─────────────────────────────────────┘

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

Deployment

定义:
• 声明式管理 Pod
• 支持滚动更新和回滚
• 自动维护副本数

核心功能:
┌─────────────────────────────────────┐
│  Deployment                         │
│  • 声明期望状态 (3 个副本)          │
│  • 自动创建 ReplicaSet              │
│  • ReplicaSet 创建 Pod              │
│  • 监控并维持副本数                 │
│  • 支持滚动更新                     │
└─────────────────────────────────────┘

示例:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app
        image: nginx:1.24
        ports:
        - containerPort: 80

Service

定义:
• 稳定的网络访问入口
• 负载均衡
• 服务发现

类型:
┌─────────────────────────────────────┐
│  ClusterIP (默认)                   │
│  • 集群内部访问                     │
│  • 分配虚拟 IP                     │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│  NodePort                           │
│  • 通过节点端口外部访问             │
│  • 端口范围: 30000-32767            │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│  LoadBalancer                        │
│  • 云厂商负载均衡器                 │
│  • 自动分配外部 IP                 │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│  ExternalName                       │
│  • 映射到外部 DNS                   │
└─────────────────────────────────────┘

示例:
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

Namespace

定义:
• 资源隔离机制
• 虚拟集群

默认命名空间:
┌─────────────────────────────────────┐
│  default    - 默认命名空间          │
│  kube-system - 系统组件             │
│  kube-public - 公共资源             │
│  kube-node-lease - 节点心跳         │
└─────────────────────────────────────┘

使用场景:
• 多团队共享集群
• 环境隔离 (dev/staging/prod)
• 资源配额管理

示例:
apiVersion: v1
kind: Namespace
metadata:
  name: development

ConfigMap 和 Secret

ConfigMap:
• 存储非敏感配置
• 键值对或文件
• 可挂载为卷或环境变量

示例:
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: production
  LOG_LEVEL: info
  config.json: |
    {"key": "value"}

Secret:
• 存储敏感数据
• Base64 编码
• 可挂载为卷或环境变量

示例:
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  username: YWRtaW4=    # base64 编码
  password: cGFzc3dvcmQ= # base64 编码

资源关系图

┌─────────────────────────────────────────────────────────────┐
│                     资源关系图                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Deployment                                                 │
│      ↓ (管理)                                               │
│  ReplicaSet                                                 │
│      ↓ (创建)                                               │
│    Pod ←──── ConfigMap/Secret (配置)                        │
│      ↓                                                      │
│  Container                                                  │
│      ↓ (暴露)                                               │
│   Service ←──── Ingress (外部访问)                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

实践练习

练习 1:理解组件

回答以下问题:

  1. Pod 和容器的关系是什么?
  2. Deployment 如何管理 Pod?
  3. Service 的三种主要类型有什么区别?

练习 2:编写 YAML

编写以下资源的 YAML 文件:

  1. 一个包含两个容器的 Pod
  2. 一个 3 副本的 Deployment
  3. 一个 ClusterIP 类型的 Service

练习 3:资源关系

画出以下资源的关系图:

  • Deployment
  • ReplicaSet
  • Pod
  • Service
  • ConfigMap

常见误解

1. "Pod 是容器"

错误理解:Pod 就是容器
正确理解:
• Pod 是容器的集合
• 通常一个 Pod 一个容器
• Pod 是最小调度单位

2. "Deployment 直接管理 Pod"

错误理解:Deployment 直接创建 Pod
正确理解:
• Deployment 创建 ReplicaSet
• ReplicaSet 创建 Pod
• 间接管理关系

3. "Service 是负载均衡器"

错误理解:Service 是独立的负载均衡设备
正确理解:
• Service 是虚拟 IP 和端点
• kube-proxy 实现网络规则
• 负载均衡在节点级别实现

小结

要点说明
Pod最小部署单元,容器集合
Deployment声明式管理,滚动更新
Service稳定入口,负载均衡
Namespace资源隔离
ConfigMap非敏感配置存储
Secret敏感数据存储
核心关系Deployment → ReplicaSet → Pod

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「安装 Minikube」 以巩固所学知识。