当前位置: 首页 > news >正文

AWS EKS 集群自动扩容 Cluster Autoscaler

文章目录

  • 一,需求
    • 工作需求
    • 说明
  • 二,部署
    • 精简命令执行
    • 1,要求
    • 2,查看EC2 Auto Scaling groups Tag
    • 3,创建Serviceaccount需要的Policy,Role
    • 4,部署Cluster Autoscaler
    • 5,验证
    • 6,常见问题
  • 三,参考文档

一,需求

工作需求

Amazon EKS 是托管的 Kubernetes 服务,可以使用 HPA 和 Cluster Autoscaler 来在集群中实现弹性伸缩,以满足应用程序的需求并节省资源成本。

说明

Kubernetes(K8s)提供了自动伸缩机制,旨在根据应用程序负载和资源需求的变化自动调整应用的副本数量或节点数量,以满足性能需求和优化资源利用。K8s 中的两个关键自动伸缩机制是 Horizontal Pod Autoscaler (HPA) 和 Cluster Autoscaler。。

方法定义工作原理范围目标对象自动化程度
Horizontal Pod AutoscalerHPA 用于自动调整一个 Deployment、ReplicaSet 或者 StatefulSet 中 Pod 的副本数量,以保持某个指标(例如 CPU 使用率或内存使用率)的目标值。当定义的指标超过或低于阈值时,HPA 将增加或减少 Pod 的副本数量。1,监控 Metrics Server 或自定义指标服务收集的数据.
2,根据定义的目标值,计算出需要的副本数量。
3,更新 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量。
HPA 负责调整一个 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量HPA 关注 Pod 的资源使用率PodHPA 需要你设置目标值,然后根据这些值自动调整 Pod 数量
Cluster AutoscalerCluster Autoscaler 是一种自动伸缩机制,它负责在 Kubernetes 集群中自动扩展或收缩节点的数量。当集群中的 Pod 数量增加或减少,Cluster Autoscaler 会根据条件自动扩展或缩减节点数量。1,监控未满足资源需求的 Pod,并找到它们所在的节点。
2,如果没有足够的节点提供资源,Cluster Autoscaler 会请求云提供商(例如 AWS、GCP)来添加新节点。
当节点上的 Pod 数量减少,如果节点的资源利用率过低,Cluster Autoscaler 可能会将节点缩减。
Cluster Autoscaler 负责调整整个集群中节点的数量Cluster Autoscaler 关注节点的资源利用率NodeCluster Autoscaler 可以在需要的时候自动增加或减少节点

二,部署

精简命令执行

执行命令

##创建sa策略
aws iam create-policy \--policy-name AmazonEKSClusterAutoscalerPolicy \--policy-document file://cluster-autoscaler-policy.json
##创建Role角色
aws iam create-role \--role-name AmazonEKSClusterAutoscalerRole \--assume-role-policy-document file://"trust-policy.json"
##下载Autoscaler yaml文件
wget https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
## 修改yaml文件
1,修改镜像tag为对应EKS版本号
打开以下 Cluster Autoscaler 的 github 的网面,查看与 EKS 版本匹配的最新 Autoscaler 镜像版本 https://link.zhihu.com/?target=https%3A//github.com/kubernetes/autoscaler/releases
2,修改<YOUR CLUSTER NAME>
3, 在<YOUR CLUSTER NAME>下追加两行:
- --balance-similar-node-groups
- --skip-nodes-with-system-pods=false
##部署Cluster Autoscaler
kubectl apply -f cluster-autoscaler-autodiscover.yaml
## 绑定服务帐户和IAM角色
kubectl annotate serviceaccount cluster-autoscaler -n kube-system  eks.amazonaws.com/role-arn=arn:aws:iam::<Account_ID>:role/<Role-name>

1,要求

  • 版本 Cluster Autoscaler需要Kubernetes v1.3.0或更高版本
  • 权限 Cluster Autoscaler 需要能够检查和修改 EC2 Auto Scaling 组。建议使用服务帐户的IAM角色
  • 身份管理 全集群自动缩放器功能策略或者最低IAM策略
  • OIDC OIDC 联合身份验证允许您的服务承担 IAM 角色并与 AWS 服务交互,而无需将凭证存储为环境变量
  • AWS凭证 服务帐户的IAM角色

