2-k8s-控制器介绍

news2025/1/12 3:51:23

文章目录

    • 一、控制器类型
    • 二、Deployment控制器
    • 三、SatefulSet控制器
    • 四、Daemonset控制器
    • 五、Job控制器
    • 六、CronJob 控制器

一、控制器类型

  1. Deployment:适合无状态的服务部署
  2. StatefullSet:适合有状态的服务部署
  3. DaemonSet:一次部署,所有的node节点都会部署
  4. Job:一次性的执行任务
  5. Cronjob:周期性的执行任务

二、Deployment控制器

  1. 简介

    一般情况下,我们并不直接创建 Pod,而是通过 Deployment 来创建 Pod,由 Deployment 来负责创建、更新、维护其所管理的所有 Pods。

  2. 过程

    1)创建Deployment

    2)调用deployment-controller(deployment控制器)创建一个ReplicaSet

    3)ReplicaSet调用replicaset-controller创建pod

    4)Pod创建完之后就会由启用资源调度程序default-scheduler,将pod分配对应的node节点,由kubelet管理pod

  3. 应用场景

    1)定义Deployment来创建Pod和ReplicaSet
    2)滚动升级和回滚应用
    3)扩容和缩容
    4)暂停和继续Deployment

  4. 编写yaml清单:vi deployment-nginx.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-nginx     #Deployment 的名称
      labels:
        app: nginx
    spec:
      replicas: 3       # 创建 Pod 的副本数
      selector:         #定义 Deployment 如何找到要管理的 Pod,与 template 的 label(标签)对应
        matchLabels:
          app: nginx
      template:          #字段包含以下字段:
        metadata:
          labels:
            app: nginx    #使用 label(标签)标记 Pod
        spec:             #表示 Pod 运行一个名字为 nginx 的容器
          containers:
          - name: nginx
            image: nginx:1.15       #表示 Pod 运行一个名字为 nginx 的容器
            ports:                  #容器用于发送和接收流量的端口
            - containerPort: 80
    
  5. 创建控制器: kubectl apply -f deployment-nginx.yaml

  6. 查看: kubectl get deployment
    在这里插入图片描述

三、SatefulSet控制器

  1. 简介

    StatefulSet是用来管理有状态应用的工作负载API对象,实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为有状态应用

    StatefulSet本质上是Deployment的一种变体,在v1.9版本中已成为GA版本,它为了解决有状态服务的问题,它所管理的Pod拥有固定的Pod名称,启停顺序,在StatefulSet中,Pod名字称为网络标识(hostname),还必须要用到共享存储。

    在Deployment中,与之对应的服务是service,而在StatefulSet中与之对应的headless service,headless service,即无头服务,与service的区别就是它没有Cluster IP,解析它的名称时将返回该Headless Service对应的全部Pod的Endpoint列表。

  2. service与Headless service 区别

    • service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
    • Headless service 无头服务,不需要cluster-IP,直接绑定具体的Pod的IP。
  3. 应用场景

    1) 稳定的持久化存储, 通过VolumeClaimTemplate为每个Pod创建一个PV。即使Pod重新调度后还是能访问到相同的持久化数据, 基于PVC来实现

    2) 稳定的网络标志, 即Pod重新调度后其Pod Name和HostName不变, 基于Headless Service(即没有ip地址和端口的ClusterIP) 来实现
    3) 有序部署, 有序扩展,有序收缩,对于N个副本的StatefulSet,每个Pod都在[0,N)的范围内分配一个数字序号,且是唯一的, 基于initcontainers来实现

  4. 编写yaml清单:vi statefulset-nginx.yaml

    apiVersion: apps/v1
    kind: StatefulSet
    metadata: 
      name: web-statefulset
    spec: 
      serviceName: "nginx-statefulset"
      replicas: 3
      selector: 
        matchLabels: 
          app: nginx-statefulset
      template: 
        metadata: 
          labels: 
            app: nginx-statefulset
        spec: 
          containers: 
          - name: nginx-statefulset
            image: nginx
            ports:  
            - containerPort: 80
              name: web-statefulset
    
  5. 创建资源文件:kubectl apply -f statefulset-nginx.yaml

  6. 查看启动的pod:kubectl get pod

    ps:statefulset资源控制器启动后,pod的名称为ps:statefulsetName-[0-n]

    在这里插入图片描述

  7. 起一个容器并且进入容器内部:kubectl run -it --image busybox:1.28.4 dns-test --restart=Never --rm /bin/sh

  8. 在容器内测试:ping web-statefulset-0.nginx-statefulset
    在这里插入图片描述

  9. 查看地址:nslookup web-statefulset-0.nginx-statefulset
    在这里插入图片描述

  10. StatefulSet的DNS说明

    StatefulSet中每个PodDNS格式为statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local
    1. serviceName为 Headless Service的名字
    2. 0..N-1Pod所在的序号,从О开始到N-1
    3. statefulSetName为StatefulSet的名字
    4. namespace为服务所在的namespace,Headless ServicStatefulSet必须在相同的namespace
    5. .cluster.local为Cluster Domain 
    
  11. StatefulSet扩容与缩容命令的两种命令

    1. kubectl scale statefulset web-statefulset --replicas=5
    2. kubectl patch statefulset web-statefulset  -p '{"spec":{"replicas":2}}'
    
  12. StatefulSet不支持直接更新镜像,需要使用patch间接实现

    kubectl patch statefulset web-statefulset --type='json'  -p='[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"nginx:1.9.1"}]'
    

