K8S疑难概念理解——Pod,应该以哪种Kind来部署应用,为什么不直接Pod这种kind?

文章目录

一、Pod概念深度理解,为什么一般不直接以kind=Pod资源类型来部署应用?

Pod是Kubernetes中的最小部署单元,可以包含一个或多个紧密相关的容器(也就是如下yaml image可以配置不止一个,只是多数情况只配一个镜像也就是Pod里面只跑一个容器)。以nginx为例,直接部署Pod参考

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

但实际应用中很少 直接部署Kind为Pod资源类型。主要原因是Pod本身并不提供自我修复、扩展性以及滚动更新等高级功能。这些功能对于生产环境中的应用非常重要,而它们通常由控制器(如Deployment, StatefulSet, DaemonSet,Job/CronJob,RelicaSet等)来管理。 nginx应该选择以Deployment这种kind来部署,案例如下

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3  # 指定要运行的Pod副本数量
  selector:
    matchLabels:
      app: nginx  # 选择器,用于匹配Pod标签
  template:
    metadata:
      labels:
        app: nginx  # Pod的标签
    spec:
      containers:
      - name: nginx
        image: nginx:latest  # 使用最新的Nginx镜像
        ports:
        - containerPort: 80  # 容器内监听的端口

最直观的,这样部署的nginx可以方便进行扩容操作kubectl scale deployment nginx-deployment --replicas=2

二、究竟应该以哪种资源类型来部署应用

以哪种kind部署主要要看Pod里要跑什么类型的应用程序,比如上述nginx案例:
1. Deployment

  • 适用场景:适用于无状态应用,使用最广泛。
  • 特点:
    提供滚动更新和回滚功能。
    支持扩缩容。
    自动恢复失败的Pod。
    适合需要频繁更新的应用。
  • 为什么选择Deployment:
    Nginx作为Web服务器通常是无状态的,适合使用Deployment来管理。
    Deployment提供了自动扩缩容、滚动更新和自我修复等高级功能,非常适合生产环境中的Web服务。
    如果你需要对Nginx进行版本升级或配置更改,可以轻松地通过滚动更新来实现平滑过渡。
    2. StatefulSet
  • 适用场景:适用于有状态应用。
  • 特点:
    为每个Pod提供稳定的网络标识符(如DNS名称)。
    保证Pod的顺序启动和终止。
    适合需要持久存储的应用。
  • 为什么不选择StatefulSet:
    Nginx通常不需要稳定的身份标识或顺序启动,因此StatefulSet并不是最佳选择。
    StatefulSet主要用于数据库、缓存系统等有状态应用,而Nginx作为Web服务器通常是无状态的。
    3. DaemonSet
  • 适用场景:适用于需要在每个节点上运行一个副本的应用(守护)。
  • 特点:
    确保每个节点都运行一个Pod实例。
    适用于日志收集、监控代理等需要在每个节点上运行的服务。
  • 为什么不选择DaemonSet:
    除非你希望在每个节点上都运行一个Nginx实例(例如,用于本地负载均衡或代理),否则DaemonSet不是最佳选择。
    通常情况下,Nginx不需要在每个节点上运行,而是通过Service进行负载均衡。
    4. Job/CronJob
  • 适用场景:适用于一次性任务或定时任务。
  • 特点:
    Job用于执行一次性的任务。
    CronJob用于按时间计划执行的任务。
  • 为什么不选择Job/CronJob:
    Nginx是一个持续运行的服务,而不是一次性任务或定时任务,因此Job和CronJob不适合部署Nginx。
    5. ReplicaSet
  • 适用场景:直接控制一组Pod的副本数量。
  • 特点:
    直接指定Pod的副本数量。
    通常由Deployment创建和管理。
  • 为什么不选择ReplicaSet:
    虽然ReplicaSet可以控制Pod的副本数量,但它缺乏滚动更新和回滚等功能。
    通常建议使用Deployment来管理ReplicaSet,因为Deployment提供了更多的高级功能
相关推荐
高峰君主2 小时前
Docker容器持久化
docker·容器·eureka
能来帮帮蒟蒻吗2 小时前
Docker安装(Ubuntu22版)
笔记·学习·spring cloud·docker·容器
言之。7 小时前
别学了,打会王者吧
java·python·mysql·容器·spark·php·html5
秦始皇爱找茬10 小时前
docker部署Jenkins工具
docker·容器·jenkins
樽酒ﻬق13 小时前
Kubernetes 常用运维命令整理
运维·容器·kubernetes
Golinie14 小时前
Docker底层原理浅析 | namespace+cgroups+文件系统
docker·容器·文件系统·cgroups·unionfs
樽酒ﻬق15 小时前
深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret
安全·贪心算法·kubernetes
FreeBuf_15 小时前
新型恶意软件采用独特混淆技术劫持Docker镜像
运维·docker·容器
李菠菜18 小时前
CentOS系统指定版本Docker与Docker-Compose在线安装教程
docker·容器·centos
爱吃龙利鱼19 小时前
rocky9.4部署k8s群集v1.28.2版本(containerd)(纯命令)
云原生·容器·kubernetes