k8s(三)—控制器(replicaset、deployment、daemonset、job、cronjob)

2023-05-16

1、控制器简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、 Replicaset控制器

[root@server2 ~]# vim rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 3   运行了三个副本
  selector:      表示选者器,控制器和pod之间的联系是啥,因为不同的pod有不同的控制器
    matchLabels:
      app: nginx   如果pod上有app:nginx标签,此pod就属于此控制器
  template:          模板
    metadata:       
      labels:
        app: nginx          表示模板下面创建的pod都会有app: nginx 标签
    spec:
      containers:
      - name: nginx
        image: nginx
[root@server2 ~]# kubectl apply -f rs.yaml   运行
replicaset.apps/replicaset-example created
[root@server2 ~]# kubectl get  rs    
NAME                 DESIRED   CURRENT   READY   AGE
replicaset-example   3         3         3       40s
[root@server2 ~]# kubectl get pod   运行了三个副本
NAME                       READY   STATUS    RESTARTS   AGE
replicaset-example-9qr92   1/1     Running   0          2m13s
replicaset-example-c7zpv   1/1     Running   0          2m13s
replicaset-example-hdrqc   1/1     Running   0          2m13s
[root@server2 ~]# kubectl get pod --show-labels   查看pod的标签 ,3个副本都有 app=myapp 标签
NAME                       READY   STATUS    RESTARTS   AGE     LABELS
replicaset-example-9qr92   1/1     Running   0          3m22s   app=myapp 
replicaset-example-c7zpv   1/1     Running   0          3m22s   app=myapp
replicaset-example-hdrqc   1/1     Running   0          3m22s   app=myapp

标签对控制器的影响

[root@server2 ~]# kubectl label pods replicaset-example-9qr92 app=nginx --overwrite    将原有的标签覆盖换成app=nginx,overwrite 表示覆盖
pod/replicaset-example-9qr92 labeled   
[root@server2 ~]# kubectl get pod --show-labels  查看标签
NAME                       READY   STATUS    RESTARTS   AGE     LABELS
replicaset-example-9qr92   1/1     Running   0          13m     app=nginx   其中这个不匹配,控制器会维护副本数,会重新拉伸一个出来
replicaset-example-c7zpv   1/1     Running   0          13m     app=myapp
replicaset-example-hdrqc   1/1     Running   0          13m     app=myapp
replicaset-example-sjxss   1/1     Running   0          2m46s   app=myapp
[root@server2 ~]# kubectl delete -f rs.yaml   删除
replicaset.apps "replicaset-example" deleted

3、deployment 控制器

deployment 和 Replicaset 书写一样

[root@server2 ~]# vim rs.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
[root@server2 ~]# kubectl apply -f rs.yaml 
deployment.apps/deployment created  
[root@server2 ~]# kubectl get all

在这里插入图片描述

deployment控制器可以进行版本更新,版本退回,rs是做不到的,rs只控制副本数,如下实验:

[root@server2 ~]# vim rs.yaml
apiVersion: apps/v1
kind: ReplicaSet    
metadata:
  name: deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
[root@server2 ~]# vim rs.yaml
[root@server2 ~]# kubectl apply -f rs.yaml   运行
[root@server2 ~]# vim rs.yaml  
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2   版本变成v2
[root@server2 ~]# kubectl apply -f rs.yaml     
[root@server2 ~]# kubectl get pod -o wide
NAME                       READY   STATUS    RESTARTS   AGE     IP            NODE      NOMINATED NODE   READINESS GATES
deployment-895ql           1/1     Running   0          2m28s   10.244.2.17   server4   <none>           <none>
deployment-bsgpw           1/1     Running   0          2m28s   10.244.1.24   server3   <none>           <none>
deployment-wmw2x           1/1     Running   0          2m28s   10.244.1.25   server3   <none>           <none>
replicaset-example-9qr92   1/1     Running   0          77m     10.244.2.15   server4   <none> 
[root@server2 ~]# curl 10.244.2.17   版本并没有更改。rs是做不到版本更新的
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>   
[root@server2 ~]# kubectl delete pod --all 删除所有副本,重新拉起三个副本
pod "deployment-895ql" deleted
pod "deployment-bsgpw" deleted
pod "deployment-wmw2x" deleted
pod "replicaset-example-9qr92" deleted
[root@server2 ~]# kubectl get pod -o wide  查看ip
NAME               READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
deployment-7dvsd   1/1     Running   0          57s   10.244.2.20   server4   <none>           <none>
deployment-prlpx   1/1     Running   0          56s   10.244.1.29   server3   <none>           <none>
deployment-wtvkx   1/1     Running   0          56s   10.244.1.28   server3   <none>           <none>
[root@server2 ~]# curl 10.244.1.28  访问,可以看出新拉起来的,版本就更新成了v2
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>   
[root@server2 ~]# kubectl delete -f rs.yaml   删除
replicaset.apps "deployment" deleted