四、Daemonset控制器

  1. 简介

    服务守护进程,它的主要作用是在Kubernetes集群的所有节点中运行我们部署的守护进程,相当于在集群节点上分别部署Pod副本,如果有新节点加入集群,Daemonset会自动的在该节点上运行我们需要部署的Pod副本,相反如果有节点退出集群,Daemonset也会移除掉部署在旧节点的Pod副本。

  2. 应用场景

    1)日志系统的日志收集

    2)监控系统的数据收集

  3. 编写yaml清单:vi daemonSet-nginx.yaml

    apiVersion: apps/v1
    kind: DaemonSet	#创建DaemonSet资源
    metadata:
      name: fluentd #名字
    spec: 
      selector: 
        matchLabels: 
          app: logging
      template: 
        metadata:  
          labels: 
            app: logging
            id: fluentd
          name: fluentd
        spec:
          containers: 
          - name: fluentd-es
            image: agilestacks/fluentd-elasticsearch:v1.3.0
            env: #环境变量配置
              - name: FLUENTD_ARGS #环境变量的key
                value: -qq	#环境变量的value
            volumeMounts:	#加载数据卷,避兔数据丢失
              - name: containers #数据卷名字
                mountPath: /var/lib/docker/containers	#将数据卷挂载到容器内的哪个目录
              - name: varlog
                mountPath: /varlog
          volumes:	#定义数据卷
            - hostPath: #数据卷类型,主机路径的模式,也就是与node 共享目录
                path: /var/lib/docker/containers # node中的共享目录
              name: containers #定义的数据卷的名称
            - hostPath:
                path: /var/log
              name: varlog
    
  4. 创建资源:kubectl apply -f daemonSet-nginx.yaml

  5. 查看:kubectl get pod -o wide

    ps:可以看到默认在工作节点地下都生成了DaemonSet的pod

    在这里插入图片描述

  6. 修改配置:kubectl edit ds fluentd

    Daemonset会忽略Node的unschedulable状态,有几种方式来指定 Pod只运行在指定的Node节点上:
    nodeSelector:只调度到匹配指定label的Node 上
    nodeAffinity:功能更丰富的Node选择器,比如支持集合操作
    podAffinity:调度到满足条件的Ped所在的Node
        spec:
          nodeSelector:
            type: microservervices
    

    在这里插入图片描述

  7. 再次查看pod:kubectl get pod
    在这里插入图片描述

  8. 查看node的label,发现没有符合部署pod条件的:kubectl get node --show-labels
    在这里插入图片描述

  9. 给worker1和worker2添加标签:

    kubectl label no worker1  type=microservervices
    kubectl label no worker2  type=microservervices
    
  10. 再次查看pod:kubectl get pod
    在这里插入图片描述