2,查看EC2 Auto Scaling groups Tag

Cluster Autoscaler 使用 EC2 Auto Scaling groups 服务对 node 进行扩容,我们需要确保 EKS 对应的 Auto Scaling groups 有适合的 Tag。

Cluster Autoscaler 通过 Tag 来识别哪些 Auto Scaling groups 属于其管辖范围。

如果我们使用 eksctl 命令或者 AWS 网页控制台来创建 node group,则所需 Tag 已经自动设置了,如果用其它方式创建的 node group 则需要确保其对应用的 Auto Scaling groups 中有以下两个 Tag
EC2 Auto Scaling groups Tag

3,创建Serviceaccount需要的Policy,Role

通过 service account(sa)来给 Cluster Autoscaler 的 Pod 提供访问 AWS 的 EC2 Auto Scaling groups 的权限。先创建 sa 需要的 Policy 和 Role。
创建Policy

vim  cluster-autoscaler-policy.json
{"Version": "2012-10-17","Statement": [{"Action": ["autoscaling:DescribeAutoScalingGroups","autoscaling:DescribeAutoScalingInstances","autoscaling:DescribeLaunchConfigurations","autoscaling:DescribeTags","autoscaling:SetDesiredCapacity","autoscaling:TerminateInstanceInAutoScalingGroup","ec2:DescribeInstanceTypes","ec2:DescribeLaunchTemplateVersions"],"Resource": "*","Effect": "Allow"}]
}
参考:https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/CA_with_AWS_IAM_OIDC.md

Tips: 这个Policy 提供访问EC2 autoscaling group的相关权限
创建策略

aws iam create-policy \--policy-name AmazonEKSClusterAutoscalerPolicy \--policy-document file://cluster-autoscaler-policy.json

创建IAM Role

vim trues-policy.json
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Federated": "arn:aws:iam::<AccountID>:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/<OICD_ID>"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"oidc.eks.us-east-1.amazonaws.com/id/<OICD_ID>:sub": "system:serviceaccount:kube-system:cluster-autoscaler"}}}]
}###更新角色信任关系aws iam update-assume-role-policy --role-name <role-name> --policy-document file://trust-policy.json更新角色信任关系 
aws iam update-assume-role-policy --role-name AmazonEKSClusterAutoscalerRole --policy-document file://"trust-policy.json"

说明:IAM Role 中包括 IAM policy 和 trust relationship 两部分,我们先用 json 文件来定义 trust relationship 的内容。

trust-policy.json 在创建 Role 时,指定“Trust relationships”中的内容

  • 修改“252557384592”为自己的 AWS Account
  • 修改“us-east-1”为自己的 Region
  • 修改“OpenID Connect provider URL”为自己 EKS 的 OpenID Connect provider URL 中最后的字符串,如下所示
  • 在这里插入图片描述

创建角色

aws iam create-role \--role-name AmazonEKSClusterAutoscalerRole \--assume-role-policy-document file://"trust-policy.json"###更新角色信任关系aws iam update-assume-role-policy --role-name <role-name> --policy-document file://trust-policy.json更新角色信任关系 
aws iam update-assume-role-policy --role-name AmazonEKSClusterAutoscalerRole --policy-document file://"trust-policy.json"

说明:

role-name:自定义 Role 的名称
assume-role-policy-document:指定本地 trust-policy 文件

为角色附加策略

aws iam attach-role-policy \--policy-arn arn:aws:iam::<AccountID>:policy/AmazonEKSClusterAutoscalerPolicy \--role-name AmazonEKSClusterAutoscalerRole

4,部署Cluster Autoscaler

下载Autoscaler yaml文件

wget https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml

部署Cluster Autoscaler

kubectl apply -f cluster-autoscaler-autodiscover.yaml