deployment 控制器

[root@server2 ~]# vim rs.yaml    变回deployment控制器
apiVersion: apps/v1
kind: Deployment   变回deployment控制器
metadata:
  name: deployment   
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
[root@server2 ~]# kubectl apply -f rs.yaml   运行
deployment.apps/deployment created
 [root@server2 ~]# kubectl get pod    查看pod节点,总共3个副本
NAME                          READY   STATUS    RESTARTS   AGE
deployment-678fcbc488-8nhmf   1/1     Running   0          38s
deployment-678fcbc488-9brd7   1/1     Running   0          38s
deployment-678fcbc488-xkr8x   1/1     Running   0          38s
[root@server2 ~]# vim rs.yaml   拉伸为6个副本
apiVersion: apps/v1
kind: Deployment   
metadata: 
  name: deployment
spec:
  replicas: 6     拉伸为6个副本
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
[root@server2 ~]# kubectl apply -f rs.yaml   运行
deployment.apps/deployment configured
[root@server2 ~]# kubectl get pod   可以发现生成了6个副本,deployment控制器里面也有rs控制器,所以可以拉伸
NAME                          READY   STATUS    RESTARTS   AGE
deployment-678fcbc488-57q4x   1/1     Running   0          75s
deployment-678fcbc488-6l24d   1/1     Running   0          75s
deployment-678fcbc488-8nhmf   1/1     Running   0          3m35s
deployment-678fcbc488-9brd7   1/1     Running   0          3m35s
deployment-678fcbc488-cmggh   1/1     Running   0          75s
deployment-678fcbc488-xkr8x   1/1     Running   0          3m35s  
[root@server2 ~]#  vim rs.yaml
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: deployment
spec:
  replicas: 3   下降为3个副本
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
[root@server2 ~]# kubectl apply -f rs.yaml   运行
[root@server2 ~]# kubectl get pod   3个副本
NAME                          READY   STATUS    RESTARTS   AGE
deployment-678fcbc488-57q4x   1/1     Running   0          6m50s
deployment-678fcbc488-9brd7   1/1     Running   0          9m10s
deployment-678fcbc488-cmggh   1/1     Running   0          6m50s

[root@server2 ~]# vim rs.yaml    版本更新
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2   将版本更新为v2
[root@server2 ~]# kubectl apply -f rs.yaml 
deployment.apps/deployment configured
[root@server2 ~]# kubectl get pod -o wide   查看ip
NAME                          READY   STATUS        RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
deployment-57c78c68df-d5bbz   1/1     Running   0          70s   10.244.1.33   server3   <none>           <none>
deployment-57c78c68df-v69cg   1/1     Running   0          66s   10.244.2.24   server4   <none>           <none>
deployment-57c78c68df-xq7wp   1/1     Running   0          61s   10.244.1.34   server3   <none>           <none>
[root@server2 ~]# curl 10.244.1.34    访问,可以发现版本变成v2   deployment控制器负责版本切换
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a> 

deployment控制器版本更新回退原理

[root@server2 ~]# kubectl get all

在这里插入图片描述
在这里插入图片描述
如果更新了镜像,deployment控制器新建一个rs,原来的rs不动保留,之前rs控制的pod会被回收,新的rs应用新的副本
如果退回原来的版本v1,v2上的rs直接切换到以前保留的版本v1,不用新建,v2上rs控制的pod会被回收

上述操作也可用命令操作
在这里插入图片描述

3、DaemonSet控制器(针对所有节点都要部署一个pod)

[root@server2 ~]# kubectl delete -f  rs.yaml 
deployment.apps "deployment" deleted
[root@server2 ~]# cp rs.yaml ds.yaml
[root@server2 ~]# vim ds.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2
[root@server2 ~]# kubectl apply -f  ds.yaml   运行
daemonset.apps/daemonset created
[root@server2 ~]# kubectl get ds   部署了两个节点,其中master节点不部署
NAME        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset   2         2         2       2            2           <none>          39s
[root@server2 ~]# kubectl get node    daemonset控制器是根据集群节点数来部署的,每个节点部署一个pod
NAME      STATUS   ROLES                  AGE     VERSION
server2   Ready    control-plane,master   5d7h    v1.23.4
server3   Ready    <none>                 4d22h   v1.23.4
server4   Ready    <none>                 4d22h   v1.23.4

