Linux企业运维##Kubernetes(五)控制器

目录

一、控制器简介

二、各控制器示例

1.Deployment控制器

2.DaemonSet控制器

3.Job控制器

4.CronJob控制器


一、控制器简介

自主POD调度绑定至节点若主程序崩溃则节点kubelet能够自动重启容器,但若是非主进程崩溃类的容器kubelet无从感知。这便需要依赖于POD对象定义的存活探测,以便kubelet能够探知到此类故障,但若pod被删除或者工作节点自身发生故障(工作节点上都有kubelet,kubelet不可用,因此其健康状态便无法保证),则便需要控制器来处理相应的容器重启和配置。
Kubernetes 中内建了很多 controller(控制器),这些相当于一个状态机,用来控制 Pod 的具体状态和行为。

Pod 的分类:

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

控制器类型:

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

二、各控制器示例

1.Deployment控制器

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

Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。

典型的应用场景:

  • 用来创建Pod和ReplicaSet
  • 滚动更新和回滚
  • 扩容和缩容
  • 暂停与恢复

(1)删除已有的pod,编辑Deployment控制器清单文件deploy.yml,读取该文件新建pod

(2)查看pod信息可以看到由RS控制器管理的三个pod副本成功创建

(3)更改其中任意副本的标签,再次查看pod信息可以看到由RS控制器新建了一个pod副本,但此时RS管理的pod副本数量仍为3个,这是因为Deployment(ReplicaSet)控制器是通过标签控制在任何时间都有指定数量的 Pod 副本在运行

kubectl get pod --show-labels  ##查看标签
kubectl label pod deployment-myapp-678fcbc488-2tgkb app=nginx --overwrite  ##更改并覆盖标签

(4)编辑Deployment控制器清单文件deploy.yml,指定运行的Pod副本数量为6(扩容和缩容)

读取应用该文件,查看pod信息可以看到pod副本数量变为6个

(5)编辑deploy.yml,设定deployment控制器生成的副本使用v2版本的myapp镜像,读取应用该文件(滚动更新和回滚)

查看pod资源额外信息可以得到生成的pod副本的ip,curl访问任一pod副本分配到的ip,是myapp:v2镜像的默认发布页面,pod副本镜像版本迭代更新成功 

2.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 要求。

(1)在test1中拉取并标记上传zabbix-agent到harbor仓库

(2)删除已有的pod,编辑DaemonSet控制器清单文件daemonset.yml,读取应用该文件

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

 

可看到每个节点上都运行了zabbix监控(控制节点除外)

3.Job控制器

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

(1)在test1中标记上传perl到harbor仓库

(2)删除已有的pod,编辑Job控制器清单文件Job.yml,读取应用该文件

(3)查看pod的日志,可看到job已经执行完成

kubectl logs pi-qqq8f

再次查看pod信息可看到状态为已完成

4.CronJob控制器

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

(1)删除已有的pod,编辑CronJob控制器清单文件cronJob.yml,读取应用该文件

(2)查看pod的日志,可看到每分钟执行一次job

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值