k8s---pod控制器

pod控制器发的概念:

工作负载,workload用于管理pod的中间层,确保pod资源符合预期的状态。

预期状态:

1、副本数

2、容器重启策略

3、镜像拉取策略

pod出故障的出去等等

pod控制器的类型:

1、replicaset:指定pod副本的数量

三个组件:

                1、pod的副本

                2、标签选择器,判断哪个pod归自己管理

                3、扩缩容

2、Deployment控制器,他是挂载在replicaset之上。管理无状态应用。目前最好的控制器,支持滚动更新和回滚。提供声明式配置。

3、statefulSet:控制器的一种,管理有状态的应用,也可以设置副本数,可以扩缩容。pod的序号是固定的。重启之后,pod的名称也不会发生变化。有状态。

4、DaemonSet:可以在所有节点部署一个pod,他没有副本数。可以限制部署的节点。也是无状态的应用。服务必须是一个守护进程。ingress logstashflannel

5、job:工作pod控制器,执行完成即可退出,不要重启,不需要重建

6、cronjob:周期性的定时任务控制器,不需要再后台持续运行。

pod和控制器的关系:

1、controllers:管理控制器。

pod通过label-----------》selector进行关联。

1、Deployment控制器

strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25%

这是Deployment的默认更新策略

rollingUpdate:滚动更新

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx
spec:replicas: 1selector:matchLabels:app: nginx1strategy:type: Recreate
#每次有更新,都会把旧的pod全部停止,然后再启动新的实例。服务可能会短暂的终端。无特殊需要可不加template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22name: nginx

maxSurge: 25%:升级过程中,新启动的pod数量不能超过期望pod数的25%

maxUnavailable: 25%:在升级过程中,新的pod启动好之后,销毁的旧的pod数量不能超过期望pod的25%。

2、statefulSet 有状态应用

无状态应用,pod名称是无序的,任务所有pod的都是一体的。共享存储 NFS,所有deployment下的pod共享一个存储。

statefulSet:有状态的应用。pod名称是有序的,所有pod都是独立的。存储卷也是独立的

顺序:0-n,delete删除也不会改变pod的序号,扩缩容也是有序的。

apiVersion: v1
kind: Service
metadata:name: nginx-weblabels:app: nginx2
spec:ports:- port: 80targetPort: 80clusterIP: ""selector:app: nginx2
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: weblabels:app: nginx2
spec:replicas: 2selector:matchLabels:app: nginx2serviceName: "nginx-web"template:metadata:labels:app: nginx2spec:containers:- name: nginximage: nginx:1.22volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: htmlspec:accessModes: ["ReadWriteMany"]storageClassName: "nfs-client-storageclass"resources:requests:storage: 2Gi

headless service:无头服务,没有clusterIP,必须要有动态的pvc。

k8s集群当中一种特殊的服务类型。不分配ClusterIP给Service,不会负载均衡到后端的pod。

dns来提供服务的发现和访问。

由于ClusterIP的是空,k8s集群会给每个headless service中的pod创建一个dns记录。

格式:pod-name.headless-service-name.namespace.svc.cluster.local.

web-0 nginx-web defaults 本地地址(pod的IP当中)

通过Dns直接解析访问pod的IP地址

类似于在集群中给pod做了一个映射

为什么要用headless????

有序。独立个体。

deployment的pod是没有名称的,随机字符串,无序。他需要一个集中的clusterip来集中统一为pod提供网络

statefulset是有序的,pod的名称是固定的。重建之后pod的标识符也不变。pod的名称是唯一的标识符。

系统直接通过pod名称解析ip地址。IP地址会不会变???

答案:ip地址会变,类似于访问www.baidu.com 但访问的IP不是同一个。

为什么要有动态的pv???

只要是有状态的副本集群都会涉及持久化存储,每个pod是独立个体,每个pod都有自己专用的存储点。