[root@server2 ~]# vim ds.yaml   如果变更镜像版本
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1    版本变成v1
[root@server2 ~]# kubectl apply -f  ds.yaml   运行
[root@server2 ~]# kubectl get pod -o wide  查看ip
NAME              READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
daemonset-2df5d   1/1     Running   0          68s   10.244.2.26   server4   <none>           <none>
daemonset-ksv2h   1/1     Running   0          72s   10.244.1.36   server3   <none>           <none>
[root@server2 ~]# curl 10.244.1.36   访问,可以发现版本变成v1,所以daemonset控制器也只成版本更新
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@server2 ~]# kubectl delete  -f  ds.yaml  删除
daemonset.apps "daemonset" deleted

4、job控制器(仅执行一次任务)

[root@server1 harbor]# docker pull perl  网上拉取perl镜像
[root@server1 harbor]# docker tag perl:latest reg.westos.org/library/perl:latest  改标签
[root@server1 harbor]# docker push reg.westos.org/library/perl:latest  上传到私有仓库
[root@server2 ~]# 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   出错次数最大上限为4次
[root@server2 ~]# kubectl apply -f job.yaml  创建
job.batch/pi created
[root@server2 ~]# kubectl get pod   可以发现运行完一次之后直接退出
NAME       READY   STATUS      RESTARTS   AGE
pi-v27nx   0/1     Completed   0          2m10s
[root@server2 ~]# kubectl logs pi-v27nx  输出的信息在日志里保存
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096
[root@server2 ~]# kubectl delete -f job.yaml   删除
job.batch "pi" deleted

5、cronjob 控制器

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

Cron 时间表语法

# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6) (周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │                                   
# │ │ │ │ │
# │ │ │ │ │
# * * * * *

[root@server2 ~]# vim cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"   表示每分钟
  jobTemplate:   job模板
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent    
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster       在shell里面执行date命令
          restartPolicy: OnFailure   表示只要出错,就重启
[root@server2 ~]# kubectl apply -f cronjob.yaml  运行
Warning: batch/v1beta1 CronJob is deprecated in v1.21+, unavailable in v1.25+; use batch/v1 CronJob   版本 太低
[root@server2 ~]# kubectl api-versions  查看版本

在这里插入图片描述

[root@server2 ~]# kubectl get pod   每分钟运行
NAME                   READY   STATUS      RESTARTS   AGE
hello-27465276-mtdsr   0/1     Completed   0          2m5s
hello-27465277-9pnb9   0/1     Completed   0          65s
hello-27465278-5qbsj   0/1     Completed   0          5s
[root@server2 ~]# kubectl logs hello-27465278-5qbsj  查看日志里的输出
Tue Mar 22 02:38:01 UTC 2022
Hello from the Kubernetes cluster
[root@server2 ~]# kubectl delete  -f cronjob.yaml   删除
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s(三)—控制器(replicaset、deployment、daemonset、job、cronjob) 的相关文章

