2-k8s-控制器介绍

文章目录

    • 一、控制器类型
    • 二、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: nginxtemplate:          #字段包含以下字段:metadata:labels:app: nginx    #使用 label(标签)标记 Podspec:             #表示 Pod 运行一个名字为 nginx 的容器containers:- name: nginximage: 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: 3selector: matchLabels: app: nginx-statefulsettemplate: metadata: labels: app: nginx-statefulsetspec: containers: - name: nginx-statefulsetimage: nginxports:  - containerPort: 80name: 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: loggingtemplate: metadata:  labels: app: loggingid: fluentdname: fluentdspec:containers: - name: fluentd-esimage: agilestacks/fluentd-elasticsearch:v1.3.0env: #环境变量配置- name: FLUENTD_ARGS #环境变量的keyvalue: -qq	#环境变量的valuevolumeMounts:	#加载数据卷,避兔数据丢失- name: containers #数据卷名字mountPath: /var/lib/docker/containers	#将数据卷挂载到容器内的哪个目录- name: varlogmountPath: /varlogvolumes:	#定义数据卷- hostPath: #数据卷类型,主机路径的模式,也就是与node 共享目录path: /var/lib/docker/containers # node中的共享目录name: containers #定义的数据卷的名称- hostPath:path: /var/logname: 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-demospec:restartPolicy: Nevercontainers:- name: counterimage: busyboxcommand:- "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: OnFailurecontainers:- name: helloimage: busyboxargs:- "/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.rhkb.cn/news/160834.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于ts的keyof