五、Job控制器

  1. 简介

    Job控制器用于调配pod对象运行一次性任务,容器中的进程在正常运行结束后不会对其进行重启,而是将pod对象置于completed状态。若容器中的进程因错误而终止,则需要依据配置确定重启与否,未运行完成的pod对象因其所在的节点故障而意外终止后会被重新调度。

  2. 编写yaml清单:vi job-demo.yaml

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-demo
    spec:
      template:
        metadata:
          name: job-demo
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox
            command:
            - "bin/sh"
            - "-c"
            - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"
    
  3. 创建pod:kubectl apply -f job-demo.yaml

  4. 查看: kubectl logs job-demo-4dr95
    在这里插入图片描述

六、CronJob 控制器

  1. 简介

    CronJob其实就是在Job的基础上加上了时间调度,类似Linux中的crontab。

  2. crontab格式

    ps:多个时间可以用逗号隔开; 范围可以用连字符给出;*可以作为通配符; /表示每…

    分钟 值从 059.
    小时 值从 023.
    日   值从 131.
    月   值从 112.
    星期 值从 06, 0 代表星期日
    
  3. 编写yaml清单:vi cronJob-demo.yaml

    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: cronjob-demo
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              restartPolicy: OnFailure
              containers:
              - name: hello
                image: busybox
                args:
                - "/bin/sh"
                - "-c"
                - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"
    
    
  4. 创建pod:kubectl apply -f cronJob-demo.yaml

  5. 查看:kubectl get pod

    ps:一分钟执行一次
    在这里插入图片描述

  6. 查看: kubectl logs cronjob-demo-28281040-866ns

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iMazing 3中文版功能介绍免费下载安装教程

iMazing 3中文版免费下载是一款兼容Win和Mac的iOS设备管理软件。iMazing 3能够将音乐、文件、消息和应用等数据从任何 iPhone、iPad 或 iPod 传输到 Mac 或 PC 上。 使用iMazing 3独特的 iOS 备份功能保证数据安全:设定自动无线备份时间并支持快照;将备份保存到外接驱动器和网…

数据结构复盘——第四章:数组和矩阵

文章目录 第一部分:矩阵第一部分习题第二部分:对称矩阵第二部分习题第三部分:三角矩阵第三部分习题第四部分:三对角矩阵第四部分习题第五部分:稀疏矩阵第五部分习题小结第一部分:矩阵 矩阵在线性代数中已经有过详细了解,在考研中矩阵部分常常考察数组下标 k 与 矩阵行 …

5-k8s-探针介绍

文章目录 一、探针介绍二、探针类型三、探针定义方式四、探针实例五、启动探针测试六、存活探针测试七、就绪探针测试 一、探针介绍 概念 在 Kubernetes 中 Pod 是最小的计算单元,而一个 Pod 又由多个容器组成,相当于每个容器就是一个应用,应…

采用Spring Boot框架开发的医院预约挂号系统3e3g0+vue+java

本医院预约挂号系统有管理员,医生和用户。管理员功能有个人中心,用户管理,医生管理,科室信息管理,预约挂号管理,用户投诉管理,投诉处理管理,通知公告管理,科室分类管理。…

LeetCode24.两两交换链表中的节点

