js模版网站/seo域名如何优化
目录
引言
一、概述
(一)Metrics-Server简介
(二)Metrics-Server的工作原理
(三)HPA与Metrics-Server的作用
(四)HPA与Metrics-Server的关系
(五)HPA与Metrics-Server的重要性
二、部署metrics-server组件
(一)镜像获取
1.本地上传镜像包
2.GitHub下载
3.国内云下载
(二)安装metrics-server组件
1.获取yaml文件
2.修改文件内容
3.创建资源
4.验证是否安装成功
三、部署HPA
(一)创建deployment
(二)创建HPA资源
(三)进行压测
四、命名空间的资源限制
(一)创建命名空间
(二)对资源数量的限制
(三)对资源配额的限制
引言
在Kubernetes集群中,为了确保资源的有效利用和应用的高可用性,我们通常需要监控集群中各个Pod的资源使用情况,并根据这些信息进行相应的调整。Horizontal Pod Autoscaler (HPA) 就是这样一种机制,它可以根据Pod的资源使用情况自动调整Pod的副本数量。而Metrics-Server,作为Kubernetes的一个核心组件,为HPA提供了关键的度量数据支持。本文将详细解析Metrics-Server与HPA之间的关系、工作原理以及它们在实际应用中的重要性
一、概述
(一)Metrics-Server简介
Metrics-Server是Kubernetes的一个附加组件,用于收集集群中各个资源的度量数据,如CPU、内存等。这些数据通过Kubernetes API Server暴露给外部用户或组件,以供它们进行决策或分析。在Kubernetes 1.8版本之前,通常使用Heapster作为度量数据的收集者,但自1.8版本起,Heapster被废弃,Metrics-Server成为了推荐的替代方案
(二)Metrics-Server的工作原理
Metrics-Server的工作原理相对简单,它定期从Kubernetes集群中的各个节点上收集度量数据,并将这些数据聚合后存储在内存中。然后,当外部用户或组件(如HPA)需要查询这些度量数据时,Metrics-Server会通过Kubernetes API Server提供相应的API接口进行响应。由于Metrics-Server只存储最近一段时间的度量数据(默认为1分钟),因此它不会成为集群的存储瓶颈
cAdvisor: 用于收集、聚合和公开 Kubelet 中包含的容器指标的守护程序。
kubelet: 用于管理容器资源的节点代理。 可以使用 /metrics/resource 和 /stats kubelet API 端点访问资源指标。
节点层面资源指标: kubelet 提供的 API,用于发现和检索可通过 /metrics/resource 端点获得的每个节点的汇总统计信息。
metrics-server: 集群插件组件,用于收集和聚合从每个 kubelet 中提取的资源指标。 API 服务器提供 Metrics API 以供 HPA、VPA 和 kubectl top 命令使用。Metrics Server 是 Metrics API 的参考实现。
(三)HPA与Metrics-Server的作用
Metrics-Server组件的作用:获取集群中的pod、节点等负载信息
HPA资源的作用:通过Metrics-Server获取的负载信息,自动伸缩的创建或者删除pod
(四)HPA与Metrics-Server的关系
HPA是Kubernetes的一个自动扩展控制器,它可以根据Pod的资源使用情况自动调整Pod的副本数量。而Metrics-Server为HPA提供了关键的度量数据支持。当HPA需要决定是否需要扩展或缩减Pod的副本数量时,它会通过Kubernetes API Server查询Metrics-Server收集的度量数据,然后根据这些数据进行决策。
例如,如果某个Deployment的Pod的CPU利用率超过了设定的阈值,HPA就会增加该Deployment的Pod副本数量;反之,如果CPU利用率过低,HPA就会减少Pod副本数量
(五)HPA与Metrics-Server的重要性
Metrics-Server和HPA在Kubernetes集群中扮演着至关重要的角色。Metrics-Server通过收集集群中各个资源的度量数据,为外部用户或组件提供了丰富的信息支持;而HPA则利用这些信息实现了Pod的自动扩展和缩减,从而确保了集群资源的有效利用和应用的高可用性。
在实际应用中,Metrics-Server和HPA可以帮助我们解决以下问题:
资源浪费:通过自动扩展和缩减Pod的副本数量,可以避免因资源分配不均或过度分配而导致的资源浪费。
应用性能:当应用面临高并发或高负载时,HPA可以迅速增加Pod副本数量以满足需求,从而确保应用的性能和稳定性。
运维效率:Metrics-Server和HPA的自动化特性可以大大减轻运维人员的工作压力,提高运维效率
更多详细信息访问:资源指标管道 | Kubernetes
二、部署metrics-server组件
(一)镜像获取
镜像获取的方式有多种
1.本地上传镜像包
使用docker load -i 镜像包名称 指令获取镜像
[root@node01 opt]#ls metrics-server.tar
metrics-server.tar
[root@node01 opt]#docker load -i metrics-server.tar
0b97b1c81a32: Loading layer [==================================================>] 1.416MB/1.416MB
87ea89a1eabb: Loading layer [==================================================>] 39.61MB/39.61MB
Loaded image: k8s.gcr.io/metrics-server-amd64:v0.3.2
2.GitHub下载
https://github.com/kubernetes-sigs/metrics-server/releases/
3.国内云下载
docker pull registry.aliyuncs.com/google_containers/metrics-server:v0.6.3
在所有节点上部署镜像
[root@node01 opt]#docker images |grep metrics-server
registry.aliyuncs.com/google_containers/metrics-server v0.6.3 817bbe3f2e51 14 months ago 68.9MB
k8s.gcr.io/metrics-server-amd64 v0.3.2 46aec181fcb3 5 years ago 40.8MB
(二)安装metrics-server组件
安装metrics-server组件,就是给k8s集群安装top指令。
1.获取yaml文件
[root@master01 metrics]#wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/high-availability-1.21+.yaml
[root@master01 metrics]#ls
high-availability-1.21+.yaml
2.修改文件内容
[root@master01 metrics]#vim high-availability-1.21+.yaml
......
136 requiredDuringSchedulingIgnoredDuringExecution:
137 - labelSelector:
138 matchLabels:
139 k8s: metrics-server
#修改硬策略的标签,由于本机的coredns实例的标签键位k8s-app,需要修改为不一致的,或者注释pod反亲和
......
142 topologyKey: kubernetes.io/hostname
143 containers:
144 - args:
145 - --kubelet-insecure-tls #启动允许使用不安全的TLS证书
146 - --cert-dir=/tmp
147 - --secure-port=10250
148 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
149 - --kubelet-use-node-status-port
150 - --metric-resolution=15s
151 image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.3#修改镜像为阿里云的镜像......
197 ---
198 apiVersion: policy/v1beta1 #1.20版本以前的K8s集群修改PodDisruptionBudget资源的版本为v1beta
199 kind: PodDisruptionBudget
200 metadata:
201 labels:
202 k8s-app: metrics-server
3.创建资源
[root@master01 metrics]#kubectl apply -f high-availability-1.21+.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
poddisruptionbudget.policy/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
4.验证是否安装成功
//查看资源信息
[root@master01 metrics]#kubectl get pod -n kube-system |grep metrics-server
metrics-server-98c7c894d-skwjb 1/1 Running 0 3m55s
metrics-server-98c7c894d-xq8qr 1/1 Running 0 3m55s
[root@master01 metrics]#kubectl get deployment metrics-server -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 2/2 2 2 4m3s//使用top命令查看node节点的top值
[root@master01 metrics]#kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master01 227m 5% 2078Mi 56%
node01 100m 2% 965Mi 26%
node02 114m 2% 580Mi 15% //查看pod资源的top值
[root@master01 metrics]#kubectl top pod -A
NAMESPACE NAME CPU(cores) MEMORY(bytes)
helm-test harbor-nginx-7db9b84fc4-p5tpl 1m 3Mi
kube-flannel kube-flannel-ds-8sgt8 10m 18Mi
kube-flannel kube-flannel-ds-nplmm 7m 21Mi
kube-flannel kube-flannel-ds-xwklx 7m 20Mi
kube-system coredns-74ff55c5b-dwzdp 4m 15Mi
kube-system coredns-74ff55c5b-ws8c8 3m 15Mi
kube-system etcd-master01 22m 336Mi
kube-system kube-apiserver-master01 85m 398Mi
kube-system kube-controller-manager-master01 14m 51Mi
kube-system kube-proxy-psdnv 4m 23Mi
kube-system kube-proxy-zmh82 1m 15Mi
kube-system kube-proxy-zwnx2 1m 22Mi
kube-system kube-scheduler-master01 4m 18Mi
kube-system metrics-server-98c7c894d-fsb4n 6m 20Mi
kube-system metrics-server-98c7c894d-nqph6 11m 14Mi
三、部署HPA
(一)创建deployment
创建deployment控制器,用来生成pod,进行压测
[root@master01 metrics]#cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: dm-hpalabels:app: centos
spec:replicas: 1 #设置副本数量为1个selector:matchLabels:app: centostemplate:metadata:labels:app: centosspec:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 36000"]
#下载stress压测工具,并设置睡眠时间为36000sresources:requests:cpu: "50m"limits:cpu: "150m"
#设置现在CPU资源
创建资源
[root@master01 metrics]#kubectl apply -f deployment.yaml
deployment.apps/dm-hpa created
[root@master01 metrics]#kubectl get pod
NAME READY STATUS RESTARTS AGE
dm-hpa-556f64fc9-9fcff 1/1 Running 0 14s
(二)创建HPA资源
[root@master01 metrics]#cat hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa-tools
spec:maxReplicas: 10minReplicas: 2scaleTargetRef:apiVersion: apps/vl kind: Deploymentname: dm-hpatargetCPUUtilizationPercentage: 50------------------------------------------------------------------------------maxReplicas:10 #指定pod最大的数量是10(自动扩容的上限)
minReplicas:2 #指定pod最小的pod数量是2(自动缩容的下限)
scaleTargetRef #指定弹性伸缩引用的目标
apiVersion: apps/vl #目标资源的api
kind: Deployment #目标资源的类型是Deployment
name:dm-hpa #目标资源的名称
targetCPUUtilizationPercentage: 50 #使用cpu阈值(使用到达多少,开始扩容、缩容)
创建HPA资源
[root@master01 metrics]#kubectl apply -f hpa.yaml
horizontalpodautoscaler.autoscaling/hpa-tools created
[root@master01 metrics]#kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-tools Deployment/dm-hpa 0%/50% 2 10 10 8s
[root@master01 metrics]#kubectl get pod
NAME READY STATUS RESTARTS AGE
dm-hpa-556f64fc9-9fcff 1/1 Running 0 6m34s
dm-hpa-556f64fc9-vzs6p 0/1 ContainerCreating 0 1s
[root@master01 metrics]#kubectl get pod
NAME READY STATUS RESTARTS AGE
dm-hpa-556f64fc9-9fcff 1/1 Running 0 6m38s
dm-hpa-556f64fc9-vzs6p 1/1 Running 0 5s
#由于设置的最小阈值为2所以它会自动创建pod,满足最小阈值的需求
(三)进行压测
进入pod使用stress压测工具进行压测
[root@master01 metrics]#kubectl exec -it dm-hpa-556f64fc9-9fcff sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
sh-4.2# stress --cpu 4
stress: info: [97] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
动态检测HPA
[root@master01 pod]#kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-tools Deployment/dm-hpa 1%/50% 2 10 2 14m
hpa-tools Deployment/dm-hpa 0%/50% 2 10 2 15m
hpa-tools Deployment/dm-hpa 1%/50% 2 10 2 16m
hpa-tools Deployment/dm-hpa 130%/50% 2 10 2 17m
查看Pod资源
[root@master01 pod]#kubectl get pod
NAME READY STATUS RESTARTS AGE
dm-hpa-556f64fc9-2zxgf 1/1 Running 0 39s
dm-hpa-556f64fc9-6jsz2 1/1 Running 0 9s
dm-hpa-556f64fc9-9fcff 1/1 Running 0 24m
dm-hpa-556f64fc9-9gt96 1/1 Running 0 39s
dm-hpa-556f64fc9-9jlm7 1/1 Running 0 9s
dm-hpa-556f64fc9-c6jgk 1/1 Running 0 24s
dm-hpa-556f64fc9-cd8xb 1/1 Running 0 9s
dm-hpa-556f64fc9-fzz5q 1/1 Running 0 9s
dm-hpa-556f64fc9-pc74k 1/1 Running 0 24s
dm-hpa-556f64fc9-vzs6p 1/1 Running 0 17m
#达到最大阈值10
pod生成后,CPU负载也会平摊随之下降
[root@master01 pod]#kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-tools Deployment/dm-hpa 0%/50% 2 10 2 30m
hpa-tools Deployment/dm-hpa 50%/50% 2 10 2 30m
hpa-tools Deployment/dm-hpa 149%/50% 2 10 2 30m
hpa-tools Deployment/dm-hpa 150%/50% 2 10 4 31m
hpa-tools Deployment/dm-hpa 134%/50% 2 10 7 31m
hpa-tools Deployment/dm-hpa 106%/50% 2 10 10 31m
hpa-tools Deployment/dm-hpa 92%/50% 2 10 10 32m
hpa-tools Deployment/dm-hpa 68%/50% 2 10 10 36m
hpa-tools Deployment/dm-hpa 57%/50% 2 10 10 37m
hpa-tools Deployment/dm-hpa 52%/50% 2 10 10 37m
hpa-tools Deployment/dm-hpa 33%/50% 2 10 10 37m
hpa-tools Deployment/dm-hpa 31%/50% 2 10 10 37m
......
当结束压测时,CPU资源会释放,同时Pod实例也会释放
[root@master01 pod]#kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-tools Deployment/dm-hpa 0%/50% 2 10 10 22m
----------------------------------------------------------------------------------------
[root@master01 pod]#kubectl get pod
NAME READY STATUS RESTARTS AGE
dm-hpa-556f64fc9-9fcff 1/1 Running 0 34m
dm-hpa-556f64fc9-vzs6p 1/1 Running 0 27m
-----------------------------------------------------------------------------------------
#Pod缩容的时间可能在5-6分钟左右,
#HPA 扩容的时候,负载节点数量上升速度会比较快;但回收的时候,负载节点数量下降速度会比较慢。
#原因是防止在业务高峰期时因为网络波动等原因的场景下
#果回收策略比较积极的话,K8S集群可能会认为访问流量变小而快速收缩负载节点数量
#而仅剩的负载节点又承受不了高负载的压力导致崩溃,从而影响业务
四、命名空间的资源限制
Kubernetes对资源的限制实际上是通过cgroup来控制的,cgroup是容器的一组用来控制内核如何运行进程的相关属性集合。针对内存、CPU 和各种设备都有对应的 cgroup。
默认情况下,Pod 运行没有 CPU 和内存的限额。这意味着系统中的任何 Pod 将能够像执行该 Pod 所在的节点一样, 消耗足够多的 CPU 和内存。一般会针对某些应用的 pod 资源进行资源限制,这个资源限制是通过 resources 的 requests 和 limits 来实现。requests 为创建 Pod 时初始要分配的资源,limits 为 Pod 最高请求的资源值。
(一)创建命名空间
[root@master01 metrics]#kubectl create ns test
namespace/test created
[root@master01 metrics]#kubectl get ns test
NAME STATUS AGE
test Active 8s
(二)对资源数量的限制
创建deployment资源
[root@master01 metrics]#vim deployment.yaml
[root@master01 metrics]#cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testnamespace: testlabels:app: centos1
spec:replicas: 6 #指定要运行的Pod副本数为6个selector:matchLabels:app: centos1template:metadata:labels:app: centos1spec:containers:- name: centos1image: centos:7command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 36000"]resources:limits:cpu: "1000m"memory: "512Mi"
---
apiVersion: v1
kind: ResourceQuota #资源配额的类型
metadata:name: ns-resourcenamespace: test #资源配额适用的命名空间
spec:hard: #定义硬限制,即不能超过的资源配额pods: "5" #命名空间中可以存在的Pod的最大数量为5个services: "3" #命名空间中可以存在的Service的最大数量为3个services.nodeports: "2" #命名空间中可以存在的具有NodePort的Service的最大数量为2个
创建资源
[root@master01 metrics]#kubectl apply -f deployment.yaml
deployment.apps/centos-test created
resourcequota/ns-resource created
[root@master01 metrics]#kubectl get all -n test
NAME READY STATUS RESTARTS AGE
pod/centos-test-845c47f786-44bl8 1/1 Running 0 3s
pod/centos-test-845c47f786-55jhp 1/1 Running 0 3s
pod/centos-test-845c47f786-6lmvv 1/1 Running 0 3s
pod/centos-test-845c47f786-gckv2 1/1 Running 0 3s
pod/centos-test-845c47f786-kwbl7 1/1 Running 0 3s
pod/centos-test-845c47f786-r9jsk 1/1 Running 0 3sNAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/centos-test 6/6 6 6 3sNAME DESIRED CURRENT READY AGE
replicaset.apps/centos-test-845c47f786 6 6 6 3s
[root@master01 metrics]#kubectl run nginx --image=nginx:1.18.0 -n test
Error from server (Forbidden): pods "nginx" is forbidden: exceeded quota: ns-resource, requested: pods=1, used: pods=6, limited: pods=
------------------------------------------------------------------------------------------
#ResourceQuota 是用来限制命名空间内资源使用的配额,并且当超出限制时,
#它主要影响的是未来的资源请求,比如新的Pod的创建请求#在指定的命名空间中的ResourceQuota已经被达到或超过时,Kubernetes API服务器会拒绝Pod的创建请求,并返回一个错误。
#但是,对于已经存在的Pod,ResourceQuota 并不会自动删除或终止它们
(三)对资源配额的限制
如果Pod没有设置requests和limits,则会使用当前命名空间的最大资源;如果命名空间也没设置,则会使用集群的最大资源。
K8S 会根据 limits 限制 Pod 使用资源,当内存超过 limits 时 cgruops 会触发 OOM。
这里就需要创建 LimitRange 资源来设置 Pod 或其中的 Container 能够使用资源的最大默认值
[root@master01 metrics]#vim limit.yaml
[root@master01 metrics]#cat limit.yaml
apiVersion: v1
kind: LimitRange #表示使用limitrange来进行资源控制
metadata:name: test2-limitnamespace: testspec:limits:- default: #default: 即 limit 的值memory: 512Micpu: "1"defaultRequest: #defaultRequest: 即 request 的值memory: 256Micpu: "0.5"type: Container #类型支持 Container、Pod、PVC
相关文章:

【云原生】Kubernetes----Metrics-Server组件与HPA资源
目录 引言 一、概述 (一)Metrics-Server简介 (二)Metrics-Server的工作原理 (三)HPA与Metrics-Server的作用 (四)HPA与Metrics-Server的关系 (五)HPA与…...

模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类
分析圣遗物 在圣遗物系统,玩家操控的是圣遗物的部分 因此我们应该 物以类聚 人与群分把每个圣遗物的部分,抽象出来 拿 生之花,死之羽为例 若是抽象 类很好的扩展 添加冒险家的生之花 时候继承生之花 并且名称冒险者- 生之花 当然圣遗物包含…...

仿真模拟--telnet服务两种认证模式(自作)
自己做的笔记,有问题或看不懂请见解一下~ 目录 两个路由器间实现telnet服务(password认证模式) server client 两个路由器间实现telnet服务(aaa认证模式) server client 改名 tab键补齐 不会就扣问号 ? save 两个路由器间实现telnet服务…...

Apple Phone Memory
Apple Phone Memory 苹果手机内存查询,哪些应用程序(app)占用内存: 设置 通用 iPhone储存空间 清理下QQ音乐:...

Kubernetes容器运行时:Containerd vs Docke
容器化技术笔记 Kubernetes容器运行时:Containerd vs Docke - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this arti…...

