kubernetes(k8s) :控制器(ReplicaSet、Deployment、DaemonSet、job、Cronjob)

本文详细介绍了Kubernetes中的控制器,包括ReplicaSet、Deployment、DaemonSet、Job和CronJob。ReplicaSet确保指定数量的Pod副本运行,Deployment提供声明式更新Pod和ReplicaSet的方式,DaemonSet保证每个节点运行一个Pod副本,StatefulSet用于管理有状态应用,Job和CronJob则分别用于一次性任务和定时任务的执行。文章通过实例演示了如何部署和使用这些控制器。
摘要由CSDN通过智能技术生成

1.控制器

Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源。

pod分类和控制器类型

Pod的分类:

  • 自主式Pod:Pod退出后不会被创建

  • 控制器管理的Pod:在控制器的生命周期里,始终要维持Pod的副本数目

控制器类型:

  • Replication Controller和ReplicaSet
  • Deployment
  • DaemonSet
  • StatefulSet
  • Job
  • CronJob
  • HPA全称Horizontal Pod Autoscaler

1.replication、controller和reolicaset控制器

  • ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。
  • ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet支持新的基于集合的选择器需求
  • ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行
  • 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。

2.Deployment控制器

  • Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。
  • 典型的应用场景:
    用来创建Pod和ReplicaSet
    滚动更新和回滚
    扩容和缩容
    暂停与恢复

3.DaemonSet控制器

DaemonSet确保全部(或者某些)节点上运行一个Pod的副本当有节点加入集群时,也会为他们新增一个Pod。当有节点从集群移除时,这些Pod也会被回收。删除 DaemonSet将会删除它创建的所有Pod。

DaemonSet的典型用法:

  • 在每个节点上运行集群存储DaemonSet, 例如glusterd、ceph
  • 在每个节点上运行日志收集DaemonSet,例如fluentd、logstash
  • 在每个节点上运行监控DaemonSet,例如Prometheus Node Exporter、zabbix agent等

一个简单的用法是在所有的节点上都启动一个DaemonSet,将被作为每种类型的daemon使用。
一个稍微复杂的用法是单独对每种daemon类型使用多个DaemonSet,但具有不同的标志,并且对不同硬件类型具有不同的内存、CPU要求。

4.StatefulSet控制器

StatefulSet是用来管理有状态应用的工作负载API对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用"
StatefulSet用来管理Deployment和扩展一组Pod,井且能为这些Pod提供*序号和唯一性保证*。

StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:

  • 稳定的、唯一的网络标识符。
  • 稳定的、持久的存储。
  • 有序的、优雅的部署和缩放。
  • 有序的、自动的滚动更新。

5.job、cronjob和hpa控制器

Job:
执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束

Cronjob:

  • Cron-Job 创建基于时间调度的Jobs。
  • 一个CronJob对象就像crontab (crontable)文件中的一行,它用Cron格式进行编写,并周期性地在给定的调度时间执行Job。

HPA:
根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。

2. 控制器的部署和实例

控制器,之前的pod都是自主式的pod,在删除之后,pod就没有了,没有控制器去维护它

控制器管理的pod:在控制器的生命周期里,始终维持pod的副本数目

2.1 ReplicaSet应用

\vi rs.yaml
vim rs.yaml

apiVersion: apps/v1    #api版本定义
kind: ReplicaSet       #定义资源类型为ReplicaSet
metadata:              #元数据定义
  name: replicaset-example
spec:                  #ReplicaSet的规格定义
  replicas: 2          #定义副本数量为2个
  selector:            #标签选择器,定义匹配pod的标签
    matchLabels:
      app: nginx
  template:            #pod的模板定义
    metadata:          #pod的元数据定义
      labels:          #定义pod的标签,需要和上面定义的标签一致,也可以多出其他标签
        app: nginx
    spec:              #pod的规格定义
      containers:      #容器定义
      - name: nginx    #容器名称
        image: nginx   #容器镜像

kubectl apply -f rs.yaml 

每个容器起来之后,都会有app:nginx标签
rs去匹配pod,标签必须和底下的容器标签一致

注意:在使用指定控制器时,尽量使用apply来创建pod,apply支持更新而create不支持

kubectl get pod
kubectl get rs

可以看到一次运行了两个pod

kubectl get pod -o wide

在这里插入图片描述实现了负载均衡

测试pod的拉伸,直接将yaml文件中副本的个数修改就可

把副本数量修改至现在的3个,可以看到重新更改文件时,直接成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值