栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

k8s-----控制器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

k8s-----控制器

控制器
    • ReplicaSet控制器
    • Deployment控制器
      • 更新 Deployment
    • DaemonSet控制器
    • Job控制器
    • Cronjob控制器

ReplicaSet控制器

ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。

 mkdir deployment
 cd deployment/
 vim replicaset.yaml 
kubectl apply -f replicaset.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx


指定副本数为6,启用pod
[root@server2 deployment]# vim replicaset.yaml
[root@server2 deployment]# kubectl apply -f replicaset.yaml

查看pod,有六个副本

指定副本数为1,查看只有一个副本

并且即使删除这个副本,仍会自动生成一个新的副本
当改变副本的标签时,会自动生成一个新的副本;如果将新副本的标签改为ie和原来副本一样的,将会自动回收其中一个副本,只剩下一个。

Deployment控制器

一个 Deployment 为 Pods 和 ReplicaSets 提供声明式的更新能力。

典型的应用场景:

  • 用来创建Pod和ReplicaSet
  • 滚动更新和回滚
  • 扩容和缩容
  • 暂停与恢复
[root@server2 deployment]# kubectl delete -f replicaset.yaml 
[root@server2 deployment]# cp replicaset.yaml deployment.yaml
[root@server2 deployment]# vim deployment.yaml 
[root@server2 deployment]# kubectl apply -f deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

更新 Deployment

仅当 Deployment Pod 模板(即 .spec.template)发生改变时,例如模板的标签或容器镜像被更新, 才会触发 Deployment 上线。 其他更新(如对 Deployment 执行扩缩容的操作)不会触发上线动作.

更改镜像,重新启动

[root@server2 deployment]# vim deployment.yaml
[root@server2 deployment]# kubectl apply -f deployment.yaml


查看信息,发现Deployment 通过创建新的 ReplicaSet 并将其扩容到 3 个副本,并将旧 ReplicaSet 缩容到 0 个副本完成了 Pod 的更新操作:

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

下面的 daemonset.yaml 文件描述了一个运行 nginx Docker 镜像的 DaemonSet:

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:
      hostNetwork: true
      containers:
      - name: zabbix-agent
        image: nginx

DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本,一共有两个节点,所以运行了两个副本。

Job控制器

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

在举例之前首先要下载一个perl镜像
[root@server2 ~]# docker load -i perl.tar
更改标签,并上传至私有仓库。
[root@server2 deployment]# docker tag perl:latest reg.westos.org/library/perl:latest
[root@server2 deployment]# docker push reg.westos.org/library/perl:latest


下面是一个 Job 配置示例。它负责计算 π 到小数点后 2000 位,并将结果打印出来。

[root@server2 deployment]# vim job.yaml
[root@server2 deployment]# kubectl apply -f job.yaml
[root@server2 deployment]# kubectl get pod
[root@server2 deployment]# kubectl logs pi–1-grpvz

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


执行 kubectl get pod,状态为已完成,查看日志得到结果。

Cronjob控制器
  • Cron Job 创建基于时间调度的 Jobs。

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

  • 所有 CronJob 的 schedule: 时间都是基于 kube-controller-manager. 的时区。

下面的 CronJob 示例清单会在每分钟打印出当前时间和问候消息:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-example
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cronjob
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from k8s cluster
          restartPolicy: onFailure

[root@server2 deployment]# vim cronjob.yaml
[root@server2 deployment]# kubectl get pod
[root@server2 deployment]# kubectl delete -f job.yaml
[root@server2 deployment]# kubectl apply -f cronjob.yaml
[root@server2 deployment]# kubectl get pod
[root@server2 deployment]# kubectl logs +镜像名称

查看pod,发现每过一分钟就会建立一个新的副本,查看副本日志看到问候语。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号