首页 > 其他分享 >k8s Deployment与StatefulSet:深入理解两种控制器的区别

k8s Deployment与StatefulSet:深入理解两种控制器的区别

时间:2024-07-26 20:39:56浏览次数:12  
标签:StatefulSet Kubernetes 扩展 应用 Deployment Pod k8s

Kubernetes(k8s)是一个强大的容器编排平台,它提供了多种资源对象来管理容器化应用。在这些资源对象中,DeploymentStatefulSet 是两种常见的控制器,它们用于不同场景下的容器应用管理。本文将深入探讨这两种控制器的区别,帮助你更好地理解它们在Kubernetes中的应用和选择。

一、Kubernetes Deployment

Deployment 是 Kubernetes 中用于管理无状态应用的控制器。它确保指定数量的 Pod 副本始终处于运行状态。以下是 Deployment 的一些关键特性:

  • 自动扩展:可以根据资源利用率或自定义指标自动扩展 Pod 数量。
  • 滚动更新:支持滚动更新,逐步替换旧版本的 Pod。
  • 自我修复:当 Pod 失败时,自动替换失败的 Pod。

二、Kubernetes StatefulSet

Deployment 不同,StatefulSet 用于管理有状态应用。它为每个 Pod 提供持久的网络标识符和持久化存储。以下是 StatefulSet 的一些关键特性:

  • 持久性:每个 Pod 都有一个唯一的网络标识符(如 DNS 名称)和持久化存储。
  • 有序部署:Pod 按顺序进行扩展、更新和删除。
  • 有序扩展:支持有序扩展和缩减,确保应用状态的一致性。

三、Deployment vs StatefulSet

  1. 应用类型

    • Deployment 适用于无状态应用,如 Web 服务器、缓存服务等。
    • StatefulSet 适用于有状态应用,如数据库、消息队列等。
  2. 网络标识

    • Deployment 中的 Pod 没有持久的网络标识符,Pod 的 IP 地址可能会在更新时改变。
    • StatefulSet 中的每个 Pod 都有一个稳定的网络标识符,如稳定的 DNS 名称和 IP 地址。
  3. 存储

    • Deployment 不保证存储的持久性,Pod 的存储在 Pod 重启时可能会丢失。
    • StatefulSet 提供持久化存储,确保即使 Pod 重启,数据也不会丢失。
  4. 扩展和更新

    • Deployment 支持水平扩展和滚动更新,适合快速迭代和扩展的应用。
    • StatefulSet 支持有序扩展和更新,适合需要维护状态一致性的应用。

四、使用场景

  • 无状态应用:如 Web 应用、缓存服务等,使用 Deployment 可以轻松实现自动扩展和滚动更新。
  • 有状态应用:如数据库、消息队列等,使用 StatefulSet 可以确保应用状态的一致性和持久性。

五、示例配置

以下是 DeploymentStatefulSet 的示例配置:

Deployment 示例

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

StatefulSet 示例

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: database
spec:
  serviceName: "database-service"
  replicas: 3
  selector:
    matchLabels:
      app: database
  template:
    metadata:
      labels:
        app: database
    spec:
      containers:
      - name: database
        image: mysql:latest
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

六、结论

了解 DeploymentStatefulSet 的区别对于在 Kubernetes 中管理不同类型的应用至关重要。选择合适的控制器可以确保应用的稳定性和可扩展性。

七、常见问题解答

  • 问:我可以同时使用 DeploymentStatefulSet 吗?

    • 答:可以,根据应用的需求,你可以在同一个 Kubernetes 集群中同时使用 DeploymentStatefulSet
  • 问:如何决定使用 Deployment 还是 StatefulSet

    • 答:如果你的应用需要持久化存储和稳定的网络标识符,选择 StatefulSet;否则,使用 Deployment
  • 问: StatefulSet 是否支持自动扩展?

    • 答:是的,StatefulSet 支持有序扩展,但扩展过程需要手动触发。

标签:StatefulSet,Kubernetes,扩展,应用,Deployment,Pod,k8s
From: https://www.cnblogs.com/ydswin/p/18326214