【java 线程的状态】
介绍 Java 线程在运⾏的⽣命周期中的指定时刻只可能处于下⾯ 6 种不同状态的其中⼀个状态 状态名称说明NEW初始状态,线程被构建,但是还没有调用start()方法RUNNABLE运行状态,Java线程将操作系统中的就绪和运行两种状态统称为"运行中"BLOCKED阻塞状态,表示线程阻塞于…...

php加密验签
签名生成步骤(小程序端/前端): 确定参与签名的参数:选择需要参与签名的请求参数,通常包括请求的时间戳、随机数、请求的数据等。 参数排序与拼接:将所有参与签名的参数按照字母顺序排序,并拼接成…...

【Golang - 90天从新手到大师】Day06 - 数组
系列文章合集 Golang - 90天从新手到大师 数组是golang中最常用的一种数据结构,数组就是同一类型数据的有序集合 定义一个数组 格式: var name [n]type n为数组长度,n>0 且无法修改,type为数组的元素类型如: var a [2]int上面的例子定义了一个长度为2,元素类型为int的数组…...

java的有参构造方法
java的有参构造方法和无参构造方法类似,区别是构造方法名称里后面跟着一个括号,括号里是参数的定义 示例代码如下 class student4{private String name;private int age;public student4(String n,int a) {namen;agea;System.out.println("调用了…...

Vue66-vue-默认插槽
一、默认插槽需求 1-1、原本的写法: 在每个category组件中用v-show来做条件渲染,但是不方便! 1-2、默认插槽 img标签,ul标签,video标签,都是在app组件中完成解析之后,塞到category组件中的&…...

tsf-consul的使用
在腾讯云微服务平台TSF中使用Consul作为服务发现组件,通常需要遵循以下步骤: ### 1. 创建应用 首先,您需要在TSF控制台创建一个应用。在创建应用时,选择合适的业务类型、开发语言、开发框架等信息。对于使用Consul作为服务发现组件的Spring Cloud应用,您需要选择“业务应…...

【perl】基本语法 /备忘录/
分享 perl 语言学习资源 Perl 教程|极客教程 (geek-docs.com) Perl [zh] (runebook.dev) Perl 运算符 | 菜鸟教程 (runoob.com) Perl Documentation - Perldoc Browser Search the CPAN - metacpan.org 当然还有一些经典书籍,不再列举。 1、数字 1.1、数字表…...

mongodb 集群安装
整体架构图: 1. 配置域名 Server1: OS version: CentOS Linux release 8.5.2111 hostnamectl --static set-hostname mongo01 vi /etc/sysconfig/network # Created by anaconda hostnamemong01 echo "192.168.88.20 mong1 mongo01.com mongo…...

绿茶集团重启IPO:流量渐退、业绩波动,还能讲出好故事吗?
近日,绿茶集团有限公司(下称“绿茶集团”)向港交所递交上市申请,花旗、招银国际为其联席保荐人。 回望绿茶集团的上市之路,可谓有诸多坎坷。该公司于2021年3月首度向港交所发起冲击,但却将中文版招股书中的“流动负债总额”错写成…...

Git与SSH
Git Git是一种分布式版本控制系统,最初由Linus Torvalds为管理Linux内核开发而设计并开发。Git可以帮助开发团队协作管理代码,跟踪代码变更历史,并在需要时回溯到特定版本。 分布式版本控制:每个开发者都可以拥有完整的代码仓库…...

我的创作纪念日--码农阿豪
个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] 📱…...

Git 学习笔记(超详细注释,从0到1)
Git学习笔记 1.1 关键词 Fork、pull requests、pull、fetch、push、diff、merge、commit、add、checkout 1.2 原理(看图学习) 1.3 Fork别人仓库到自己仓库中 记住2个地址 1)上游地址(upstream地址):http…...

GitLab项目组相关操作(创建项目组Group、创建项目组的项目、为项目添加成员并赋予权限)
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 君不见,黄河之水天上来,奔流到海不复回。 君不见,高堂明镜悲白发,朝如青丝暮成雪。 ——《将…...

英语恶补ing
ing的词组都有停下来做某事的感觉了。 second hand是形容词了。 wouldnt buy这里的would是情态动词,也是助动词 助动词不能单独使用,要搭配实义动词,这样才能构成谓语 情态动词(modals)在英语中有多种作用ÿ…...

DS1339C串行实时时钟-国产兼容RS4C1339
RS4C1339串行实时时钟是一种低功耗的时钟/日期设备,具有两个可编程的一天时间报警器和一个可编程方波输出。地址和数据通过2线双向总线串行传输。时钟/日期提供秒、分钟、小时、天、日期、月份和年份信息。对于少于31天的月份,月末的日期会自动调整&…...

神经网络模型---LeNet-5
一、LeNet-5 1.定义LeNet-5模型 model models.Sequential([1.1添加一个二维卷积层,有6个过滤器,每个过滤器的尺寸是5x5。输入图像尺寸是28x28像素,具有1个颜色通道,激活函数是relu layers.Conv2D(6, (5, 5), activationrelu, input_shape…...

免费分享:1994-2020年中国各行业二氧化碳排放数据(附下载方法)
日前,国务院印发《2024—2025年节能降碳行动方案》针对重点领域进行部署,同时明确了制度标准、价格政策、资金支持、科技引领、市场化机制、全民行动等6项措施,为节能降碳提供支撑保障。1994-2020年中国各行业二氧化碳排放数据为评估环境政策…...

Qemu虚拟机在线迁移到VMware
libvirt版本:libvirt-10.0.0qemu版本:qemu-8.2.0 在生产环境中,大多数的场景是 vmware 虚拟机迁移到 qemu 环境,一般是通过关机然后导出、导入磁盘镜像来实现。 如果要将 qemu 环境虚拟机迁移到 vmware 怎么办呢?要求…...

计算机游戏因为d3dcompiler_47.dll丢失无法启动怎么办?解决只要d3dcompiler_47.dll丢失无法启动游戏软件的方法
d3dcompiler_47.dll 是一个动态链接库文件,属于 Microsoft DirectX 的一部分,主要负责编译和运行 3D 图形程序。它是支持 Direct3D 功能的核心组件,Direct3D 是一种用于编程 3D 图形的 API,广泛应用于游戏和图形密集型应用程序中。…...

LDO的原理及测试方法
一、基本结构 这是LM317芯片的核心,这个电路单元称为Bandgap Reference带隙基准源。属于模拟集成电路中的经典电路结构。 LDO拓扑结构图 常见的基本结构 利用VBE的负温度系数,而VT是正温度系数,正负温度系数抵消就的得到稳定的基准参考电压了(三极管的方程VBE=VT*In(lC/IS…...

图论算法学习
图论 dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,再换方向(换方向的过程就涉及到了回溯)。bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再…...

面试题——RabbitMQ
★1.如何保证消息的幂等性?(如何避免消息重复投递) 生产端: 在消息发送前,先查询数据库此消息是否被处理过。处理过则忽略、否则继续处理,并在处理完成后修改状态为已处理。 消费端: 每个消息都生成全局唯一ID或业务I…...

前端开发之浏览器垃圾回收机制
前端开发之浏览器垃圾回收机制 V8引擎,作为Chrome浏览器和Node.js等环境下的JavaScript运行引擎,其垃圾回收机制是确保高效内存管理的关键。 V8垃圾回收机制的深度解析与优化 V8 JavaScript引擎采用了高效的垃圾回收机制,其中核心的实现特…...

less-loader的less转成CSS的底层原理
在现代Web开发中,CSS预处理器如LESS极大地提高了编写样式的效率和灵活性。而less-loader作为webpack的一个加载器,用于将LESS文件转换为CSS文件。本文将深入探讨less-loader如何工作,从解析LESS文件到生成最终的CSS文件的底层原理。 工作流程…...

解锁Flutter中的ProcessResult:让外部命令执行变得轻松
介绍 在我们的编程世界中,有时候我们需要与外部系统或者命令行交互。这就像在一场迷宫中寻找出口一样,我们需要向迷宫的门口询问正确的道路。而在 Flutter 中,这个问路的过程就是通过 ProcessResult 来实现的。 为什么要使用 ProcessResult…...