type props_type {name: string,age: number }const props: props_type {name: tjq,age: 18 }for (const key in props) { //props[key]出现红色波浪线const value props[key]; }why? 经过我查阅多方资料,在网上看到一个比较合适的例子 地址&#xf…

OpenRemote: Java 开源 IoT 物联网开发平台,匹配智慧城市、智能家居、能源管理

OpenRemote 是一个直观、用户友好的基于Java语言的开源 IoT 物联网设备管理平台,它包括从连接设备到构建应用程序和特定领域的智能应用程序的所有功能和特性。通过OpenRemote物联网平台,用户可以收集和处理来自不同设备的传感器数据,适用于智…

Gson反序列化原理

前言 序列化和反序列化是日常工作中经常使用的工具,一般用于对象的持久化保存或者对象的网络传输,一般有两种情况,一种是对象本身实现了Serializable接口,这种情况下可以利用jdk自带的功能或者Kryo等这种封装好的序列化反序列化工…

Elasticsearch:什么是大语言模型 (LLMs)?

假设你想参加流行的游戏节目 Jeopardy(这是一个美国电视游戏节目,参赛者将获得答案并必须猜测问题)。 要参加演出,你需要了解任何事情的一切。 所以你决定在接下来的三年里每天都花时间阅读互联网上的所有内容。 你很快就会意识到…

关于 Invalid bound statement (not found): 错误的解决

关于 Invalid bound statement not found: 错误的解决 前言错误原因解决方法1. 检查SQL映射文件2. 检查MyBatis配置3. 检查SQL语句4. 检查命名约定5. 清除缓存6. 启用日志记录 重点注意 结语 我是将军我一直都在,。! 前言 当开发Java Spring Boot应用程…

挚文集团:股票回购速度、收入指引均不及预期,令投资者失望

来源:猛兽财经 作者:猛兽财经 挚文集团未来将不再公布MAU数据 今年6月初,挚文集团(MOMO)在公布2023年第一季度业绩时透露,“陌陌应用的月活跃用户(MAU)”已经从去年3月的1.109亿下降到了今年3月的1.065亿,同比下降了-…

2023,简历石沉大海?软件测试岗位真的已经饱和了....

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的…

执行事务合伙人和法人区别是什么

1. 定义不同: 执行事务合伙人指负责经营和管理合伙企业的人,对外代表合伙企业进行业务活动,对内负责合伙企业的日常管理。 法人则是企业的法定代表人,代表企业参与民事活动,是企业的行政领导,对企业经济活动…

MAT查找类(岔路口)-技巧

文章目录 前言一、现状二、使用步骤1.导出 hprof2.用MAT打开3.细节操作找大对象的线程名称查看线程的详情查找类的GC Roots柳暗花明检验真理 总结 前言 又是java 内存溢出 OOM JAVA MAT 分析工具大大的好。 高效查找问题根源,才是硬道理。 一、现状 mat 打开hprof…

CVE-2017-7529 Nginx越界读取内存漏洞

漏洞概述 当使用Nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header请求,来获取响应中的缓存文件头部信息。在某些配置中,缓存文件头可能包含后端服务器的IP地址或其它敏感信息,从而导致信息泄露。 影响版本 Ngin…

vue3后台管理框架之技术栈

vue3全家桶技术 基础构建: vue3vite4TypeScript 代码格式 : eslintprettystylelint git生命周期钩子: husky css预处理器: sass ui库: element-plus 模拟数据: mock 网络请求: axios 路由: vue…

Three.js图案溶解shader

上图提供两种方式溶解显示 上面一排是根据现实的图案红色通道也就是r值进行溶解 下面一排提供额外的溶解纹理 可以通过简单更改呈现多种溶解图案 代码仓库 gitee b站账号:https://space.bilibili.com/374230437 interface IMapPath {map: string;dissolve?: string…

基于antd实现动态修改节点的Tree组件

前言 之前遇到一个需求,可对于任意节点添加或删除子节点。首先技术栈是基于reactant design,ant提供了Tree组件,但都是根据固定的数据渲染出树结构,如果需要新增或删除节点,官网并未提供。 实现过程 新增节点 首先…

910数据结构(2013年真题)

算法设计题 问题1 已知元素数据类型为整数的顺序表SL(a1,a2,…,am,b1,b2,…,bn),试设计算法将SL中元素的两部分互换为(b1,b2,…,bn,a1,a2,…,am)。要求:不能使用额外的数组空间。 (1&#xff…

使用 Python 和蒙特卡罗计算未来股价走势以及历史波动率和隐含波动率

一、简介 预测金融市场是定量精度和全球经济细微差别的复杂融合。在这一探索中,蒙特卡罗模拟脱颖而出,成为首要的统计工具,指导我们对未来股票价格的理解。 这种方法以摩纳哥著名的蒙特卡洛赌场命名,并不依靠运气,而是植根于严格的概率模型。想象一下在受控环境中精心策划…

前端开发工具有哪些?17款前端工程师必备工具推荐!

软件开发是一个高度专业化的职业分工,根据所使用的编程语言的不同,会细分出多种岗位:前端开发、后端开发、客户端开发、iOS开发、Android开发、数据库开发等等,具体到每一个岗位,工作中常用的工具软件也存在着差别。 …

0基础学习VR全景平台篇 第108篇:全景图细节处理(下,航拍)

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! (调色前图库) (原图-大图) 一、导入文件 单击右下角导入按钮,选择航拍图片所在文件夹,选择图片&#xff0…

【前端】Js

目 录 一.前置知识第一个程序JavaScript 的书写形式注释输入输出 二.语法概览变量的使用理解 动态类型基本数据类型 三.运算符算术运算符赋值运算符 & 复合赋值运算符自增自减运算符比较运算符逻辑运算符位运算移位运算 四.条件语句if 语句三元表达式switch 五.循环语句whi…

基于php 进行每半小时钉钉预警

前言 业务场景:监控当前业务当出现并发情况时技术人员可以可以及时处理 使用技术栈: laravelredis 半小时触发一次报警信息实现思路 1、xshell脚本 具体参数就不详细解释了,想要详细了解可以自行百度 curl -H "Content-Type:appl…

论文阅读/写作扫盲

第一节:期刊科普 JCR分区和中科院分区是用于对期刊进行分类和评估的两种常见方法。它们的存在是为了帮助学术界和研究人员更好地了解期刊的学术质量、影响力和地位。 JCR分区(Journal Citation Reports):JCR分区是由Clarivate Ana…