随机推荐

  • Vue.js中如何优化性能?9个小技巧分享

    Vue js中如何优化性能 xff1f 下面本篇文章给大家分享Vue js 性能优化的九个小技巧 xff0c 希望对大家有所帮助 xff01 xff08 学习视频分享 xff1a vuejs教程 xff09 01 Functional co
  • 总结分享一些基于Node.js的前端面试题(附解析)

    本篇文章给大家总结分享一些基于Node js的前端面试题 xff08 附解析 xff09 xff0c 希望对大家有所帮助 xff01 一 Node基础概念 1 1 Node是什么 Node js 是一个开源与跨平台的 JavaScript
  • 【整理总结】VSCode常用插件和好用配置(小白必看)

    本篇文章给大家总结分享一些VSCode常用插件和好用配置 xff08 超详细 xff09 希望可以给刚入坑前端的小伙伴一些帮助 本文很长 xff0c 如果能认真看完 xff0c 你一定会有所收获 一 VSCode常用插件推荐 工欲善其事 x
  • 2023年最新最全的VScode插件推荐

    这篇文章主要介绍了这么多年来我在使用 VSCode 过程中用到的一些不错的插件 这些VSCode插件 xff0c 帮你打造地表最强IDE xff01 一 主题及图标 GitHub Theme 黑白两款皮肤 Material Theme 集成
  • 聊聊VSCode中Snippet插件的使用(提高编程效率)

    本文介绍的是 VSCode Snippet 插件 xff0c 一种代码片段配置插件 xff0c 可以节省你写样板代码的时间 你可能之前学习过 VSCode Snippet 插件 xff0c 知道它的作用也学习了配置的语法 xff0c 但是你
  • 软件测试 | 普罗米修斯- 初识PromQL

    理解监控数据 之前讲过普罗米修斯自己就是一个时序数据库 xff0c 它从 exporter 拉取的数据都会按时间戳保存到对应的文件里 xff0c 这个时序数据库默认会保存 14 天的数据 而它自己也开发了一套名为 PromQL 的类 SQL
  • 【整理分享】30个让开发效率倍增的实用VSCode 插件

    本篇文章给大家总结分享30个让开发效率倍增的实用VSCode 插件 xff0c 让你的日常开发工作效率倍增 xff0c 希望对大家有所帮助 xff01 1 Image preview 通过此插件 xff0c 当鼠标悬浮在图片的链接上时 xf
  • 10个提高开发效率的Vue3常用插件(快来收藏)

    本篇文章给大家总结分享几个好用的 Vue 插件 xff0c 可以帮助开发者提高开发效率 解决移动端各种滚动场景需求 xff0c 希望对大家有所帮助 xff01 1 vue multiselect next Vue js 的通用选择 多选 标
  • 手把手带你使用Vue实现一个图片水平瀑布流插件

    如何使用Vue实现一个图片水平瀑布流插件 xff1f 这里给大家分享我在网上总结出来的一些知识 xff0c 希望对大家有所帮助 一 需求来源 今天碰到了一个需求 xff0c 需要在页面里 xff0c 用水平瀑布流的方式 xff0c 将一些图
  • vscode插件分享: 6个Vue3开发必备插件

    本篇文章给大家整理分享 6 个 Vue3 开发必备的 VSCode 插件 xff0c 可以直接用过 VSCode 的插件中心直接安装使用 xff0c 希望对大家有所帮助 xff01 1 Volar 下载数 153 万 43 相信使用 VSC
  • 11个裸VSCode必备插件,助你打造一个前端开发IDE

    VSCode 轻量 开源 xff0c 新鲜下载的 VSCode 可谓是身无长物 一穷二白 xff0c 连个项目管理的功能都没有 身轻如燕的 VSCode 对于后端开发说可能有点幼稚 xff0c 但对于前端来说刚刚好 xff0c 毕竟不需要搞
  • Ubuntu unzip 安装

    ubuntu unzip 安装以及命令参数说明 安装命令 xff1a sudo apt get install unzip 解压 zip文件命令 xff1a unzip unzip命令能够将被winzip压缩的文件解压 unzip命令的执行
  • 新建git仓库管理项目并更新代码提交git

    新建git仓库 第一步 xff1a 登录上自己的git后台 xff0c 在我的工作台的左下角 xff0c 点击仓库旁边的 43 号 xff0c 创建一个新的仓库 xff1a 第二步 xff1a 在新建仓库界面完善仓库的信息 xff0c 这里
  • CMake是什么?有什么用

    CMake CMake是一个跨平台的编译 Build 工具 可以用简单的语句来描述所有平台的编译过程 CMake能够输出各种各样的makefile或者project文件 xff0c 能测试编译器所支持的C 43 43 特性 类似UNIX下的
  • PX4系统学习

    PX4系统学习 扑翼飞行器的硬件组成飞控板电调电调的分类 舵机 扑翼飞行器的硬件组成 要了解学会二次开发首先要知道 xff0c 手头的飞行器的硬件结构 以及各个部分的结构是有何种作用的 xff0c 这样才能在根本上了解编程逻辑 xff0c
  • rostopic echo --noarr查看激光雷达数据详细信息(如frame_id)

    用rostopic echo 激光雷达话题名查看激光雷达返回的数据 xff0c 除了数字什么也显示不出来 想要查看激光雷达数据的frame id等信息 xff0c 加上 noarr参数即可 xff0c 排除话题数据中的数组信息 如图二所示
  • Django基本数据访问

    当需要操作数据时 xff0c 不再需要通过SQL语句 xff0c Django自动为这些模型提供了高级的Python API 接下来联系数据库表的操作 xff0c 运行manage py提供的shell语句 guest gt python3
  • SVO2.0 安装编译

    SVO2 OPEN https github com uzh rpg rpg svo pro open git挂梯子 https blog csdn net qq 33349365 article details 101514412 如果各
  • k8s(一)—pod管理、资源清单编写

    1 pod管理 k8s官方文档 root 64 server2 kubectl run nginx image 61 nginx 运行一个容器 xff0c 镜像为nginx pod nginx created root 64 server2
  • k8s(三)—控制器(replicaset、deployment、daemonset、job、cronjob)

    1 控制器简介 2 Replicaset控制器 root 64 server2 vim rs yaml apiVersion apps v1 kind ReplicaSet metadata name replicaset example