4. k8s核心概念 pod deployment service

以下是 Kubernetes 的核心概念详解,涵盖 PodServiceDeploymentNode,以及它们之间的关系和实际应用场景:


1. Pod

定义与作用

最小部署单元 :Pod 是 Kubernetes 中可创建和管理的最小计算单元,包含一个或多个共享资源的容器。

共享环境

网络 :同一 Pod 内的容器共享 IP 地址和端口空间,可通过 localhost 互相通信。

存储:Pod 可挂载共享存储卷(Volume),供容器间共享数据。

设计初衷

紧密耦合的容器组 :例如,主容器 + Sidecar 容器(日志收集、代理)。

临时任务:如一次性批处理作业。

示例 YAML
yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.23
    ports:
    - containerPort: 80
  - name: logger
    image: busybox
    command: ["sh", "-c", "tail -f /dev/null"]
生命周期

Pending :创建中(调度或下载镜像)。

Running :至少一个容器运行中。

Succeeded/Failed:所有容器退出(成功或失败)。


2. Deployment

定义与作用

Pod 的控制器 :用于管理 Pod 副本集(ReplicaSet),确保指定数量的 Pod 始终运行。

核心功能

滚动更新(Rolling Update) :逐步替换旧 Pod,实现零停机部署。

回滚(Rollback) :快速恢复到历史版本。

扩缩容(Scaling):手动或自动调整 Pod 副本数。

与 ReplicaSet 的关系

Deployment 管理 ReplicaSet ,ReplicaSet 管理 Pod

• 每次更新 Deployment 会生成新的 ReplicaSet,旧 ReplicaSet 保留以便回滚。

示例 YAML
yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: nginx
        image: nginx:1.23
        ports:
        - containerPort: 80
常用操作
bash 复制代码
kubectl scale deployment my-deployment --replicas=5  # 扩缩容
kubectl rollout status deployment/my-deployment    # 查看更新状态
kubectl rollout undo deployment/my-deployment       # 回滚

3. Service

定义与作用

访问 Pod 的抽象层 :为动态变化的 Pod 提供稳定的访问端点(IP/DNS)。

核心功能

负载均衡 :将流量分发到多个 Pod。

服务发现:通过 DNS 名称访问服务,避免依赖 Pod IP。

类型与场景
类型 用途 示例场景
ClusterIP 内部服务通信(默认类型) 微服务间调用
NodePort 通过节点端口暴露服务 开发测试环境
LoadBalancer 通过云平台负载均衡器暴露服务 生产环境对外服务
Headless 直接获取 Pod IP(无 ClusterIP) StatefulSet 或 DNS 发现
示例 YAML(ClusterIP)
yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

4. Node

定义与作用

工作节点 :集群中的物理机或虚拟机,负责运行 Pod。

核心组件

kubelet :管理 Pod 生命周期,与 API Server 通信。

kube-proxy :维护网络规则,实现 Service 流量转发。

容器运行时:如 Docker、containerd,负责运行容器。

节点状态

Ready :节点健康,可接收新 Pod。

NotReady:节点故障,Pod 将被重新调度。

查看节点信息
bash 复制代码
kubectl get nodes
kubectl describe node <node-name>  # 查看节点详细信息(资源、事件)

5. 核心概念关系图

复制代码
用户
  ↓
Deployment(定义 Pod 模板和副本数)
  ↓ 控制
ReplicaSet(确保 Pod 数量)
  ↓ 管理
Pod(运行容器)
  ↓ 通过标签关联
Service(提供访问入口)
  ↓
Node(运行 Pod 的物理机/虚拟机)

6. 实际应用场景

(1) 部署 Web 应用
  1. 创建 Deployment:定义 3 个 Nginx Pod 副本。
  2. 创建 Service:通过 ClusterIP 或 LoadBalancer 暴露服务。
  3. 访问应用:通过 Service 的 IP 或 DNS 名称访问。
(2) 微服务架构

前端 :Deployment 运行前端 Pod,Service 类型为 LoadBalancer。

后端 :Deployment 运行 API Pod,Service 类型为 ClusterIP。

数据库:StatefulSet 运行数据库 Pod,Headless Service 提供 DNS 发现。


总结

概念 核心作用 关键特点
Pod 最小部署单元,运行容器 共享网络/存储,临时性
Deployment 管理 Pod 副本,支持滚动更新和回滚 声明式更新,控制器模式
Service 提供稳定的访问端点,负载均衡 屏蔽 Pod 动态性,服务发现
Node 运行 Pod 的物理资源 包含 kubelet、kube-proxy 等组件

理解这些概念是掌握 Kubernetes 的基础,它们共同构建了容器化应用的高效部署、管理和访问体系。

相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS2 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun2 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)2 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang2 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿3 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl3 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、3 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove3 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21