绑定服务帐户和IAM角色

#命令行
kubectl annotate serviceaccount cluster-autoscaler -n kube-system eks.amazonaws.com/role-arn=arn:aws:iam::<ACCOUNTID>:role/<Role-name>(建议使用AmazonEKSClusterAutoscalerRole)
#文件
apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-addon: cluster-autoscaler.addons.k8s.iok8s-app: cluster-autoscalerannotations:eks.amazonaws.com/role-arn: arn:aws:iam::xxxxx:role/<Role-name>  # Add the IAM role created in the above C section.name: cluster-autoscalernamespace: kube-system

5,验证

#默认扩大节点组节点数量
扩大规模如何运作?
纵向扩展在 API 服务器上创建一个监视来查找所有 Pod。它每 10 秒检查一次任何不可调度的 pod(可通过--scan-interval标志配置)。当 Kubernetes 调度程序无法找到可以容纳 pod 的节点时,该 pod 就无法调度。例如,Pod 可以请求任何集群节点上可用的更多 CPU。不可调度的 pod 通过其 PodCondition 进行识别。每当 Kubernetes 调度程序无法找到运行 pod 的位置时,它就会将“schedulable”PodCondition 设置为 false,并将 Reason 设置为“unschedulable”。如果不可调度的 Pod 列表中有任何项目,Cluster Autoscaler 会尝试找到新的位置来运行它们。#默认缩减节点组节点数量
每 10 秒(可通过--scan-interval标志配置),如果不需要扩展,Cluster Autoscaler 会检查哪些节点是不需要的。当满足以下所有条件时,将考虑删除节点:
1,该节点上运行的所有 Pod 的 CPU 和内存请求总和(默认情况下包括DaemonSet Pod和Mirror Pod--ignore-daemonsets-utilization ,但可以使用和--ignore-mirror-pods-utilization标志进行配置)小于该节点可分配的 50%。(在 1.1.0 之前,使用节点容量而不是可分配的容量。)可以使用 --scale-down-utilization-threshold标志配置利用率阈值。
2,节点上运行的所有 pod(默认情况下在所有节点上运行的 pod 除外,例如清单运行 pod 或 daemonset 创建的 pod)都可以移动到其他节点。请参阅 哪些类型的 Pod 可以阻止 CA 删除节点?部分了解有关哪些 pod 不满足此条件的更多详细信息,即使其他地方有空间容纳它们。在检查此情况时,所有可移动吊舱的新位置都会被记住。这样,Cluster Autoscaler 就知道每个 Pod 可以移动到哪里,以及哪些节点在 Pod 迁移方面依赖于哪些其他节点。当然,最终调度程序可能会将 Pod 放置在其他位置。
3,它没有缩小禁用注释(请参阅如[何防止 Cluster Autoscaler 缩小特定节点?](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#how-can-i-prevent-cluster-autoscaler-from-scaling-down-a-particular-node))#测试集群自动绽放程序是否启动及角色是否已附加
$ kubectl get pods -n kube-system
$ kubectl exec -n kube-system cluster-autoscaler-xxxxxx-xxxxx  env | grep AWS#测试命令
kubectl scale deployment autoscaler-demo --replicas=50#扩展日志
I1025 13:48:42.975037       1 scale_up.go:529] Final scale-up plan: [{eksctl-xxx-xxx-xxx-nodegroup-ng-xxxxx-NodeGroup-xxxxxxxxxx 2->3 (max: 8)}]#获取节点组信息
eksctl get nodegroup --cluster <cluster-name>
#调整节点组现有节点数
eksctl scale nodegroup --cluster <cluster-name> --name <nodegroup-name> --nodes <number>
#调整节点组最小节点数
eksctl scale nodegroup --cluster <cluster-name> --name <nodegroup-name> --nodes-min <number>
#调整节点组最大节点数
eksctl scale nodegroup --cluster <cluster-name> --name <nodegroup-name> --nodes-max <number>

6,常见问题

报错一:
caused by: InvalidIdentityToken: No OpenIDConnect provider found in your account for https://oidc.eks.us-east-1.amazonaws.com/id/274A18041DB4CF680FA22A5EF99FDFE3
解决:
使用 eksctl 为集群创建 IAM OIDC 身份提供商
eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve确定集群是否拥有现有 IAM OIDC 提供商。
检索集群的 OIDC 提供商 ID 并将其存储在变量中。
oidc_id=$(aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
确定您的账户中是否已存在具有您的集群 ID 的 IAM OIDC 提供商。报错二:
0617 07:29:49.853336       1 aws_manager.go:262] Failed to regenerate ASG cache: WebIdentityErr: failed to retrieve credentials
caused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentitystatus code: 403, request id: ff336b02-e997-47f2-8551-8e00efa05049
F0617 07:29:49.853387       1 aws_cloud_provider.go:430] Failed to create AWS Manager: WebIdentityErr: failed to retrieve credentials
caused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentitystatus code: 403, request id: ff336b02-e997-47f2-8551-8e00efa05049
解决:
修改OICD供应商ID,更新角色信任策略
aws iam update-assume-role-policy --role-name AmazonEKSClusterAutoscalerRole --policy-document file://"trust-policy.json"aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
如果返回了输出,则表示您的集群已经有 IAM OIDC 提供商,您可以跳过下一步。如果没有返回输出,则您必须为集群创建 IAM OIDC 提供商。
使用以下命令为您的集群创建 IAM OIDC 身份提供商。将 my-cluster 替换为您自己的值。
eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve

