Kubernetes 核心概念
·
Kubernetes 核心概念
一、整体概览
Kubernetes 的核心目标是:
自动化部署、扩缩容和管理容器化应用
核心思想可以浓缩为一句话:
Controller 管 Pod,Service 找 Pod,DNS 记名字
二、Pod(最小可部署单元)
2.1 Pod 是什么
- Pod 是 Kubernetes 中 最小的调度和部署单位
- 一个 Pod 可以包含:
- 一个容器(最常见)
- 多个强耦合容器
形象类比
| 概念 | 类比 |
|---|---|
| Container | 一颗豌豆 |
| Pod | 一个豌豆荚 |
| Node | 一根豌豆藤 |
| Cluster | 一整块豌豆田 |
Pod ≈ 一台逻辑服务器
2.2 Pod 的核心特性
- Pod 内的容器 共享
- 网络(同一个 IP)
- 存储(Volume)
- Pod 生命周期短暂
- Pod 通常不会单独创建,而是由 Controller 管理
2.3 Pod 示例(基础)
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80

三、Controller(自动化运维核心)
3.1 Controller 是什么
Controller 是 Kubernetes 的 控制回路(Control Loop):
- 持续监控集群状态
- 将 当前状态 调整为 期望状态
类比:房间的自动温控器
3.2 常见 Controller 类型
3.2.1 Deployment(无状态应用)
- 最常用 Controller
- 特点:
- Pod 无顺序
- 可随意扩缩容
- 支持滚动升级
典型场景:Web 服务、API 服务
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25

3.2.2 StatefulSet(有状态应用)
- Pod 启动顺序固定
- Pod 名称唯一
- 数据持久化
典型场景:MySQL、Redis、Kafka
记忆口诀:名字不变、顺序不乱、数据不丢
3.2.3 DaemonSet(守护进程)
- 保证每个 Node 上运行一个 Pod
- 常用于:
- 日志采集
- 监控 Agent
- 网络组件
3.2.4 Job / CronJob
| 类型 | 作用 |
|---|---|
| Job | 一次性任务 |
| CronJob | 定时任务 |
3.3 Controller 自动修复示例
kubectl delete pod tomcat-test-xxx
几秒后:
kubectl get pods
# 新 Pod 自动创建
Pod 挂了不可怕,Controller 会自动拉起新 Pod

四、Label(资源标签系统)
4.1 Label 是什么
- Label 是
key=value形式的键值对 - 用于 标识、分类和筛选资源
labels:
app: tomcat
env: production
version: v1
4.2 Label 的作用
- Controller 管理 Pod
- Service 选择 Pod
- 灰度发布
- 多环境区分
- 资源分组与监控

4.3 Label 语法规则
- key / value 最多 63 个字符
- 支持前缀(DNS 子域)
- 系统保留前缀:
kubernetes.io/ - 允许字符:
- 字母、数字
-_.
五、Label Selector(标签选择器)
5.1 两种 Selector 类型
等式选择(Equality-based)
app=tomcat
env!=test
集合选择(Set-based)
env in (dev,prod)
tier notin (frontend)
5.2 类 SQL 理解
SELECT * FROM pod WHERE app = 'tomcat';
六、Service(服务发现与负载均衡)
6.1 Service 解决的问题
- Pod IP 会变化
- Pod 会被销毁重建
Service 为一组 Pod 提供 稳定访问入口
6.2 Service 工作原理
- 通过 Label Selector 绑定 Pod
- 底层通过 iptables / ipvs 转发流量
- 自动负载均衡
6.3 Service 示例(NodePort)
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deploy
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:8.5
ports:
- containerPort: 8080

6.4 查看 Service 与 Endpoints
kubectl get service
kubectl describe service tomcat-service
kubectl get endpoints tomcat-service

七、Endpoints(Service 的真实后端)
- Endpoints 记录 Service 对应的 Pod IP
- Pod 变化时自动更新
- 一般无需手动管理
八、DNS(集群内名称解析)
8.1 DNS 的作用
- Service 名称 → ClusterIP
- Pod 内通过域名访问 Service
完整域名格式:
service-name.namespace.svc.cluster.local
8.2 DNS 验证示例
dig tomcat-service.default.svc.cluster.local @10.96.0.10

九、核心概念之间的关系
Deployment
↓
ReplicaSet
↓
Pod ←── Service ←── DNS
十、Kubernetes 与微服务架构
10.1 架构演进
- 单体架构
- 分布式架构
- 微服务架构(容器化 + Kubernetes)
10.2 LNMT 微服务示例
| 组件 | Kubernetes 资源 |
|---|---|
| NGINX | Deployment + Service |
| Tomcat | Deployment + Service |
| MySQL | StatefulSet |
| DNS | CoreDNS |
十一、总结
Pod 是运行单元,Controller 负责状态,Label 用于关联,Service 提供访问入口,DNS 让服务像普通网络一样使用
更多推荐




所有评论(0)