这道题还是比较简单,我看完题目的想法就是借助一个第三变量,来改变两个节点的指针的指向,比如我要改变1和2节点的指向,我用h1表示节点1,我创建一个新的节点ans,先拿ans指向节点2(ans.next h1.n…

Linux性能优化--性能工具:网络

7.0 概述 本章介绍一些在Linux上可用的网络性能工具。我们主要关注分析单个设备/系统网络流量的工具,而非全网管理工具。虽然在完全隔离的情况下评估网络性能通常是无意义的(节点不会与自己通信),但是,调查单个系统在网络上的行为对确定本地配置和应用程…

从零开始的LINUX(二)

1.alias: 用法:取别名,此时code1是code的别名,对code1进行操作和对code进行操作结果一致。 如果原本文件名不存在,仍可以正常运行指令,不会报错。 2.stat 显示指定文件或目录的状态、属性。 3.touch 当文件名不存在的…

基于SSM+Vue的日用品网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

数据结构复盘——第一章:绪论

文章目录 第一部分:数据的专业术语1、数据2、数据元素3、数据项4、数据对象5、数据类型6、抽象数据类型(ADT)第一部分习题第二部分:数据结构1、逻辑结构:2、存储结构(又称物理结构)︰3、运算:第二部分习题第三部分:算法1、算法的五个特性2、算法的设计五个要求第三部分习题…

antd的RangePicker设置默认值,默认近七天(andt+react)

import moment from "moment";state {initData:[moment().startOf(day).subtract(6, d), moment().endOf(day)], }<FormItem label"产生时间" {...tailItemLayout}>{getFieldDecorator("produceTime", {initialValue: initData})(<Ran…

C语言 形参、实参

定义 形参 形式上的参数&#xff0c;没有确定的值 实参 实际存在的&#xff0c;已经确定的参数&#xff0c;常量&#xff0c;变量&#xff0c;表达式&#xff0c;都是实参 区别 实参的值不随形参的变化而变化 在C语言中&#xff0c;数据传送是单向的&#xff0c;即只能把实…

【软考】14.2 统一建模语言UML/事务关系图

《统一建模语言UML》 可视化的建模语言&#xff0c;非程序设计语言UML的结构&#xff1a;构造块&#xff08;事物、关系、图&#xff09;、规则、公共机制 模型的事物 结构事物&#xff1a;静态行为事物&#xff1a;动态分组事物&#xff1a;组织注释事物&#xff1a;解释 事…

基于寄生捕食优化的BP神经网络(分类应用) - 附代码

基于寄生捕食优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于寄生捕食优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.寄生捕食优化BP神经网络3.1 BP神经网络参数设置3.2 寄生捕食算法应用 4.测试结果…

GPT绘制流程图咒语

【咒语】下面是我的一篇论文选取部分&#xff0c;为了让读者更好理解&#xff0c;我准备画一张图&#xff0c;请你阅读后为我设计一下这个图应该怎么画&#xff0c;更有说服力&#xff0c;更容易理解 论文片段&#xff1a; 多模态数据融合研究的基础在于有效的数据采集。首先&a…

DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

12-网络篇-通信过程中的网络表

1.ARP表 主机1和主机2在同一个局域网内&#xff0c;通过之前的章节&#xff0c;我们知道在通信过程中&#xff0c;除了要知道对方的IP地址以外&#xff0c;我们还要知道对方的硬件地址&#xff0c;也就是Mac地址。而ARP协议就是为了解决此种问题。 ARP协议的用途是为了从网络层…

操作系统备考学习 day9 (3.1.1 ~ 3.1.11)

操作系统备考学习 day9 第3章 内存3.1 内存管理概念3.1.1 内存的基本知识指令的工作原理绝对装入可重定位装入动态运行时装入从写程序到程序运行链接的三种方式 3.1.2 内存管理概念内存空间的分配与回收内存保护 3.1.3 覆盖与交换覆盖技术交换技术 3.1.4 连续分配管理方式单一连…

用批处理连续ping一个ip段

今天写这个有一个原因&#xff0c;就是我家的网络用了一个无线电力猫做为无线网络扩展&#xff0c;但忘记了无线电力猫的IP&#xff0c;而且我家新路由器也看不到这个电力猫&#xff0c;也可能有一个原因。我原来用的是192.168.1.1的华为路由器&#xff0c;自然我就把这个无线电…

IDEA中明明导入jar包了,依旧报ClassNotFoundException

解决办法&#xff1a; 1.点击IDEA右上角的设置 2.点击Project Structure... 3.点击Artifacts,点击号把包添加下就可以了

Typora 导出PDF 报错 failed to export as pdf. undefined 解决方案

情况 我想把一个很大的markdown 导出为 248页的pdf 然后就报错 failed to export as pdf. undefined 原因 &#xff1a; 个人感觉应该是图片太大了 格式问题之类导致的 解决 文件 -> 偏好设置 - > 导出 -> pdf -> 自定义 -> 把大小全部改为24mm (虽然图中是32 …