三,参考文档

AWS EKS 集群自动扩容 Cluster Autoscaler
github
CutoscalerFAQ
在这里插入图片描述

相关文章:

AWS EKS 集群自动扩容 Cluster Autoscaler

文章目录 一&#xff0c;需求工作需求说明 二&#xff0c;部署精简命令执行1&#xff0c;要求2&#xff0c;查看EC2 Auto Scaling groups Tag3&#xff0c;创建Serviceaccount需要的Policy&#xff0c;Role4&#xff0c;部署Cluster Autoscaler5&#xff0c;验证6&#xff0c;常…...

excel中有哪些通配符、excel配置问题,数学函数篇1之sum系列

学习excel前需要明确的是事&#xff1a;   在学习excel函数之前&#xff0c;大家需要明确一件事&#xff0c;excel现在设计到了一些新函数&#xff0c;这些新函数只能存在于office365、office2019及更 新版本之中&#xff0c;所以建议大家在学习时安装较新的版本&#xff0c;…...

工控行业需要熟悉的工业级通信协议

1. Modbus RTU Modbus RTU 是一种串行通信协议&#xff0c;常用于工控行业。它具有以下特点和优势&#xff1a; 采用二进制编码&#xff0c;数据传输更加高效。支持多种传输介质&#xff0c;如RS-232、RS-485等。容易实现和使用&#xff0c;适用于各种设备。具备强大的错误检…...

力扣题解(1030. 距离顺序排列矩阵单元格),带注释

题目描述 链接:点我 注意&#xff1a;多看几遍题目&#xff0c;开始没看懂…相当于计算矩阵网格里面的点&#xff08;不要计算边界&#xff09; 我开了题解才明白题的意思 orz… 题解 class Solution {public int[][] allCellsDistOrder(int rows, int cols, int rCenter, …...

每天一道leetcode:剑指 Offer 34. 二叉树中和为某一值的路径(中等图论深度优先遍历递归)

今日份题目&#xff1a; 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例1 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSu…...

利用POM完成脚本分离实现企业级自动化(POM设计模式+页面的框架封装+测试报告截图)

利用POM完成脚本分离实现企业级自动化&#xff08;POM设计模式页面的框架封装测试报告截图&#xff09; 项目-测试-手工测试 项目-测试-手工测试 1.了解需求&#xff1b; 2.编写测试用例&#xff08;开始&#xff09;——功能测试组会去做的事情 3.执行测试用例——发送测试报…...

嵌入式设计中对于只有两种状态的变量存储设计,如何高效的对循迹小车进行偏差量化

