首页 > 系统相关 >Controller(StatefulSet)-部署有状态应用,部署守护进程,一次任务和定时任务

Controller(StatefulSet)-部署有状态应用,部署守护进程,一次任务和定时任务

时间:2024-01-13 17:31:44浏览次数:28  
标签:StatefulSet 部署 Job Controller 副本 DaemonSet Pod my


Controller(StatefulSet)-部署有状态应用

在Kubernetes中,StatefulSet是一种用于部署有状态应用的控制器。与无状态应用不同,有状态应用需要保持持久性和可识别的网络标识。在有状态应用中,每个Pod都有一个唯一的标识符,并且Pod的创建和删除顺序是有序的。

在StatefulSet中创建的Pod具有以下特点:

  1. 稳定的网络标识符:每个Pod都有一个稳定的网络标识符(如Pod名称),这使得有状态应用可以通过网络来识别和访问其他Pod。
  2. 有序的部署和删除:Pod的创建和删除是有序的,确保Pod之间的依赖关系不会被打破。例如,在删除一个Pod之前,StatefulSet会确保该Pod的所有依赖已经被删除。
  3. 有序的扩容和缩容:StatefulSet可以按照特定的顺序扩容和缩容应用程序。这对于有状态应用来说非常重要,因为它们需要确保新的Pod能够正确地加入和离开集群。
  4. 持久存储:StatefulSet可以与持久存储卷(PersistentVolume)进行绑定,从而为有状态应用提供持久性存储。每个Pod都可以访问自己的持久存储卷,这样即使Pod重启或迁移,数据也不会丢失。

使用StatefulSet部署有状态应用的步骤如下:

  1. 创建一个持久存储卷,并为每个Pod分配一个持久存储卷。
  2. 创建一个StatefulSet对象,并指定应用程序的镜像、副本数、网络标签等参数。
  3. 根据需要,通过修改StatefulSet的副本数来扩容或缩容应用程序。
  4. 在需要更新应用程序时,可以通过更新StatefulSet的镜像版本来进行滚动更新。

Controller(DaemonSet)-部署守护进程


在Kubernetes中,DaemonSet是一种Controller,用于在集群中的每个节点上运行一个Pod副本。它确保在每个节点上都有一个Pod副本运行,而不管节点的数量是多少。

使用DaemonSet可以部署守护进程,这些进程在整个集群中的每个节点上运行。这对于需要在每个节点上执行特定任务的场景非常有用,例如日志收集、监控、节点级别的操作等。

要创建一个DaemonSet,需要定义一个包含Pod模板的配置文件。在配置文件中,需要指定所需的容器镜像、容器端口、环境变量等。然后,使用kubectl命令将配置文件部署到集群中。

以下是一个示例DaemonSet的配置文件:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-daemonset
spec:
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:latest
        ports:
        - containerPort: 8080

在这个配置文件中,我们定义了一个名为my-daemonset的DaemonSet,它包含一个Pod模板。Pod模板中定义了一个名为my-container的容器,它使用一个名为my-image的镜像,并将容器端口8080暴露出来。

要部署该DaemonSet,可以使用以下命令:

kubectl apply -f my-daemonset.yaml

这将根据配置文件创建一个名为my-daemonset的DaemonSet,并确保在集群中的每个节点上运行一个Pod副本。

可以使用以下命令来查看DaemonSet的状态和相关信息:

kubectl get daemonset
kubectl describe daemonset my-daemonset

这些命令将显示有关DaemonSet的详细信息,包括当前运行的Pod副本数、副本的状态和相关的事件。

当需要部署守护进程时,使用DaemonSet是一个非常方便的选择。它可以确保在集群的每个节点上都运行一个副本,并提供了对守护进程的可靠部署和管理。


部署一次性任务和定时任务

在Kubernetes中,有两种类型的Controller可以处理一次性任务和定时任务:Job和CronJob。

  1. Job: Job是一种用于运行一次性任务的Controller。它创建一个或多个Pod副本,然后确保这些Pod副本成功完成任务。如果其中一个Pod副本失败,则Job会创建一个新的Pod副本来替代它,直到所有任务都成功完成。

示例:

apiVersion: batch/v1
kind: Job
metadata:
  name: my-job
spec:
  completions: 1  # 完成的Pod副本数
  parallelism: 1  # 并行运行的Pod副本数
  template:
    spec:
      containers:
      - name: my-container
        image: my-image
        command: ["echo", "Hello, Kubernetes!"]
      restartPolicy: Never  # 不自动重启Pod
  1. CronJob: CronJob是一种用于安排定时任务的Controller。它基于Cron表达式定期创建Job,并且可以周期性地运行这些Job来执行任务。

