k8s之Pod控制器
目录
- 一、Pod控制器及其功用
- 二、pod控制器的多种类型
- 2.1 pod容器中的有状态和无状态的区别
- 三、Deployment 控制器
- 四、SatefulSet 控制器
- 4.1 StatefulSet由以下几个部分组成
- 4.2 为什么要有headless?
- 4.3 为什么要有volumeClaimTemplate?
- 4.4 滚动更新
- 4.5 扩容及缩容
- 4.6 小结
- 五、DaemonSet 控制器
- 六、Job 控制器
- 七、CronJob 控制器
- 八、总结
- 8.1 Deployment
- 8.2 StatefulSet
- 8.3 DaemonSet
- 8.4 Job
- 8.5 CronJob
一、Pod控制器及其功用
Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。
二、pod控制器的多种类型
1、ReplicaSet: 代用户创建指定数量的pod副本,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。
ReplicaSet主要三个组件组成:
(1)用户期望的pod副本数量
(2)标签选择器,判断哪个pod归自己管理
(3)当现存的pod数量不足,会根据pod资源模板进行新建
帮助用户管理无状态的pod资源,精确反应用户定义的目标数量,但是RelicaSet不是直接使用的控制器,而是使用Deployment。
2、Deployment:工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。
ReplicaSet 与Deployment 这两个资源对象逐步替换之前RC的作用。
3、DaemonSet:用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务
特性:服务是无状态的
服务必须是守护进程
4、StatefulSet:管理有状态应用
5、Job:只要完成就立即退出,不需要重启或重建
6、Cronjob:周期性任务控制,不需要持续后台运行
2.1 pod容器中的有状态和无状态的区别
- 有状态实例
实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper
实例之间不对等的关系,以及依靠外部存储的应用 - 无状态实例
deployment认为所有的pod都是一样的
不用考虑顺序的要求
不用考虑在哪个node节点上运行
可以随意扩容和缩容
三、Deployment 控制器
部署无状态应用
管理Pod和ReplicaSet
具有上线部署、副本设定、滚动升级、回滚等功能
提供声明式更新,例如只更新一个新的image
应用场景:web服务
vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.15.4ports:- containerPort: 80kubectl create -f nginx-deployment.yamlkubectl get pods,deploy,rs
四、SatefulSet 控制器
StatefulSet 是用来管理有状态应用的工作负载 API 对象。
StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符。
和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同的是, StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。这些 Pod 是基于相同的规约来创建的, 但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。
如果希望使用存储卷为工作负载提供持久存储,可以使用 StatefulSet 作为解决方案的一部分。 尽管 StatefulSet 中的单个 Pod 仍可能出现故障, 但持久的 Pod 标识符使得将现有卷与替换已失败 Pod 的新 Pod 相匹配变得更加容易。
StatefulSet 对于需要满足以下一个或多个需求的应用程序很有价值:
- 稳定的、唯一的网络标识符。
- 稳定的、持久的存储。
- 有序的、优雅的部署和扩缩。
- 有序的、自动的滚动更新。
在上面描述中,“稳定的”意味着 Pod 调度或重调度的整个过程是有持久性的。 如果应用程序不需要任何稳定的标识符或有序的部署、删除或扩缩, 则应该使用由一组无状态的副本控制器提供的工作负载来部署应用程序,比如 Deployment 或者 ReplicaSet可能更适用于你的无状态应用部署需要。
//名为 svc-demo 的 Headless Service 用来控制网络域名
kubectl create svc clusterip svc-demo --tcp=80:80 --dry-run=client -oyaml > svc-demo.yaml
vim svc-demo.yamlapiVersion: v1
kind: Service
metadata:creationTimestamp: nulllabels:app: svc-demoname: svc-demo
spec:ports:- name: httpport: 80protocol: TCPtargetPort: 80selector:app: sts-demo //拥有此标签的pod 都有此servicetype: ClusterIPclusterIP: None //无头服务的clusterIp为None
//名为 myapp-demo 的 StatefulSet 有一个 Spec,它表明将在独立的4个 Pod 副本中启动容器
vim stateful-demo.yaml apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: myapp-demoname: myapp-demo
spec:serviceName: svc-demoreplicas: 4selector:matchLabels:app: sts-demotemplate:metadata:labels:app: sts-demospec:containers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80volumeClaimTemplates:- metadata:name: pvc-demospec:accessModes:- ReadWriteOnceresources:requests:storage: 2GistorageClassName: nfs-client-storageclass
4.1 StatefulSet由以下几个部分组成
●Headless Service(无头服务):用于为Pod资源标识符生成可解析的DNS记录。
●volumeClaimTemplates(存储卷申请模板):基于静态或动态PV供给方式为Pod资源提供专有的固定存储。
●StatefulSet:用于管控Pod资源。
4.2 为什么要有headless?
在deployment中,每一个pod是没有名称,是随机字符串,是无序的。而statefulset中是要求有序的,每一个pod的名称必须是固定的。当节点挂了,重建之后的标识符是不变的,每一个节点的节点名称是不能改变的。pod名称是作为pod识别的唯一标识符,必须保证其标识符的稳定并且唯一。
为了实现标识符的稳定,这时候就需要一个headless service 解析直达到pod,还需要给pod配置一个唯一的名称。
4.3 为什么要有volumeClaimTemplate?
大部分有状态副本集都会用到持久存储,比如分布式系统来说,由于数据是不一样的,每个节点都需要自己专用的存储节点。而在 deployment中pod模板中创建的存储卷是一个共享的存储卷,多个pod使用同一个存储卷,而statefulset定义中的每一个pod都不能使用同一个存储卷,由此基于pod模板创建pod是不适应的,这就需要引入volumeClaimTemplate,当在使用statefulset创建pod时,会自动生成一个PVC,从而请求绑定一个PV,从而有自己专用的存储卷。
服务发现:就是应用服务之间相互定位的过程。
应用场景:
●动态性强:Pod会飘到别的node节点
●更新发布频繁:互联网思维小步快跑,先实现再优化,老板永远是先上线再慢慢优化,先把idea变成产品挣到钱然后再慢慢一点一点优化
●支持自动伸缩:一来大促,肯定是要扩容多个副本
K8S里服务发现的方式—DNS,使K8S集群能够自动关联Service资源的“名称”和“CLUSTER-IP”,从而达到服务被集群自动发现的目的。
kubectl get pods -A
kubectl delete pods coredns-54d67798b7-rl5wc -n kube-system
kubectl delete pods coredns-54d67798b7-qbvr5 -n kube-system
kubectl delete statefulsets.apps myapp-demo
vim stateful.yaml apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: myapp-demoname: myapp-demo
spec:serviceName: svc-demoreplicas: 4selector:matchLabels:app: sts-demotemplate:metadata:labels:app: sts-demospec:containers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80volumeMounts:- name: pvc-demomountPath: /datavolumeClaimTemplates:- metadata:name: pvc-demospec:accessModes:- ReadWriteOnceresources:requests:storage: 2GistorageClassName: nfs-client-storageclass
解析上例:由于 StatefulSet 资源依赖于一个实现存在的 Headless 类型的 Service 资源,所以需要先定义一个名为 svc-demo 的 Headless Service 资源,用于为关联到每个 Pod 资源创建 DNS 资源记录。接着定义了一个名为 myapp 的 StatefulSet 资源,它通过 Pod 模板创建了 4 个 Pod 资源副本,并基于 volumeClaimTemplates 向前面创建的PV进行了请求大小为 2Gi 的专用存储卷。
4.4 滚动更新
StatefulSet 控制器将在 StatefulSet 中删除并重新创建每个 Pod。它将以与 Pod 终止相同的顺序进行(从最大的序数到最小的序数),每次更新一个 Pod。在更新其前身之前,它将等待正在更新的 Pod 状态变成正在运行并就绪。
kubectl edit statefulsets.apps myapp-demo kubectl get pods -w //查看滚动更新的过程
4.5 扩容及缩容
kubectl scale statefulset myapp-demo --replicas=6
kubectl scale statefulset myapp-demo --replicas=3
扩展伸缩
kubectl scale sts myapp --replicas=4 //扩容副本增加到4个kubectl get pods -w //动态查看扩容kubectl get pv //查看pv绑定kubectl patch sts myapp -p '{"spec":{"replicas":2}}' //打补丁方式缩容kubectl get pods -w //动态查看缩容
当删除一个 StatefulSet 时,该 StatefulSet 不提供任何终止 Pod 的保证。为了实现 StatefulSet 中的 Pod 可以有序且体面地终止,可以在删除之前将 StatefulSet 缩容到 0。
示例:
kubectl scale statefulset myappdata-myapp --replicas=0
kubectl delete -f stateful-demo.yaml
4.6 小结
常规service和无头服务区别
service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
Headless service:无头服务,不需要cluster-IP,而是直接以DNS记录的方式解析出被代理Pod的IP地址。
注意:使用普通的 service 也可以解析出被代理Pod的IP地址
五、DaemonSet 控制器
DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
使用 DaemonSet 的一些典型用法:
●运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph。
●在每个 Node 上运行日志收集 daemon,例如fluentd、logstash。
●在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond。
应用场景:Agent
官方案例(监控):https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
示例:
vim daemon-demo.yamlapiVersion: apps/v1
kind: DaemonSet
metadata:labels:app: myapp-dsname: myapp-ds
spec:selector:matchLabels:app: myapp-dstemplate:metadata:labels:app: myapp-dsspec:containers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80tolerations:- key: node-role.kubernetes.io/masteroperator: Existseffect: NoSchedule
六、Job 控制器
Job分为普通任务(Job)和定时任务(CronJob)
常用于运行那些仅需要执行一次的任务
应用场景:数据库迁移、批处理脚本、kube-bench扫描、离线数据处理,视频解码等业务
https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
vim job-demo.yamlapiVersion: batch/v1
kind: Job
metadata:name: myapp-job
spec:template:spec:containers:- name: myappimage: soscscs/myapp:v1command: ["/bin/sh","-c","echo zhangsan like singing ; sleep 10; date; exit 0"]restartPolicy: NeverbackoffLimit: 4
kubectl describe pods myapp-job-gnk6c
kubectl logs myapp-job-gnk6c
注意:job的重启策略要么 Never
, 要么 OnFailure
,绝对不能为 Always
七、CronJob 控制器
周期性任务,像Linux的Crontab一样。
周期性任务
应用场景:通知,备份
https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
cronjob其它可用参数的配置
spec:
concurrencyPolicy: Allow #声明了 CronJob 创建的任务执行时发生重叠如何处理(并发性规则仅适用于相同 CronJob 创建的任务)。spec仅能声明下列规则中的一种:
●Allow (默认):CronJob 允许并发任务执行。
●Forbid:CronJob 不允许并发任务执行;如果新任务的执行时间到了而老任务没有执行完,CronJob 会忽略新任务的执行。
●Replace:如果新任务的执行时间到了而老任务没有执行完,CronJob 会用新任务替换当前正在运行的任务。
startingDeadlineSeconds: 15 #它表示任务如果由于某种原因错过了调度时间,开始该任务的截止时间的秒数。过了截止时间,CronJob 就不会开始任务,且标记失败.如果此字段未设置,那任务就没有最后期限。
successfulJobsHistoryLimit: 3 #要保留的成功完成的任务数(默认为3)
failedJobsHistoryLimit:1 #要保留多少已完成和失败的任务数(默认为1)
suspend:true #如果设置为 true ,后续发生的执行都会被挂起。 这个设置对已经开始的执行不起作用。默认是 false。
schedule: '*/1 * * * *'
#必需字段,作业时间表。在此示例中,作业将每分钟运行一次
jobTemplate: #必需字段,作业模板。这类似于工作示例
vim cronjob-demo.yamlapiVersion: batch/v1beta1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busyboximagePullPolicy: IfNotPresentargs:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure
八、总结
8.1 Deployment
1)部署无状态应用
2)创建和管理 ReplicaSet 和 Pod 资源,并维护Pod副本数量与期望值相同
3)创建和删除Pod是并行执行的,升级策略默认为滚动更新的方式
8.2 StatefulSet
1)部署有状态应用
2)每个Pod的名称都是唯一且固定不变的
3)每个Pod都可以有自己专属的持久化存储(基于PVC模板volumeClaimTemplates绑定PV实现的)
4)需要提前创建并关联一个Headless Service资源(ClusterIP可以为None),在K8S集群内部的Pod应用可以通过 <pod_name>.<svc_name>.<namespace_name>.svc.cluster.local 格式解析出 PodIP(基于无头服务Headless Service和CoreDNS实现的)
5)创建、滚动升级、扩容、缩容Pod都是有序进行的(默认为串行执行的,podManagementPolicy: OrderedReady(默认)|Parallel)
创建、扩容是升序执行的(顺序为Pod标识号从0到n-1)
滚动升级、缩容是倒序执行的(顺序为Pod标识号从n-1到0)
Service资源的类型 4+1
ClusterIP NodePort LoadBalancer ExternalName + Headless Service
8.3 DaemonSet
1)理论上可以在K8S所有Node节点上创建相同的Pod资源(无论Node节点什么时候加入到K8S集群)
2)调度时会受到Node节点上的污点或者节点设置了cordon不可调度的影响,而不会在上述的Node节点中创建Pod
设置容忍 kubectl node xxx uncordon
3)资源清单配置中不需要设置副本数 replicas
8.4 Job
1)部署一次性短期任务的资源,Pod不会持久运行
2)任务正常完成后Pod容器会正常退出并不会再重启(restartPolicy通常设置为Nerver或OnFailure),且也不会重建Pod
3)如果任务执行异常导致Pod容器异常退出,会重建Pod重试任务,重试次数受 backoffLimit 配置影响(默认为任务失败后重试 6 次)
8.5 CronJob
1)部署周期性短期任务的资源,Pod不会持久运行
2)任务正常完成后Pod容器会正常退出并不会再重启(restartPolicy通常设置为Nerver或OnFailure),且也不会重建Pod
3)使用必配字段 schedule 设置任务执行的周期表,格式为 分 时 日 月 周
相关文章:
![](https://img-blog.csdnimg.cn/d2e3349bfef640ce95940cbaab8995de.png)
k8s之Pod控制器
目录 一、Pod控制器及其功用二、pod控制器的多种类型2.1 pod容器中的有状态和无状态的区别 三、Deployment 控制器四、SatefulSet 控制器4.1 StatefulSet由以下几个部分组成4.2 为什么要有headless?4.3 为什么要有volumeClaimTemplate?4.4 滚动更新4.5 扩…...
![](https://www.ngui.cc/images/no-images.jpg)
逆元(求乘法逆元的几种方法)
目录 逆元 加法逆元 乘法逆元 如何求 快速幂 扩展欧几里得 O(n)求1到n的乘法逆元 逆元 数学中,逆元素(英语:Inverse element)推广了加法中的加法逆元和乘法中的倒数。直观地说,它是一个可以取消另一给定元素运…...
![](https://www.ngui.cc/images/no-images.jpg)
没点本事,还真做不好数字化转型
数字化转型逐渐成为企业业务增长的利器 然而,在此过程中 企业最应该注重哪些? 效率?质量? 但还有一个至关重要的点不容忽视 那就是安全 有一家硬核企业通过技术与狠活 硬生生提升了应用安全性 保障了产业与数字化的安全融合…...
![](https://img-blog.csdnimg.cn/99e9cf1071fa4b3cb76b2887db2d4e8a.png)
windows 10 远程桌面配置
1. 修改远程桌面端口(3389) 打开注册表(winr), 输入regedit 找到配置项【计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\Wds\rdpwd\Tds\tcp】 , 可以通过搜索“Wds”快速定位。 修改端口配…...
![](https://www.ngui.cc/images/no-images.jpg)
OpenStreetMap 上基于A*搜索算法的C ++路线规划项目
引言 在现代的地理信息系统(GIS)中,路线规划是一个重要的组成部分。它涉及到从一个地点到另一个地点的最优路径的确定。在这篇文章中,我们将探讨如何在OpenStreetMap数据上实现一个基于A*搜索算法的C路线规划项目。 OpenStreetM…...
![](https://img-blog.csdnimg.cn/ab659292ccc649eea670327cae9e2613.png)
java实现随机生成验证码
import java.util.concurrent.ThreadLocalRandom;/* 生成验证码的工具 可动态配置验证码长度*/ public class CodeUtils {public static void main(String[] args) {//随机生成5个长度为4的验证码for (int i 0; i < 5; i) {System.out.println(CodeUtils.getCode(4));}for …...
Positive证书是什么?
Positive SSL是全球著名CA Sectigo的子品牌, 也是目前全球签发量最高的商业SSL证书。价格低,安全性高,在个人网站和中小型企业网站中拥有极高的占有率。 Positive SSL证书包括DV SSL, EV SSL,也是唯一支持IP地址加密的…...
![](https://img-blog.csdnimg.cn/1ccc520fcf104736a5fe95a16ed374d0.png)
vulnhub靶场-y0usef笔记
vulnhub靶场-y0usef笔记 信息收集 首先fscan找到目标机器ip http://192.168.167.70/ nmap扫描端口 Host is up (0.00029s latency). Not shown: 998 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ub…...
华为智选首款纯电轿跑“LUXEED”能大卖吗?
监制 | 何玺 排版 | 叶媛 华为智选纯电轿跑来袭! 8月7日,华为常务董事余承东在社交媒体上发文,宣布华为智选即将推出首款“突破想象”的纯电轿跑车。 01 华为智选首款纯电轿跑来袭 余承东的发文引起了极大关注,在各大媒体的报…...
![](https://www.ngui.cc/images/no-images.jpg)
ArcGIS API for JavaScript 3.44 地图Demo示例合集
ArcGIS API for JavaScript 3.44 demo合集 (一)创建地图(二)基准图库(三)编辑书签(四)主页按钮(五)LayerList小部件(六)测量小工具&am…...
![](https://img-blog.csdnimg.cn/5f6e597a6a32411abe7a54949db833b6.png)
RFID工业识别技术:供应链智能化的科技颠覆
RFID工业识别技术,作为物联网的先锋,正在供应链管理领域展现着前所未有的科技颠覆。从物料追踪到库存管理,再到物流配送,RFID技术以其高效的数据采集和智能的自动化处理,彻底改变着传统供应链的运营方式。 RFID在物料追…...
![](https://www.ngui.cc/images/no-images.jpg)
行列转换两例的思考
1、多行转成一列 (1)、建测试表及插入测试数据 create table t(i int,a varchar2(1)); insert into t(i,a) select 1,a from dual union all select 1,b from dual union all select 1,d from dual union all select 1,e from dual union all select 2,z from dual union all…...
![](https://img-blog.csdnimg.cn/be4e314140504db683640a63ff064e6d.png)
高德地图 SDK 接口测试接入(AndroidTest 上手)
学习资料 官方文档 在 Android 平台上测试应用 | Android 开发者 | Android Developers 测试了解 【玩转Test】开篇-Android test 介绍 Android单元测试全解_android 单元测试_一代小强的博客-CSDN博客 Android单元测试-对Activity的测试_activitytestrule_许佳佳233的博客…...
![](https://img-blog.csdnimg.cn/ba4ef783187e4420ae408433df1064df.png)
省电模式稳定电压显示IC32×4 LCD显示驱动芯片
简述 VK1C21A是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM) 的LCD屏,也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发 送显示数据,也可通过指令进入省电模式。具备高抗干扰&a…...
![](https://www.ngui.cc/images/no-images.jpg)
分布式架构的观测
分布式架构的观测 日志日志的输出收集与缓冲加工与聚合存储与查询 追踪数据收集 度量 在一个分布式应用中,如果出现了某个异常,那我们必然不可能只依靠 awk、grep 等命令来查看日志分析问题,往往分布式架构的一个异常都贯通多个节点ÿ…...
![](https://img-blog.csdnimg.cn/f410c8f6f9be4bc092a73a975913583c.png)
交替方向乘子
目录 一,交替方向乘子ADMM 1,带线性约束的分离优化模型 2,常见优化模型转带线性约束的分离优化模型 3,带线性约束的分离优化模型求解 4,交替方向乘子ADMM 本文部分内容来自教材 一,交替方向乘子ADMM …...
![](https://img-blog.csdnimg.cn/b5602683ba934aca87d769fee67bcfb7.png)
9-数据结构-栈(C语言版)
数据结构-栈(C语言版) 目录 数据结构-栈(C语言版) 1.栈的基础知识 1.入栈,出栈的排列组合 情景二:Catalan函数(计算不同出栈的总数) 2.栈的基本操作 1.顺序存储 (1)顺序栈-定义…...
![](https://img-blog.csdnimg.cn/b9f2aee6895b48e5aad9e39dbe0b9e69.png)
C#,数值计算——用于从连续的数据值流估计任意分位数的计算方法与源程序
1 分位数Quantile 分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。 2 常见各类分位数 2.1 二分位…...
![](https://wiki.finogeeks.club/download/attachments/227952637/image-2023-8-1_10-53-30.png?version=1&modificationDate=1690858413359&api=v2)
实践分享:小程序事件系统设计
微信小程序官方文档中解释说:事件是用于子组件向父组件传递数据,可以传递任意数据。 小程序开发中的事件是指视图层到逻辑层的通讯方式,主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件&#…...
![](https://www.learnfk.com/guide/images/wuya.png)
无涯教程-Perl - bless函数
描述 此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当前包中的对象。建议使用bless的两个参数形式。 语法 以下是此函数的简单语法- bless REF, CLASSNAMEbless REF返回值 该函数返回对祝福到CLASSNAME中的对象的引用。 例 以下是显示其…...
![](https://www.ngui.cc/images/no-images.jpg)
Java关键字:final解析
目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常࿰…...
![](https://img-blog.csdnimg.cn/08e5d41446f843e780d65131d5146327.png)
LeetCode--HOT100题(25)
目录 题目描述:141. 环形链表(简单)题目接口解题思路代码 PS: 题目描述:141. 环形链表(简单) 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连…...
![](https://www.ngui.cc/images/no-images.jpg)
外卖项目,登录设计,nginx反向代理,MD5明文加密
.gitignore文件里的东西是进行排除,不用git进行管理。登录设计, controller 接收并封装参数调用service方法查询数据库封装结果并响应 登录成功后,生成jwt令牌 Service层 调用mapper查询数据库密码比对返回结果Mapper 编写sql语句为什么前端不…...
![](https://img-blog.csdnimg.cn/ab67767e520044a1b6525ff3951da2e4.png)
【云原生】kubernetes在Pod中init容器的作用和使用
目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器,在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像…...
![](https://www.ngui.cc/images/no-images.jpg)
springboot+vue分页
java项目 导包 <!--springboot整合pagehelper--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.1</version></dependency>前端 vue项目…...
![](https://img-blog.csdnimg.cn/1475dff22b664b348e45d16535e72c1b.png)
【linux】ssh 和adb connect区别
问:ssh 与ping的区别 答:SSH(Secure Shell)和Ping是两种完全不同的网络工具。 SSH是一种加密的网络协议,用于安全地远程管理或访问远程计算机。它提供了一种安全的通信方式,可以在不安全的网络上进行远程登…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.5/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N6B9)
iPhone手机怎么恢复出厂设置(详解)
如果您的iPhone遇到了手机卡顿、软件崩溃、内存不足或者忘记手机解锁密码等问题,恢复出厂设置似乎是万能的解决方法。 什么是恢复出厂设置?简单来说,就是让手机重新变成一张白纸,将手机所有数据都进行格式化,只保留原…...
![](https://img-blog.csdnimg.cn/img_convert/69d0ed35c8b674382fd57c78e39b89cb.png)
灵活利用ChatAI,减轻工作任务—语言/翻译篇
前言 ChatAI在语言和翻译方面具有重要作用。它能够帮助用户进行多语言交流、纠正错误、学习新语言、了解不同文化背景,并提供文本翻译与校对等功能。通过与ChatAI互动,我们能够更好地利用技术来拓展自己在语言领域的能力和知识,实现更加无障…...
![](https://img-blog.csdnimg.cn/c807d2eb64e244b29b1c43583a683d11.png)
【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
![](https://www.ngui.cc/images/no-images.jpg)
python 定时器,如何进行周期性的函数运行、状态检查,百分比计算?
文章大纲 schedulescheschedule线程实现1实现2实现3协程(coroutine)参考文献schedule https://stackoverflow.com/questions/373335/how-do-i-get-a-cron-like-scheduler-in-python https://docs.python.org/3/library/sched.html sche schedule import schedule import ti…...
![](/images/no-images.jpg)
营销型网站和展示型网站的区别/百度站长工具seo综合查询
对于C语言的指针类型,有点乱,测试了一下。 了解到: 1.声明赋值与非声明赋值 2. * 与 ** 的区别与意义 3. 一些 & 和 * 的利用方法 如 int * b<value>,在这里b是int型指针, 声明时候需要加 * ,但是声明时赋值…...
![](http://hiphotos.baidu.com/wwwlong456cn/pic/item/90a1b0a4205579ce9152eef8.jpg)
广州专业网站建设报价/怎么做网络广告
1、一个基类的引用类型变量可以“指向”其子类的对象; 2、一个基类的引用不可以访问其子类对象新增加的成员(属性和方法); 3、可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类&#x…...
![](/images/no-images.jpg)
bontop外贸建站公司怎么样/全国互联网营销大赛官网
精品文档精品文档腿膇葿膆莁薀莅艿蚄薈荿蚃薃PAGEPAGE13精品文档PAGE备份一体机测试方案WORD格式.可编写目录目录2第一章:测试环境配置31.1测试环境组网图31.2硬件与软件配置.3第二章测试方法42.1测试策略.42.2结果描绘.42.3用例列表.5第三章测试步骤以及评测记录.5…...
![](https://img-blog.csdnimg.cn/img_convert/a25ff08b3c58b77608b0d6aa0a3a0e1a.png)
单页的网站怎么做/商品标题优化
现在用到最多的Win10系统是Win10专业版,用户重装Win10专业版系统的目的就是为了解决电脑遇到的问题,然而重装系统后还是会出现许许多多的问题,比如说部分软件打不开了,闪退的问题。如果您也遇到了相同的问题,下面就是小…...
![](/images/no-images.jpg)
游戏网站开发目的/潍坊在线制作网站
/************************************************************************ busybox reboot 无效* 说明:* 最近调传感器,使用的ssh连接设备,调完程序发现reboot命令无效,后来* 经过使用uart口看启动过程…...
![](/images/no-images.jpg)
深圳有没有可以做家教的网站/百度推广登录网站
“IBI Hack”是一项为期一个月的黑客马拉松,将于7月1日开始,由伊利诺伊州区块链技术协议组织以及区块链技术初创公司Fulcrum举办。区块链马拉松向全球的学生和大学毕业生开放。所有参赛作品截止于7月31日。 “IBI Hack”是伊利诺伊州区块链倡议活动的一部…...