Pod的分类

  • 自主式 Pod:Pod 退出后不会被创建
  • 控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目。

什么是控制器

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

控制器类型

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

控制器简介

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

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

  • DaemonSet:
    DaemonSet(守护进程集)和守护进程类似,它在符合匹配条件的节点上均部署一个Pod
    (1)DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
    (2)DaemonSet 的典型用法:
    在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。
    在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。
    在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、zabbix agent等。
    (3)一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种类型的 daemon 使用。
    (4)一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet,但具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。

  • StatefulSet:
    (1)StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”。
    (2)StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供序号和唯一性保证。
    (3)StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:
    稳定的、唯一的网络标识符。
    稳定的、持久的存储。
    有序的、优雅的部署和缩放。
    有序的、自动的滚动更新。

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

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

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

控制器实验截图

ReplicaSet控制器实例

vim rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1

rs控制器主要用来做副本的伸缩
在这里插入图片描述
在这里插入图片描述
但是rs不能用于更新,它只能控制更改后的副本,更改前的副本不能被改变。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现有curl版本有v1有v2
在这里插入图片描述

Deployment控制器实例

vim Deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 2
  selector:
  matchLabels:
    app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1    

在这里插入图片描述
在这里插入图片描述
全部都是v1
在这里插入图片描述
现在试一下更新操作
在这里插入图片描述
试一下回滚操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
deployment与rs的关系:deployment —> rs —> pod
deployment控制器没变,每次需要重构的是容器。
在这里插入图片描述

DaemonSet控制器实例

vim daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    k8s-app: zabbix-agent
spec:
  selector:
    matchLabels:
      name: zabbix-agent
  template:
    metadata:
      labels:
        name: zabbix-agent
    spec:
      containers:
        - name: zabbix-agent
          image: zabbix-agent

在这里插入图片描述
在这里插入图片描述
每个节点上部署一个
在这里插入图片描述

Job控制器实例

vim job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

计算派 计算圆周率到2000位
在这里插入图片描述
server2和server3上要有perl镜像
在这里插入图片描述

CronJob控制器实例

vim cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busyboxplus
            imagePullPolicy: IfNotPresent
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

*从左往右依次是分钟小时日月周
在这里插入图片描述
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