相关文章

  • 【Kubernetes】初识K8S基础
    目录一.K8S概述1.K8S背景物理机的缺点虚拟机特点(解决了物理机的缺点)虚拟机缺点容器化特点(解决了虚拟机的缺点)容器化缺点2.K8S基本概念2.1.作用2.2.特点二.K8S 集群架构与组件1.集群架构介绍2.核心组件2.1.Master组件Kube-apiserver:是所有服务请求的统一访问入......
  • k8s集群部署prometheus
    目录一、Prometheus简介1.1、前言1.2、prometheus架构1.3、prometheus时间序列数据1.3.1、什么是序列数据?1.3.2、时间序列数据特点1.3.3、Promethues适合场景二、部署配置2.1、Prometheus部署2.1.1、创建命名空间2.1.2、创建RBAC规则2.1.3、创建ConfigMap类型的Prometheus配置文件......
  • 在K8S中,headless服务是什么?
    在Kubernetes(K8S)中,headless服务(无头服务)是一种特殊类型的服务,它与普通的K8S服务有所不同。通常情况下,服务(Service)的作用是为一组后端Pod提供一个稳定的网络入口,使得这些Pod可以通过服务的名称或IP地址被访问到。Headless服务的主要特点如下:不分配ClusterIP:......
  • 在K8S中,集群可以做哪些优化?
    在Kubernetes(K8S)集群中进行优化是一个多方面的任务,涉及从硬件层面到软件层面的诸多考虑。以下是一些常见的优化领域和技术:1.硬件优化选择合适的节点类型:根据工作负载的特点选择合适的计算、内存和存储资源。使用具有高I/O性能的SSD存储,对于I/O密集型工作负载尤......
  • 在K8S中,replicaset 和deploy有何区别?
    在Kubernetes(K8S)中,ReplicaSet和Deployment是两种非常重要的资源对象,它们都用于管理Pod的副本数量。尽管它们有一些相似之处,但在功能和用途上还是存在显著差异。下面详细介绍它们之间的区别:1.ReplicaSet定义:ReplicaSet是一种确保运行指定数量的Pod副本的Kuber......
  • 在K8S中,calico有哪些组件?都是做什么的?
    Calico是一个广泛使用的Kubernetes网络插件,它提供了一个高性能、可扩展的网络解决方案,用于连接和保护容器化的应用。Calico支持多种网络模型,包括BGP(BorderGatewayProtocol)和eBPF(ExtendedBerkeleyPacketFilter)技术,使其成为企业级应用的理想选择之一。以下是Cal......
  • 在K8S中,hpa原理是什么?
    在Kubernetes(K8S)中,HorizontalPodAutoscaler(HPA)是一种自动扩缩容机制,它可以根据预定义的指标自动调整Pod的数量。HPA的主要目的是确保应用程序能够根据实际负载自动伸缩,从而提高资源利用率和系统的弹性。1.HPA的工作原理定义目标指标:用户首先需要定义扩缩容......
  • 从K8s的“临时容器”看K8s设计的厉害之处
    本文分享自华为云社区《从K8s的“临时容器”看K8s设计的厉害之处》,作者:tsjsdbd。从一个容器的不足说起容器概念出现时,有个非常重要的理念:容器中极简。即容器里面只保留需要运行的进程就可以,其他一律不要安装。这也是为什么Docker出现的那时,有一篇文章《为什么不需要在Docker容......
  • 通过rancher部署k8s集群
    一、Rancher介绍Rancher是为使用容器的公司打造的容器管理平台。Rancher简化了使用Kubernetes的流程,开发者可以随处运行Kubernetes(RunKubernetesEverywhere),满足IT需求规范,赋能DevOps团队。Rancher可以创建来自Kubernetes托管服务提供商的集群,自动创建节点并安装K......
  • k8s证书续期10年
    现象通过kubeadm安装kubernetes集群时会存在一个证书问题:由kubeadm生成的客户端证书在1年后到期。随着kubernetes集群的使用,某一天证书过期了,此时kubernetes集群将无法正常使用,比如:kubectl命令执行会产生错误(Youmustbeloggedintotheserver(unauthorized))、......