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 的基础,它们共同构建了容器化应用的高效部署、管理和访问体系。

相关推荐
chuanauc4 小时前
Kubernets K8s 学习
java·学习·kubernetes
小张是铁粉5 小时前
docker学习二天之镜像操作与容器操作
学习·docker·容器
烟雨书信5 小时前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记5 小时前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花5 小时前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay5 小时前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu5 小时前
redisSearch docker安装
运维·redis·docker·容器
IT成长日记9 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
疯子的模样13 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
虚伪的空想家14 小时前
rook-ceph配置dashboard代理无法访问
ceph·云原生·k8s·存储·rook