statefulset在定义的时候就规定了每个pod是不能同一个存储卷。

不是固定节点的应用,不是固定节点的ip应用

更新发布比较频繁,名称不变。

支持自动伸缩,节点的资源不够,可以自动扩缩容。

3、daemonSet

daemonSet:确保每个节点上都运行一个副本,当有node加入集群,也会为他新增一个pod

当node节点从集群当中移除时,pod也会被回收。

daemonSet不需要指定调度策略,默认会在每个节点创建一个pod。除非污点

我们也可以通过指定的方式,只把deamonset部害在指定的节点。没有副本数选择,不需要设置

控制器类型的资源创建方式: 基于控制器创建的pod,delete只是相当于重启,要彻底删除pod,必须删除控制器。

千万不要delete

部署在所有节点

apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx-deamonlabels:app: nginx1
#提高代码可读性,别人读
spec:selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22name: nginx
#不定义副本数,DaemonSet在每一个node上部署一个。

指定节点部署

此处定义了node02节点标签 ingress=true

​
apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx2-deamonlabels:app: nginx2
#提高代码可读性,别人读
spec:selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginx2nodeSelector:ingress: "true"
#不定义副本数,DaemonSet在指定node上部署一个。
#除非污点,不部署

4、job

job:job分为两类:job普通任务 和 cronjob定时任务

job:执行只需要一次性的任务。

脚本需要执行,数据库迁移,视频解码等等业务。

对于k8s系统来说,既然定义了是job,你只需要执行一次,或者指定次数即可,不能一种允许。

第一个:必须指定容器的重启策略,onfailure never

第二个:执行失败的次数也是收限制的,,默认是6次

第三个:跟新yaml文件,先删除任务,再更新。不能动态更新。

坑:容器化部署过数据库没有??

可以,数据库是核心资产,不会容器化部署。你们公司是容器化部署吗?

前端你们会容器化部署吗??

nginx可以容器化部署。

apiVersion: batch/v1
kind: Job
metadata:name: centos-job
spec:template:spec:containers:- image: centos:7name: centoscommand: ["/bin/bash","-c","test -e /etc/passwd1"]restartPolicy: NeverbackoffLimit: 4
#允许任务失败的次数,4次后,restartPolicy的策略,来进行容器的重启或者不重启。

5、cronjob

周期性任务,定期执行,和linux的crontab的语法一模一样

分时日月周   * * * * * 

应用场景:定时备份 通知作用 定时检测(结合探针一起做)

定时任务yaml文件

apiVersion: batch/v1beta1
kind: CronJob
metadata:name: centos-cronjob
spec:schedule: "*/1 * * * *"concurrencyPolicy: Allow
#如果执行失败的任务的保留的个数 默认是1个startingDeadlineSeconds: 15
#pod启动之后必须在一定的时间内开始执行,如果超过15秒没有运行,任务将不会运行,任务也会标记失败successfulJobsHistoryLimit: 3
#保留成功的任务数,默认值就是3jobTemplate:spec:template:spec:containers:- image: centos:7name: centoscommand: ["/bin/bash","-c","date; echo lyw"]restartPolicy: Never

总结:

五个都是控制器创建的pod,都是依赖控制器

deployment:无状态应用,最好用的,也是用的最多的

statefulSet:有状态应用,有序的,独立的pod

daemonSet:无状态应用,不能定义副本数。每个节点都运行一个pod,可以指定节点

job:执行一次性的任t务,必须有重启策略,是默认失败次数6次,只有失败次数达到,重启会生效

cronjob: 定时任务。通知,备份或者探测

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

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

相关文章

使用mininet快速入门ONOS路由交换技术与原理

在SDN下路由交换与传统硬件集成方式的路由交换技术有许多相似之处。其中一个比较重要的点是传统交换机中ASIC (Application Specific Integrated Circuit,专用集成电路)决定了其数据平面所支持的功能,而在SDN中,实现了控制面与数据面的分离。…