前言 &#xff08;1&#xff09;在嵌入式程序设计中&#xff0c;我们常常会要对各类传感器进行数据存储。大多时候的传感器&#xff0c;例如红外光传感器&#xff0c;返回的数据要么是0&#xff0c;要么是1。因此&#xff0c;只需要一bit就能够存储。而很多人却常常使用char型数…...

day53 第九章 动态规划part14● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

1143. 最长公共子序列 class Solution {public int longestCommonSubsequence(String text1, String text2) {int m text1.length();int n text2.length();int[][] dp new int[m 1][n 1];for (int i 1; i < m; i) {for (int j 1; j < n; j) {if (text1.charAt(i …...

shell编程 基础

将content.txt文件中的内容输出到控制台上 将content.txt中有tom的行输出到控制台 将$2文件中含有gree的行输出到控制台 case语法 简易计算器 查找有root的行 查找以root开头的行 查询时忽略大小写 grep -E 则适用于复杂的正则表达式&#xff0c;可以使用多项选择、重复和子表达…...

人工智能在网络安全中的应用: 分析人工智能、机器学习和深度学习等技术在预测、检测和应对网络攻击中的作用

第一章&#xff1a;引言 随着信息技术的迅猛发展&#xff0c;网络安全已成为当今社会不容忽视的重要议题。网络攻击手法日益复杂&#xff0c;传统的防御方法已经不再足够。在这一背景下&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐渐崭露头角&#xff0c;为网络安…...

使用 Redis 实现异步队列

使用 Redis 实现异步队列 一、简介1 异步队列2 异步队列与同步队列 二、Redis 实现异步队列1 利用 Redis 的 List 数据类型实现异步队列2 利用 Redis 的 Pub/Sub 功能实现异步队列3 利用 Redis 的 Sorted Set 数据类型实现延迟队列 三、Redis 异步队列的实际应用场景4.1 异步任…...

RocketMQ、Dashboard部署以及安全设置

RocketMQ、dashboard部署以及安全设置 一、启动RocketMQ1.1 下载RocketMQ1.2 修改配置文件1.2.1 修改nameServer Jvm内存配置1.2.2 修改broker参数 1.3 启动1.3.1 启动NameServer1.3.2 启动Broker1.3.3 测试是否启动成功1.3.3.1 测试消息发送1.3.3.2 测试消息接收1.3.3.3 Java程…...

Android AlarmManager设置闹钟

官网镇楼&#xff1a;设置重复闹铃时间 闹钟具有以下特征&#xff1a; 它们可让您按设定的时间和/或间隔触发 intent。您可以将它们与广播接收器结合使用&#xff0c;以启动服务以及执行其他操作。它们在应用外部运行&#xff0c;因此即使应用未运行&#xff0c;或设备本身处…...

【C# 基础精讲】LINQ to XML查询

LINQ to XML 是 C# 中用于查询和操作 XML 数据的强大工具。它允许您使用 LINQ 查询语法对 XML 文档进行查询、过滤、投影等操作&#xff0c;从而更加方便地处理 XML 数据。本文将详细介绍 LINQ to XML 的基本概念、常见操作以及示例&#xff0c;帮助您了解如何在 C# 中使用 LIN…...

Java学习笔记——(20)标识符命名规则和规范

什么叫标识符 Java 对各种变量、方法和类等命名时使用的字符序列成为标识符凡是自己可以起名字的地方都叫标识符 标识符的命名规则&#xff08;必须遵守&#xff09; 由26个英文字母大小写&#xff0c;0-9&#xff0c;_ 或 $ 组成数字不可以开头不可以使用关键字和保留字Jav…...

过滤字符,绕过

构造不包含字母和数字的webshell <?phpecho "A"^""; ?>运行结果为! 代码中对字符"A"和字符”"进行了异或操作。在PHP中&#xff0c;两个变量进行异或时&#xff0c;先会将字符串转换成ASCII值&#xff0c;再将ASCII值转换成二进制…...

Apache Doris 入门教程32:物化视图

物化视图 物化视图是将预先计算&#xff08;根据定义好的 SELECT 语句&#xff09;好的数据集&#xff0c;存储在 Doris 中的一个特殊的表。 物化视图的出现主要是为了满足用户&#xff0c;既能对原始明细数据的任意维度分析&#xff0c;也能快速的对固定维度进行分析查询。 …...

PHP substr()函数详解,PHP截取字符串。

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 substr 一、截取字符串二、截取中文字符串三、leng…...

关于flink-sql-connector-phoenix的重写逻辑

目录 重写意义 代码结构 调用链路 POM文件配置 代码解析 一、PhoenixJdbcDynamicTableFactory...

Django进阶:DRF(Django REST framework)

什么是DRF&#xff1f; DRF即Django REST framework的缩写&#xff0c;官网上说&#xff1a;Django REST framework是一个强大而灵活的工具包&#xff0c;用于构建Web API。 简单来说&#xff1a;通过DRF创建API后&#xff0c;就可以通过HTTP请求来获取、创建、更新或删除数据(…...

Flink CDC系列之:Oracle CDC 导入 Elasticsearch

Flink CDC系列之&#xff1a;Oracle CDC 导入 Elasticsearch 一、深入理解Flink Oracle CDC Connector二、创建docker-compose.yml文件三、启动容器四、下载Flink Oracle CDC的jar包五、启动 Flink 集群&#xff0c;再启动 SQL CLI六、检查 ElasticSearch 中的结果七、在 Oracl…...

Linux忘记root密码解决方法

当我们忘记root密码进不去服务器怎么办&#xff1f;不要担心&#xff0c;可以进入到linux的救援模式修改root密码。 下面直接上干货&#xff0c;流程如下&#xff1a; 1.重启电脑&#xff0c;按上下键滑动&#xff0c;保证不进入开机流程&#xff0c;然后按e键 2.出现此页面…...

AR/VR眼镜转接器方案,实现同时传输视频快充方案

简介 虚拟现实头戴显示器设备&#xff0c;简称VR头显VR眼镜&#xff0c;是利用仿真技术与计算机图形学人机接口技术多媒体技术传感技术网络技术等多种技术集合的产品&#xff0c;是借助计算机及最新传感器技术创造的一种崭新的人机交互手段。VR头显VR眼镜是一个跨时代的产品。不…...

ASP.NET Core中路由规则匹配

RESTful约束&#xff0c;如果在一个控制器里面有多个Get、Post...的操作 1、在一个控制器里面可以定义多个API方法 2、通过路由规则来区分 /// <summary> /// 获取用户信息 /// </summary> /// <param name"user"></param> /// <returns…...

IDEA:Error running,Command line is too long. 解决方法

报错如下&#xff1a; Error running SendSmsUtil. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun.原因是启动命令过长。 解决方法&#xff1a; 1、打开Edit Configurations 2、点击Modify options设置&#x…...

什么是反射机制?为什么反射慢?

目录 面试回答 知识扩展 反射常见的使用方式 反射和 Class 的关系 面试回答 反射指的是程序在运行时能够获取自身的信息。在 java 中&#xff0c;只要给定类的名字&#xff0c;那么就可以通过反射机制来获得类的所有属性和方法。 Java 的反射可以&#xff1a; 在运行时判断…...

list元素

列表元素 列表元素分为有序列表和无序列表 有序列表 ol – order list – 有序列表 li – list item – 列表元素 <ol type"1"><li>有序列表1</li><li>有序列表2</li><li>有序列表3</li> </ol>属性 type type属…...

OkHttp 源码浅析一

演进之路:原生Android框架不好用 ---- HttpUrlConnect 和 Apache HTTPClient 第一版 底层使用HTTPURLConnect 第二版 Square构建 从Android4.4开始 基本使用: val okhttp OkHttpClient()val request Request.Builder().url("http://www.baidu.com").buil…...

【解决问题】远程仓库GitHub/GitLab添加了SSH Key之后依然无法clone的解决办法

GitHub/GitLab添加了SSH Key之后依然无法clone的解决办法 问题现象解决办法 问题现象 在Git远程仓库添加了自己的ssh key到账户下&#xff0c;git clone时&#xff0c;依然报错clone失败&#xff0c;请检查是否没有权限进行clone操作。 解决办法 在git的安装目录下&#xff…...

回归预测 | MATLAB实现SA-SVM模拟退火算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SA-SVM模拟退火算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现SA-SVM模拟退火算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本…...

Spring事务和事务传播机制(1)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中&#xff0c;事务管理是一种用于维护数据库操作的一致性和…...

如何快速在vscode中实现不同python文件的对比查看

总体而言&#xff1a;两种方式。一种是直接点击vscode右上角的图标&#xff08;见下图&#xff09;。 另一种方式就是使用快捷键啦“**Ctrl**”&#xff0c;用的时候选中想要对比的python文件&#xff0c;然后快捷键就可以达到下图效果了&#xff1a; 建议大家直接使用第二种…...

网络安全---Ring3下动态链接库.so函数劫持

一、动态链接库劫持原理 1.1、原理 Unix操作系统中&#xff0c;程序运行时会按照一定的规则顺序去查找依赖的动态链接库&#xff0c;当查找到指定的so文件时&#xff0c;动态链接器(/lib/ld-linux.so.X)会将程序所依赖的共享对象进行装载和初始化&#xff0c;而为什么可以使用…...

leetcode283. 移动零

难度&#xff1a;简单题 题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 思路&#xff1a; 一开始想&#xff0c;从前往后遍历&am…...

GuLi商城-前端基础Vue-生命周期和钩子函数

下图展示了实例的生命周期。你不需要立马弄明白所有的东西&#xff0c;不过随着你的不断学习和使用&#xff0c;它 的参考价值会越来越高。 VUE 的生命周期指的是组件在创建、运行和销毁过程中所经历的一系列事件&#xff0c;通过这些事件可以 让开发者在不同阶段进行相应的…...

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭

秋招实习刷题网站推荐&#xff1a;codefun2000.com&#xff0c;还有题解博客&#xff1a;blog.codefun2000.com/。以下内容都是来自塔子哥的~ 输入输出 2023.04.15-春招-第三题-魔法之树 //#include<bits/stdc.h> #include<vector> #include<iostream>usin…...

​Kubernetes的演变:从etcd到分布式SQL的过渡

DevRel领域专家Denis Magda表示&#xff0c;他偶然发现了一篇解释如何用PostgreSQL无缝替换etcd的文章。该文章指出&#xff0c;Kine项目作为外部etcd端点&#xff0c;可以将Kubernetes etcd请求转换为底层关系数据库的SQL查询。 受到这种方法的启发&#xff0c;Magda决定进一步…...

29、简单通过git把项目远程提交到gitee

简单通过git把项目远程提交到gitee 1、在gitee上创建一个仓库 2、在要提交的项目文件夹打开git 输入 git init 初始化git 然后设置下用户名和邮箱 git config --global user.name “username” git config --global user.email “yourEmail” 因为我是要把文件简单提交到…...

元宇宙之应用(04)沉浸式游戏

在数字科技迅猛发展的今天&#xff0c;元宇宙的概念正逐渐从科幻走向现实&#xff0c;重新定义了人们与虚拟世界的交互方式。在这一概念的引领下&#xff0c;"沉浸式游戏" 蓬勃发展&#xff0c;为游戏体验带来了前所未有的深度和广度。那么&#xff0c;为什么沉浸式游…...

浙大数据结构第八周之08-图7 公路村村通

题目详情&#xff1a; 现有村落间道路的统计数据表中&#xff0c;列出了有可能建设成标准公路的若干条道路的成本&#xff0c;求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N&#xff08;≤1000&#xff09;和候选道路数目M&#xff08…...

SpringBoot 解决跨域问题

同源策略&#xff08;CORS&#xff09;&#xff1a;浏览器在解析发送的请求时&#xff0c;要求浏览器的路径与发送的请求的路径必须满足三个要求&#xff0c;即请求的协议、域名、端口号都相同&#xff0c;满足同源策略&#xff0c;才可以访问服务器&#xff0c;否则&#xff0…...

2023 年牛客多校第十场题解

C Multiplication 题意&#xff1a;定义 k k k-shift 数是满足 k x y ‾ y x ‾ k\overline{xy}\overline{yx} kxy​yx​ 的数字。给定 k k k&#xff0c;求最大不超过 n n n 的 k k k-shift 数。 1 ≤ n ≤ 1 0 100 1 \le n \le 10^{100} 1≤n≤10100&#xff0c; 2 ≤…...

韦东山老师 RTOS 入门课程(一)RTOS 介绍,熟悉裸机的汇编逻辑

韦东山老师 RTOS 入门课程 课程链接&#xff1a;韦东山直播公开课&#xff1a;RTOS实战项目之实现多任务系统 第1节&#xff1a;裸机程序框架和缺陷_哔哩哔哩_bilibili RTOS 介绍 裸机&#xff1a;固定顺序执行。 中断&#xff1a;可以一直专心做循环里的事情&#xff0c;直…...

WebRTC | SDP详解

目录 一、SDP标准规范 1. SDP结构 2. SDP内容及type类型 二、WebRTC中的SDP结构 1. 媒体信息描述 &#xff08;1&#xff09;SDP中媒体信息格式 i. “artpmap”属性 ii. “afmtp”属性 &#xff08;2&#xff09;SSRC与CNAME &#xff08;3&#xff09;举个例子 &…...

Springboot 实践(9)springboot集成Oauth2.0授权包,5个接口文件配置详解

前文讲解实现了spring boot集成Oauth2.0&#xff0c;实现了授权服务器和资源服务器的搭建&#xff0c;并通过浏览器和postman测试&#xff0c;获取到了授权码&#xff0c;用携带授权码的URL能够争取范文到资源。 本文详细讲解spring boot集成Oauth2.0的几个重要文件接口&#…...

最新AI系统ChatGPT程序源码/支持GPT4/自定义训练知识库/GPT联网/支持ai绘画(Midjourney)+Dall-E2绘画/支持MJ以图生图

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…...

【高频面试题】 消息中间件

文章目录 1、RabbitMQ1.1 RabbitMQ-如何保证消息不丢失1.2 RabbitMQ消息的重复消费问题如何解决的1.3 RabbitMQ中死信交换机 ? (RabbitMQ延迟队列有了解过嘛)1.4 RabbitMQ如果有100万消息堆积在MQ , 如何解决(消息堆积怎么解决)1.5 RabbitMQ的高可用机制有了解过嘛 2、Kafka2.…...

物联网智慧安防实训综合实训基地建设方案

一、系统概述 物联网智慧安防实训综合实训基地是一个为学生提供综合实践、培养技能的场所&#xff0c;专注于物联网技术与智慧安防应用的培训和实训。通过物联网智慧安防实训综合实训基地的建设和运营&#xff0c;学生可以在真实的环境中进行实践训练&#xff0c;提高其物联网技…...

openGauss学习笔记-44 openGauss 高级数据管理-存储过程

文章目录 openGauss学习笔记-44 openGauss 高级数据管理-存储过程44.1 语法格式44.2 参数说明44.3 示例 openGauss学习笔记-44 openGauss 高级数据管理-存储过程 存储过程是能够完成特定功能的SQL语句集。用户可以进行反复调用&#xff0c;从而减少SQL语句的重复编写数量&…...

【Linux】进程信号篇Ⅲ:可重入函数、volatile关键字、SIGCHLD信号

信号Ⅲ &#x1f517; 接上篇七、可重入函数八、volatile 关键字九、SIGCHLD 信号 &#x1f517; 接上篇 &#x1f449;&#x1f517;进程信号篇Ⅰ&#xff1a;信号的产生&#xff08;signal、kill、raise、abort、alarm&#xff09;、信号的保存&#xff08;core dump&#x…...