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.mzph.cn/news/107716.shtml

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

相关文章

时间复杂度为 O(n^2) 的排序算法

大家好,我是 方圆。对于小规模数据,我们可以选用时间复杂度为 O(n2) 的排序算法,因为时间复杂度并不代表实际代码的执行时间,而且它也省去了低阶、系数和常数,仅代表的增长趋势,所以在小规模数据情况下&…

python:使用卷积神经网络(CNN)进行回归预测

作者:CSDN @ _养乐多_ 本文详细记录了从Excel或者csv中读取用于训练卷积神经网络(CNN)模型的数据,包括多个自变量和1个因变量数据,以供卷积神经网络模型的训练。随后,我们将测试数据集应用于该CNN模型,进行回归预测和分析。 该代码进一步修改可用于遥感影像回归模型. …

【广州华锐互动】人体血管器官3D动态展示为医学生提供哪些便利?

人体血管器官3D动态展示是一种采用先进的计算机图形技术和立体成像技术,对人体内部结构和功能进行三维可视化的教学方法。这种教学方式以其独特的优势,正在改变传统的解剖学教学模式,为医学教育带来了革新。 首先,3D动态演示能够提…

基于nodejs+vue网课学习平台

各功能简要描述如下: 1个人信息管理:包括对学生用户、老师和管理员的信息进行录入、修改,以及老师信息的审核等 2在库课程查询:用于学生用户查询相关课程的功能 3在库老师查询:用于学生用户查询相关老师教学的所有课程的功能。 4在库学校查询:用于学生用户查询相关学…

解密JavaScript的异步机制:打破单线程限制,提升性能与用户体验

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、JavaScript的异步编步机制 二、事件循环…

剑指offer(C++)-JZ50:第一个只出现一次的字符(算法-其他)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分…

SpringBoot面试题7:SpringBoot支持什么前端模板?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SpringBoot支持什么前端模板? Spring Boot支持多种前端模板,其中包括以下几种常用的: Thymeleaf:Thymeleaf是一种服务器端Java模板引擎,能够…

SSM - Springboot - MyBatis-Plus 全栈体系(三十)

第七章 MyBatis-Plus MyBatis-Plus 高级用法:最优化持久层开发 一、MyBatis-Plus 快速入门 1. 简介 版本:3.5.3.1MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBa…

上海亚商投顾:沪指震荡调整跌 减肥药、华为概念股持续活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 沪指上个交易日低开后震荡调整,深成指、创业板指盘中跌超1%,宁德时代一度跌超3%&#xff…

面向红队的自动化引擎工具

gogo 介绍 面向红队的、高度可控的可拓展的自动化引擎。特征如下: 自由的端口配置 支持主动/主动指纹识别 关键信息提取,如标题、证书以及自定义提取信息的正则 支持nuclei poc,poc目录:https://chainreactors.github.io/wiki/…

阿里云云服务器实例使用教学

目录 云服务器免费试用 详细步骤 Xshell 远程连接 云服务器免费试用 阿里云云服务器网址:阿里云免费试用 - 阿里云 详细步骤 访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)…

【网络安全 --- win10系统安装】win10 系统详细安装过程(提供资源)

一,资源下载 百度网盘镜像下载地址链接: 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.ba…

(ubuntu) 安装JDK

文章目录 前言参看java版本的命令:安装jdk命令安装jps关闭防火墙:查看端口占用:(坑)ubuntu上Mysql默认标明 区分大小写 前言 提示:常以为人是一个容器,盛着快乐,盛着悲哀。但是人不…

使用 Tkinter Canvas 小部件添加放大镜功能?

一、说明 据我所知,内置的 Tkinter Canvas 类比例不会自动缩放图像。如果您无法使用自定义小部件,则可以缩放原始图像并在调用缩放函数时将其替换在画布上。 二、实现图像放大镜技术细节 我如何将放大和缩小添加到以下脚本中,我想将其绑定到…

初阶数据结构-常见的排序算法

排序 排序的概念常见的排序算法常见排序算法的实现数组的打印 插入排序直接插入排序的实现希尔排序( 缩小增量排序 )希尔排序的实现 交换排序冒泡排序冒泡排序的实现选择排序选择排序的实现堆排序堆排序的实现快速排序快速排序非递归 归并排序归并排序的递归实现归并排序的非递…

多个子div在父中垂直居中

在一个div下&#xff0c;有多个子div&#xff0c;且子div都是水平垂直居中 <template><div><div class"far"><!-- 注意需要多包裹一层 --><div><div class"son1">1</div><div class"son2">222…

MATLAB-文件自动批量读取文件,并按文件名称或时间顺序进行数据处理

我在处理文件数据时&#xff0c;发现一个一个文件处理效率太低&#xff0c;因此学习了下MATLAB中自动读取特定路径下文件信息的程序&#xff0c;并根据读取信息使用循环进行数据处理&#xff0c;提高效率&#xff0c;在此分享给大家这段代码并给予一些说明&#xff0c;希望能为…

Open3D 进阶(13)使用PCA将点云投影到主成分空间

目录 一、算法原理<font color="#dd00dd">1、三维点云投影二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 1、三维点云投影 p r o j

IDEA初始配置

1. 详细设置 安装完IDEA之后的简单配置。 1.1 如何打开详细配置界面 1、显示工具栏 2、选择详细配置菜单或按钮 1.2 系统设置 1、默认启动项目配置 启动IDEA时&#xff0c;默认自动打开上次开发的项目&#xff1f;还是自己选择&#xff1f; 如果去掉Reopen projects on …

《动手学深度学习 Pytorch版》 8.6 循环神经网络的简洁实现

import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, num_steps 32, 35 train_iter, vocab d2l.load_data_time_machine(batch_size, num_steps)8.6.1 定义模型 num_hiddens 256 rnn_layer nn.RNN(len(voca…