Nginx详细介绍(并从技术层面深度剖析)

nginx介绍 1.nginx 介绍2.nginx的优势3.Nginx VS Apache3.1.内核、语言、诞生时间比较3.2.功能比较3.3.Nginx 相对 apache 的优点 4.Nginx为什么有这么多的优势?4.1.IO多路复用(I/O multiplexing【多并发】)4.2.nginx的驱动模型介绍4.3.nginx…

1 pytest入门

pytest入门 示例成功失败 1.1 资源获取官方文档安装 1.2 运行 Pytest测试搜索命名规则 1.3 运行单个测试用例1.4 使用命令行选项-h(--help)--collect-only-k-m-x--maxfailnum-s 与 --capturemethod-s 等价于 --captureno--capturesys--capturefd -l&…

基于信用卡交易欺诈非均衡数据的处理

目录 一、数据处理 二、不做处理建模 三、under_sampling建模 3.1under_sampling NearMiss 3.2under_sampling RandomUnderSampler 评价 四、 over_sampling建模 4.1over_sampling SMOTETomek 4.2over_sampling RandomOverSampler 评价 import numpy as np import pa…

Git项目分支管理规范

一、分支管理 创建项目时,会针对不同环境创建两个常设分支(也可以算主分支,永久不会删除) master:生产环境的稳定分支,生产环境基于该分支构建。仅用来发布新版本,除了从release测试分支或 hotfix-*Bug修复分支进行m…

基于D2-NET的图像配准(基于PYQT的可运行界面)

这是之前对D2-NET的一个封装。D2-NET在图像配准领域还是占有一席之地的。 我们在D2-NET的基础上进行了一些小小的改动,也增加了FLANNRANSAC的提纯策略,同时增加了PYQT的一个界面。 参考的代码:代码1 代码2 首先介绍一下这个界面&#x…

计算机网络课程设计-网络聊天程序的设计与实现

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 客户端 3.1.1 步骤 3.1.2 关键代码 3.2 服务器 3.2.1 步骤 3.2.2 关键代码 4 实验结果与分析 5 代码 5.1 客户端 5.2 服务器 前言 本实验为计算机网络课程设计内容,基本上所有代码都是根据指导书给的附…

RDMA编程实践-SEND-RECEICVE原语应用

RDMA编程实践 本文描述了RDMA编程过程中的SEND-RECEIVE双边原语的代码实现。包含多个版本,1、client向server发送消息,server回复client收到消息(ACK),然后两边断开连接。2、server端循环等待客户端建立连接,client发送一次消息后…

【Android】为什么在子线程中更新UI不会抛出异常

转载请注明来源:https://blog.csdn.net/devnn/article/details/135638486 前言 众所周知,Android App在子线程中是不允许更新UI的,否则会抛出异常: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the origin…

NumPy 中数组拼接、合并详解

1、np.append() 1.1、语法 将值添加到数组的末端,返回一个新的数组,而原数组不变。 numpy.append(arr, values, axisNone)参数描述arr : 类数组输入的数组values : 类数组向数组 arr 添加的元素,需要与 arr 维度相同axis : 整型添加操作的…

python对自动驾驶进行模拟

使用了 Pygame 库来创建一个简单的游戏环境,模拟了一辆自动驾驶汽车在道路上行驶。汽车的位置和速度通过键盘控制,可以左右移动和加速减速。道路的宽度和颜色可以根据需要进行调整。 import pygame import random # 游戏窗口大小 WINDOW_WIDTH 800 WINDOW_HEIG…

git 删除 submodule 子模块的步骤

实验有效,这里删除了两个 submodule。 1, 执行删除 submodule mkdir tmp1 && cd tmp1 && git clone --recursive ssh://gitaaa.bbb.ccc.git \ && cd ccc/ && git checkout -b abranch_01 \ && git submodule deinit -f…