pod控制器的类型、job控制器

目录

概念

pod控制器的类型

1. replicaset

2. deployment

3. DaemonSet

4. StatefulSet

实验:无头服务+StatefulSet

job控制器

job普通任务

cronjob 定时任务


概念

pod控制器又叫做工作负载workload,它介于k8s集群和节点之间。它属于中间层。它的作用就是确保pod资源符合预期的状态。

pod资源出现故障的时候,会自动重启。对基于控制器创建的pod,delete pod相当于对pod重启,并不能删除pod,必须要把控制器删除,pod也会自动删除。

pod控制器的类型

1. replicaset

结合控制器一块用来控制副本数

2. deployment

最常用的控制器

3. DaemonSet

确保在每个节点上都会部署一个pod用于系统后台的支撑业务。特征:服务是无状态应用,delete pod也相当于重启。

使用场景:需要在每个节点都部署,或者是需要在后台运行的pod 。比如ELK的logstash

注:DaemonSet部署不能指定副本数。

piVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: nginx1
  name: nginx1
spec:
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx1
        image: nginx:1.22

4. StatefulSet

有状态的部署,pod的名称是固定的,一旦创建永久不变,增加副本数,也是有序的递增。StatefulSet可以指定副本数,里面的pod可以扩容和缩容。

delete pod也是相当于重启,只不过pod的名称不再发生变化。

使用场景:主要用于数据库,数据库必须要有指定的编号,比如redis和ELK中的ES。对数据独立性要求比较高的应用使用StatefulSet。

它的ClusterIP要为空,也就是定义值为None

基于StatefulSet部署的服务的特点:无头服务 headless

有状态的副本需要持久化存储,因为每一个pod都要有一个自己的独立的挂载卷。这里可以用hostpath和动态pv(它会自动给每个pod创建一个挂载卷)

实验:无头服务+StatefulSet

vim statefulSet.yaml

#定义service
apiVersion: v1
kind: Service
metadata:
  name: nginx-web
  labels:
    app: svc1
spec:
  ports:
  - port: 80
#service的暴露端口
    targetPort: 80
#容器的端口
  clusterIP: None
  selector:
    app: nginx1

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
  labels:
    app: nginx1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx1
  serviceName: "nginx-web"
#这个字段必须要加,名称要和service的名字一致
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      terminationGracePeriodSeconds: 10
#pod被终止时,强制等待容器退出的时间是10秒,也可以在命令行用--force
      containers:
      - name: nginx
        image: nginx:1.22
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
#挂载的模版
  - metadata:
      name: www
    spec:
      accessModes: ["ReadWriteMany"]
      storageClassName: "nfs-client-storageclass"
      resources:
        requests:
          storage: 1Gi
#用这个模版的作用就是:
#所有的pod都会自动生成一个pv,在存储节点目录创建一个独立的数据卷,不能作为统一的数据同步到容器。

kubectl get pod -o wide

在客户机的/opt/k8s/

总结:StatefulSet就是每个pod独自有一个挂载点目录,不共享目录。

DNS解析:因为是无头服务,k8s集群为这些pod做一个dns的记录

DNS格式:web-0.nginx-web.default.svc.cluster.local

job控制器

job控制器属于任务类型的控制器。

任务类型的控制器有两种:

普通任务 job:使用场景:批量处理脚本,数据库迁移,视频解码等一次性的任务

定时任务 Cronjob:使用场景:需要定期执行的任务,比如环境扫描,健康检查

job普通任务

vim job.yaml

#job,普通类型的任务
apiVersion: batch/v1
kind: Job
metadata:
  name: centos
spec:
  template:
    spec:
      containers:
      - name: centos
        image: centos:7
        command: ["/bin/bash","-c","test -e /etc/passwd"]
      restartPolicy: Never
#job类型的pod重启只能是never或者OnFailure
  backoffLimit: 2
#表示如果任务失败,重试的次数,不加默认是6次

kubectl get jobs.batch  查看job

cronjob 定时任务

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: test1-1
spec:
  schedule: "*/1 * * * *"
#定时任务执行的时间周期
  concurrencyPolicy: Allow
#要保留的失败的完成作业数,默认是1个
  startingDeadlineSeconds: 15
#pod必须在15秒内开始执行定时任务的内容,超过这个时间没有运行,任务不运行而且标记为失败
  jobTemplate:
#指定定时任务的执行模版,包括镜像和任务
    spec:
      template:
        spec:
          containers:
          - name: centos
            image: centos:7
            command: ["/bin/bash","-c","test -e /etc/passwd"]
          restartPolicy: OnFailure
#重启策略也只能是Never和Onfailure

kubectl get cronjobs.batch  查看定时任务

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值