示例:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-cronjob
spec:
  schedule: "*/1 * * * *"  # 每分钟执行一次
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: my-container
            image: my-image
            command: ["echo", "Hello, Kubernetes!"]
          restartPolicy: Never  # 不自动重启Pod

在以上示例中,CronJob会每分钟创建一个Job来运行任务。

无论是Job还是CronJob,都可以使用kubectl命令来创建和管理它们。例如,要创建一个Job,可以使用以下命令:

kubectl create -f my-job.yaml

要创建一个CronJob,可以使用以下命令:

kubectl create -f my-cronjob.yaml

这样,就可以在Kubernetes集群中运行一次性任务和定时任务了。


标签:StatefulSet,部署,Job,Controller,副本,DaemonSet,Pod,my
From: https://blog.51cto.com/u_7050893/9232791

相关文章

  • Kubernetes Controller(Deployment)-发布应用
    Kubernetes控制器(Deployment)是一个用于发布和管理应用程序的核心组件。它提供了一种声明式的方式来定义应用程序的期望状态,并确保系统自动地将当前状态与期望状态保持一致。通过使用Deployment,您可以定义应用程序的副本数、应用程序部署的容器镜像、应用程序的依赖关系等等。一旦......
  • 【ubantu22.10】安装部署timescaledbv2.13.0及postgresql v14.10
    一、安装部署postgresql-timescaledbaptinstallgnupgpostgresql-commonapt-transport-httpslsb-releasewget二、运行postgresql存储库设置脚本/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh三、添加timescaledb第三方存储库echo"debhttps://packageclo......
  • Linux 部署redis集群(三主三从)
    1、由于redis是C语言编写的,安装之前需要保证有gcc的环境配置首先使用命令,查看gcc版本,若已经存在则跳过gcc的安装:gcc-v若不存在gcc,则使用命令安装gcc:yuminstallgcc-c++2、下载redis源文件mkdir/usr/local/rediscd/usr/local/rediswgethttp://download.redis.io/relea......
  • Ubantu部署DNS服务
    1.Ubantu部署DNS服务1.1.安装Bind9在终端中执行以下命令安装Bind9:sudoaptupdatesudoaptinstallbind91.2.配置Bind9修改named.conf.options:sudonano/etc/bind/named.conf.options在文件中,确保以下配置适用于你的环境。根据需要,你可能需要更改forwarders和allow......
  • 基于SpringBoot+Vue的居家养老系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • idea 热部署插件 JRebel
    前言:热部署:是在不关闭或重启服务的情况下,更新Java类文件或配置文件,实现修改内容生效;通过热部署,可提高开发效率,节省程序打包重启的时间;同时,可实现生产环境中需要不停机或重启的服务的升级。 随着代码量增加,也需要不断改动,我们需要重新Run或者DeBug。开发效率......
  • kong api linux安装部署
    在Linux上安装和部署KongAPIGateway通常涉及以下几个步骤,这里提供一个简化的指南。请注意,截至2024年,最新版本的Kong可能有所变化,请参考官方文档获取最新安装指导:https://konghq.com/install/1.确认系统要求确保您的Linux系统满足Kong的最低要求,包括支持的Linux发行版和依赖库。2......
  • Spark on YARN的两种部署模式
     Client模式和Cluster模式最最本质的区别是:Driver程序运行在哪里。Client模式:学习测试时使用,生产不推荐(要用也可以,性能略低,稳定性略低)1.Driver运行在Client上,和集群的通信成本高2.Driver输出结果会在客户端显示Cluster模式:生产环境中使用该模式1.Driver程序在YARN......
  • 部署Alist
    安装curl-fsSL"https://alist.nn.ci/v3.sh"|bash-sinstall默认安装在 /opt/alist 中更新curl-fsSL"https://alist.nn.ci/v3.sh"|bash-supdate卸载curl-fsSL"https://alist.nn.ci/v3.sh"|bash-suninstall密码#添加可执行权限sudoch......
  • Mixtral 8X7B MoE模型基于PAI的微调部署实践
    作者:熊兮、求伯、一耘引言Mixtral8x7B是MixtralAI最新发布的大语言模型,在许多基准测试上表现优于GPT-3.5,是当前最为先进的开源大语言模型之一。阿里云人工智能平台PAI是面向开发者和企业的机器学习/深度学习平台,提供了对于Mixtral8x7B模型的全面支持,开发者和企业用户可以基......