【Kubernetes】Helm--包管理工具

​​​​​​​

微服务是什么?

微服务把大包解耦成小包,使用的时候使用java -jar包启动服务

Helm

什么是Helm?

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理

Helm 本质就是让 K8s 的应用管理(Deployment、Service 等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml、service.yaml)然后调用 Kubectl 自动执行 K8s 资源部署

Helm 的三个概念

Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。
Helm 有三个重要的概念:Chart 、Repository 和 Release

ChartHelm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

Repository(仓库):Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository

Release:使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。
以 MySQL chart 为例,如果你想在你的集群中运行两个数据库,你可以安装该 chart 两次。每一个数据库都会拥有它自己的 release 和 release name。可以将 release 想象成应用程序发布的版本号

总结:Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的release;

你可以在Helm 的chart repositories 中寻找新的chart

Helm3和Helm2的区别?

Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。
用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源

在 Helm 3 中,Tiller 被移除了。新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作。

helm2:有客户端和Tiller组件
helm3:少了一个转发,多了验证,更安全
heml3 的兼容性更好,一般使用heml3

Helm 的官方网站:https://helm.sh/

一、部署Helm 

1、安装Helm

下载二进制 Helm client 安装包

下载 Helm client 安装包
cd /opt/
#添加 helm-v3.6.0-linux-amd64.tar.gz 安装包
cd /opt/
#解压
tar xf helm-v3.6.0-linux-amd64.tar.gz
#移动helm到/user/local/bin下
mv /opt/linux-amd64/helm /usr/local/bin/helm
#查看helm 版本
helm version

设置命令补全
vim ~/.bashrc
#在末尾添加
source <(helm completion bash)#刷新生效;helm的命令就可以补全了
source

2、使用Helm安装chart

添加dns解析(加快chart的下载)
vim /etc/resolv.confnameserver 192.168.67.30
nameserver 218.2.135.1
nameserver 61.147.37.1
添加常用的 chart 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#第四个会很慢
helm repo add incubator https://charts.helm.sh/incubator

3、charts列表的增删改查

更新chart列表
#更新 charts 列表并查看
helm repo update
helm repo list

查看 stable 仓库可用的 charts 列表
helm search repo stable

 在 Helm 仓库中搜索以 "bitnami/redis" 开头的软件包,并列出相关的结果(名称、版本号等信息)

#在 Helm 仓库中搜索以 "bitnami/xxx" 开头的软件包,并列出
helm search repo bitnami/nginx
helm search repo bitnami/redis

删除 insubator 仓库
#删除 incubator 仓库
helm repo remove incubator#查看 charts 列表
helm repo list

查看 chart 信息
#查看指定 chart 的基本信息
helm show chart stable/mysql#获取指定 chart 的所有信息
helm show all stable/mysql

4、安装chart

#指定 release 的名字为 my-redis,-n 指定部署到 k8s 的 namespace
helm install my-redis bitnami/redis -n default#不指定 release 的名字时,需使用 –generate-name 随机生成一个名字
helm install bitnami/redis --generate-name 

查看所有 release
helm ls 
helm list

查看指定的release 状态
helm status my-redis

删除指定的release 
helm uninstall my-redis

二、Helm 自定义模板

charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

1、拉取 chart

mkdir /opt/helm
cd /opt/helm#拉取mysql的chart并查看
helm pull stable/mysql
ls#解压
tar xf mysql-1.6.9.tgz
ls

#安装tree
yum -y install tree
#查看mysql的目录结构
tree mysqlmysql
├── Chart.yaml                                 #包含 chart 的元数据
├── README.md                                  #提供关于 chart 的信息和使用说明
├── templates                                  #包含 chart 的模板文件
│   ├── configurationFiles-configmap.yaml      #配置文件的 ConfigMap 模板
│   ├── deployment.yaml                        #Deployment 资源的模板
│   ├── _helpers.tpl                           #辅助模板文件
│   ├── initializationFiles-configmap.yaml     #初始化文件的 ConfigMap 模板
│   ├── NOTES.txt                              #安装后的说明和注意事项
│   ├── pvc.yaml                               #PersistentVolumeClaim 资源的模板
│   ├── secrets.yaml                           #Secret 资源的模板
│   ├── serviceaccount.yaml                    #ServiceAccount 资源的模板
│   ├── servicemonitor.yaml                    #ServiceMonitor 资源的模板
│   ├── service.yaml                           #Service 资源的模板
│   ├── ingress.yaml                           #Ingress 资源的模板
│   └── tests                                  #包含测试相关的模板文件
│       ├── test-configmap.yaml
│       └── test.yaml
└── values.yaml                                #包含 chart 的默认配置值

#通过这个结构,我们可以看到 Helm chart 是如何组织和管理 Kubernetes 应用程序的部署配置的。用户可以根据需要编辑这些文件,以自定义应用程序的行为和配置。

可以看到,一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称。

chart 是包含至少两项内容的helm软件包:

(1)软件包自描述文件 Chart.yaml,这个文件必须有 name 和 version(chart版本) 的定义
(2)一个或多个模板,其中包含 Kubernetes 清单文件:

●NOTES.txt:chart 的“帮助文本”,在用户运行 helm install 时显示给用户
●deployment.yaml:创建 deployment 的资源清单文件
●service.yaml:为 deployment 创建 service 的资源清单文件
●ingress.yaml: 创建 ingress 对象的资源清单文件
●_helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用

Helm Chart结构

Chart.yaml

这是 Helm chart 的自描述文件,它包含了 chart 的基本信息。

必须包含 name 字段,用于指定 chart 的名称。

必须包含 version 字段,用于指定 chart 的版本号。

还可以包含其他元数据,如描述、图标、维护者信息等。

模板

Helm chart 包含一个或多个模板,这些模板是 Kubernetes 资源清单文件的文本模板。
模板中可以包含 Go 模板 语法,用于动态生成 Kubernetes 清单文件。
模板会根据 values.yaml 文件中的值进行填充和处理,生成最终的 Kubernetes 资源清单。

具体模板文件

NOTES.txt:这是一个文本文件,包含安装 chart 后显示给用户的信息,通常包括配置提示、使用说明等。
deployment.yaml:这个模板定义了一个 Kubernetes Deployment 资源,用于指定如何部署应用程序的副本。
service.yaml:这个模板定义了一个 Kubernetes Service 资源,通常用于提供对 Deployment 的网络访问。
ingress.yaml:这个模板定义了一个 Kubernetes Ingress 资源,用于管理外部访问到 Service 的路由。
_helpers.tpl:这个文件包含可重用的模板助手函数,可以在 chart 的其他模板中调用。

通过这些组件,Helm charts 为 Kubernetes 应用程序的部署提供了一种标准化和自动化的方法。用户可以通过修改 values.yaml 文件和模板来定制应用程序的部署,然后使用 Helm 命令进行部署和管理。

2、创建自定义的 chart

helm create nginxtree nginx

cat nginx/templates/deployment.yaml#在 templates 目录下 yaml 文件模板中的变量(go template语法)的值默认是在 nginx/values.yaml 中定义的,只需要修改 nginx/values.yaml 的内容,也就完成了 templates 目录下 yaml 文件的配置。比如在 deployment.yaml 中定义的容器镜像:
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"cat nginx/values.yaml | grep repositoryrepository: nginx#以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。
cat nginx/templates/deployment.yamlcat nginx/values.yaml |grep repository

3、修改 chart

vim nginx/Chart.yamlapiVersion: v2
name: nginx                     #chart名字
description: A Helm chart for Kubernetes
type: application               #chart类型,application或library
version: 0.1.0                  #chart版本
appVersion: 1.16.0              #application部署版本

vim nginx/values.yaml
replicaCount: 1image:repository: nginxpullPolicy: IfNotPresenttag: "latest"                #设置镜像标签imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""serviceAccount:create: trueannotations: {}name: ""podAnnotations: {}podSecurityContext: {}# fsGroup: 2000securityContext: {}# capabilities:#   drop:#   - ALL# readOnlyRootFilesystem: true# runAsNonRoot: true# runAsUser: 1000service:type: ClusterIPport: 80ingress:enabled: true                 #开启 ingressclassName: ""annotations: {}# kubernetes.io/ingress.class: nginx# kubernetes.io/tls-acme: "true"hosts:- host: www.kgc.com         #指定ingress域名paths:- path: /pathType: Prefix      #指定ingress路径类型tls: []#  - secretName: chart-example-tls#    hosts:#      - chart-example.localresources:limits:cpu: 100mmemory: 128Mirequests:cpu: 100mmemory: 128Miautoscaling:enabled: falseminReplicas: 1maxReplicas: 100targetCPUUtilizationPercentage: 80# targetMemoryUtilizationPercentage: 80nodeSelector: {}tolerations: []affinity: {}

#修改

#设置镜像标签

#开启 ingress

#指定ingress域名和路径类型

#开启限制

4、打包 chart

#检查依赖和模版配置是否正确
helm lint nginx#过滤查看Chart.yaml 中的内容(不以#开头的非空行)
grep -v '^#' nginx/Chart.yaml | grep -v '^$'#打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz
#包名受 nginx/Chart.yaml 中的内容控制
helm package nginx

5、部署 chart

#使用 --dry-run 参数验证 Chart 的配置,并不执行安装
helm install nginx ./nginx --dry-run --debug

#部署 chart,release 版本默认为 1
helm install nginx ./nginx -n default
#或者
helm install nginx ./nginx-0.1.0.tgz#查看charts
helm lskubectl get pod,svc

#可根据不同的配置来 install,默认是 values.yaml
helm install nginx ./nginx -f ./nginx/values-prod.yaml

6、部署 ingress

#下载 Ingress-Nginx 的配置文件 mandatory.yaml 和 service-nodeport.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

#创建资源;部署 Ingress 控制器和 NodePort 类型的 Service
kubectl apply -f mandatory.yamlkubectl apply -f service-nodeport.yaml

kubectl get pod,svc -n ingress-nginxkubectl get ingress

#添加映射
vim /etc/hosts#访问
curl www.test.com:30010

7、升级Helm Chart

修改为 NodePort 访问后,升级

vim nginx/values.yaml
#修改下面内容 (40行)
service:type: NodePortport: 80nodePort: 30080ingress:enabled: false

vim nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:name: {{ include "nginx.fullname" . }}labels:{{- include "nginx.labels" . | nindent 4 }}
spec:type: {{ .Values.service.type }}ports:- port: {{ .Values.service.port }}targetPort: httpprotocol: TCPname: http#指定 nodePortnodePort: {{ .Values.service.nodePort }}selector:{{- include "nginx.selectorLabels" . | nindent 4 }}

升级release,release版本加1
helm upgrade nginx nginxkubectl get svc#访问
curl 192.168.67.30:30080

8、回滚

#根据 release 版本回滚

#查看 release 版本历史
helm history nginx#回滚 release 到版本1
helm rollback nginx 1#确认 release 是否已经成功回滚到指定版本
helm history nginx

#通常情况下,在配置好 templates 目录下的 kubernetes 清单文件后,后续维护一般只需要修改 Chart.yaml 和 values.yaml 即可。

Chart.yaml:更新 chart 的元数据,如版本号、描述等。

values.yaml:调整或添加配置参数,这些参数将应用于模板中,以定制 Kubernetes 资源的行为。

9、更新nginx版本

//在命令行使用 --set 指定参数来部署(install,upgrade)release

#注:此参数值会覆盖掉在 values.yaml 中的值,如需了解其它的预定义变量参数,可查看 helm 官方文档。

#例如,要将 Nginx chart 的镜像标签升级到 1.15,可以使用以下命令
helm upgrade nginx nginx --set image.tag='1.15'

查看版本
nginx/values.yaml 这里的 版本会被修改

Helm 提供了灵活的方式来管理和维护 Kubernetes 应用程序的部署。
通过回滚功能,可以轻松撤销更改;通过 --set 参数,可以在部署或升级时动态调整配置

三、helm仓库

环境准备

#拿一台新的服务器部署harbor服务
harbor:192.168.67.14

安装docker

Harbor 是一个基于容器的镜像仓库,用于存储和管理 Docker 镜像。
因此,为了使用 Harbor,需要先安装 Docker 引擎

#关闭防火墙
systemctl stop firewalld
setenforce 0yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo##安装20版本
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io#启动并设置开机自启
systemctl start docker.service
systemctl enable docker.service#查看版本
docker version

安装 harbor

#上传 harbor-offline-installer-v1.9.1.tgz 和 docker-compose 文件到 /opt 目录

cd /opt
#添加执行权限
chmod +x docker-compose
cp docker-compose /usr/local/bin/
ls /usr/local/bin/docker-compose
#如果安装最新版的Docker需要安装高版本的Docker-Compose
curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-composewget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.1.tgz#解压
tar zxf harbor-offline-installer-v1.9.1.tgz
cd harbor/

vim harbor.ymlhostname: 192.168.10.19
harbor_admin_password: Harbor12345     #admin用户初始密码
data_volume: /data                     #数据存储路径,自动创建
chart:absolute_url: enabled                #在chart中启用绝对url
log:level: infolocal:rotate_count: 50rotate_size: 200Mlocation: /var/log/harbor          #日志路径

#安装带有 Clair service 和 chart 仓库服务的 Harbor

./install.sh --with-clair --with-chartmuseum

安装 push 插件

#在线安装
helm plugin install https://github.com/chartmuseum/helm-push
#离线安装
wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz
mkdir ~/.local/share/helm/plugins/helm-push
tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-pushhelm repo ls

离线安装 Helm Push 插件:

下载插件压缩包 helm-push_0.8.1_linux_amd64.tar.gz

解压缩并将其放置在 ~/.local/share/helm/plugins/helm-push 目录下

k8s:master:
helm 局域网,使用helm来安装我们的服务,你要使用私有仓库的方式完成helm部署;
然后连接到Harbor仓库

需要安装 helm 中的 helmpush 插件(一般安装在运维机器上,ansible监控上);
然后连接到Harbor仓库

配置Helm仓库

登录 Harbor WEB UI 界面,创建一个新项目

登录到 Harbor 的 Web UI 界面,并创建一个新项目 chart_repo。
浏览器访问:http://192.168.246.9/ ,默认的管理员用户名和密码是 admin/Harbor12345
点击 “+新建项目” 按钮 填写项目名称为 “chart_repo”,访问级别勾选 “公开”,点击 “确定” 按钮,创建新项目

添加仓库
helm repo add harbor http://192.168.246.9/chartrepo/chart_repo --username=admin --password=Harbor12345

#注:这里的 repo 的地址是<Harbor URL>/chartrepo/<项目名称>,Harbor 中每个项目是分开的 repo。如果不提供项目名称, 则默认使用 library 这个项v

推送 chart 到 harbor 中

cd /opt/helm
helm push nginx harbor   #使用 helm push 命令将 chart 推送到 Harbor 仓库

切换到包含 Helm chart 的目录。

#使用 helm push 命令将 chart 推送到 Harbor 仓库

查看 chart_repo 项目中的 Helm Charts

在 Harbor 的 Web UI 界面中查看 chart_repo 项目,确认已成功推送的 Helm Charts

通过这些步骤,可以将自定义的 Helm charts 推送到本地的 Harbor 仓库中,从而实现 Helm charts 的存储、管理和分发。Harbor 作为一个企业级的 Docker Registry 管理项目,也支持 Helm charts 的存储和分发,这使得它成为 Kubernetes 环境中管理 Helm charts 的理想选择。

总结

Helm 是k8s 的软件包(chart包)管理器

三个概念

①chart helm 的软件包;tar 包格式,定义了k8s 各种资源对象yaml 配置文件

②仓库Repository;保存chart 的仓库

③实例 Release;通过helm install 部署的chart 实例

helm命令

helm pull         拉取
helm push       推送
helm create     创建 chart 目录
helm package  把chart 目录进行打包
helm install      安装   实例名称   chart 目录或者tar包        [-f 配置文件] [-n 命名空间] 部署实例
helm upgrade  [--set 字段=值 升级 1]  来更新/升级示例
helm history     查看实例的历史记录
helm rollback   回滚实例的版本
helm status      查看实例状态
helm uninstall   卸载实例

命令含义
Completion命令补全
Create创建一个给定名称的Chart
Get获取给定Release的扩展信息
Dependency管理Chart的依赖关系
EnvHelm环境信息
Help命令帮助
History获取Release历史
Install部署Chart
Lint对Chart进行语法检查
ListRelease列表,List可简写成Ls
Package打包Chart
PluginInstall、List、UnInstall、Helm插件
Pull从Repo中下载Chart并(可选)将其解压到本地目录
Repo

ADD、List、Remove、Update、Index、Helm的Repo

RollBack回滚Release到一个以前的版本
Search查询在Charts中的关键字
Show显示Chart的信息
Status显示给定Release的状态
Template本地渲染模板
Test测试运行Release
Uninstall删除Release
Upgrade升级Release
Verify验证给定路径的Chart是否已签名且有效
Version显示Helm的版本信息

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

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

相关文章

(游戏:三个数的加法)编写程序,随机产生三个一位整数,并提示用户输入这三个整数的和,判断用户输入的和是否正确。

(游戏:三个数的加法)编写程序&#xff0c;随机产生三个一位整数&#xff0c;并提示用户输入这三个整 数的和&#xff0c;判断用户输入的和是否正确。 package myjava; import java.math.*; import java.util.Scanner; public class cy {public static void main(String[]args)…

Swift开发——循环执行方式

本文将介绍 Swift 语言的循环执行方式 01、循环执行方式 在Swift语言中,主要有两种循环执行控制方式: for-in结构和while结构。while结构又细分为当型while结构和直到型while结构,后者称为repeat-while结构。下面首先介绍for-in结构。 循环控制方式for-in结构可用于区间中的…

跨境电商中的IP隔离是什么?怎么做?

一、IP地址隔离的概念和原理 当我们谈论 IP 地址隔离时&#xff0c;我们实际上是在讨论一种网络安全策略&#xff0c;旨在通过技术手段将网络划分为不同的区域或子网&#xff0c;每个区域或子网都有自己独特的 IP 地址范围。这种划分使网络管理员可以更精细地控制哪些设备或用…

Type-C接口显示器:C口高效连接与无限可能 LDR

Type-C显示器C接口的未来&#xff1a;高效连接与无限可能 随着科技的飞速发展&#xff0c;我们的日常生活和工作中对于高效、便捷的连接方式的需求日益增加。在这样的背景下&#xff0c;Type-C接口显示器凭借其卓越的性能和广泛的兼容性&#xff0c;正逐渐崭露头角&#xff0c…

Java中ArrayList(顺序表)的自我实现(如果想知道Java中怎么自我实现ArrayList,那么只看这一篇就足够了!)

前言&#xff1a;在 Java 编程中&#xff0c;ArrayList 是一种非常常用的数据结构&#xff0c;它提供了动态数组的实现方式&#xff0c;可以方便地存储和操作数据。相比于传统的数组&#xff0c;ArrayList 具有更多的灵活性和便利性&#xff0c;可以根据需要动态地调整大小&…

axios打通fastapi和vue,实现前后端分类项目开发

axios axios是一个前后端交互的工具&#xff0c;负责在前端代码&#xff0c;调用后端接口&#xff0c;将后端的数据请求到本地以后进行解析&#xff0c;然后传递给前端进行处理。 比如&#xff0c;我们用fastapi写了一个接口&#xff0c;这个接口返回了一条信息&#xff1a; …

后端项目怎么做?怎么准备面试,看这篇就够了!

近期群友都在海投&#xff0c;广撒网&#xff0c;为的就是等一个面试机会&#xff0c;等一个offer。 当收到面试通知的时候&#xff0c;大家一定要好好把握机会。 机会很重要&#xff0c;给你机会&#xff0c;没有把握住&#xff0c;那就比较尴尬了。 对于研发岗位来说&…

Hadoop 2.0:主流开源云架构(三)

目录 四、Hadoop 2.0体系架构&#xff08;一&#xff09;Hadoop 2.0公共组件Common&#xff08;二&#xff09;分布式文件系统HDFS&#xff08;三&#xff09;分布式操作系统Yarn&#xff08;四&#xff09;Hadoop 2.0安全机制简介 四、Hadoop 2.0体系架构 &#xff08;一&…

如何解决mfc100u.dll丢失问题,关于mfc100u.dll丢失的多种解决方法

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“计算显示缺失mfc100u.dll”。这个问题可能会影响到我们的正常使用&#xff0c;因此了解它的原因、表现以及解决方法是非常重要的。小编将详细介绍计算显示缺失mfc100u.dll的问题&#xff0…

音视频集式流媒体边缘分布式集群拉流管理

一直以来&#xff0c;由于srs zlm等开源软件采用传统直播协议&#xff0c;即使后面实现了webrtc转发&#xff0c;由于信令交互较弱&#xff0c;使得传统的安防监控方案需要在公网云平台上部署大型流媒体服务器&#xff0c;而且节点资源不能统一管理调度&#xff0c;缺乏灵活性和…

基于PPO的强化学习超级马里奥自动通关

目录 一、环境准备 二、训练思路 1.训练初期&#xff1a; 2.思路整理及改进&#xff1a; 思路一&#xff1a; 思路二&#xff1a; 思路三&#xff1a; 思路四&#xff1a; 3.训练效果&#xff1a; 三、结果分析 四、完整代码 训练代码&#xff1a; 测试代码&#x…

2024.ZCPC.M题 计算三角形个数

题目描述&#xff1a; 小蔡有一张三角形的格子纸&#xff0c;上面有一个大三角形。这个边长为 的大三角形&#xff0c; 被分成 个边长为 1 的小三角形(如图一所示)。现在&#xff0c;小蔡选择了一条水平边 删除&#xff08;如图二所示&#xff09;&#xff0c;请你找出图上剩余…

RestTemplate远程请求的艺术

1 简说 编程是一门艺术,追求优雅的代码就像追求优美的音乐。 很多有多年工作经验的开发者,在使用RestTemplate之前常常使用HttpClient,然而接触了RestTemplate之后,却愿意放弃多年相处的“老朋友”,转向RestTemplate。那么一定是RestTemplate有它的魅力,有它的艺术风范。…

【ARM-Linux篇】阿里云人脸识别方案

一、接入阿里云 https://vision.aliyun.com/ 点击“人脸搜索1:N” 点击"立即开通"&#xff1a; 使用阿里云APP/支付宝/钉钉扫码登录&#xff1a; 购买“人脸搜索1:N”能力&#xff0c;第一次购买&#xff0c;可以有5000次的免费使用&#xff1a; 开通完后&#xff…

【踩坑日记】I.MX6ULL裸机启动时由于编译的程序链接地址不对造成的程序没正确运行

1 现象 程序完全正确&#xff0c;但是由于程序链接的位置不对&#xff0c;导致程序没有正常运行。 2 寻找原因 对生成的bin文件进行反汇编&#xff1a; arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis查看生成的反汇编文件 发现在在链接的开始地址处&…

Ubuntu基础-VirtualBox安装增强功能

目录 零. 前言 一. 安装 1.点击安装增强功能 2.点击光盘图标 3.复制到新文件夹 4.运行命令 5.重启系统 6.成果展示 二. 打开共享 1.共享粘贴 ​编辑2.共享文件夹 三.总结 安装步骤 打开共享粘贴功能&#xff1a; 打开共享文件夹功能&#xff1a; 零. 前言 在使用…

redis未授权访问

redis数据库基本知识 redis非关系型数据库 redis未授权访问蓝队的成因和危害 漏洞的定义&#xff1a;redis未授权访问漏洞是一个由于redis服务器版本较低&#xff0c;其未设置登录密码导致的登录。 攻击者可以直接利用redis服务器的ip地址和端口完成redis服务器的远程登陆&…

为什么笔记本电脑触控板不工作?这里有你想要的答案和解决办法

序言 你的笔记本电脑触控板停止工作了吗?值得庆幸的是,这个令人沮丧的问题通常很容易解决。以下是笔记本电脑触控板问题的最常见原因和修复方法。 触控板被功能键禁用 大多数(如果不是全部的话)Windows笔记本电脑都将其中一个功能键用于禁用和启用笔记本电脑触控板。按键…

民生银行信用卡中心金融科技24届春招面经

本文介绍2024届春招中&#xff0c;中国民生银行下属信用卡中心的金融科技&#xff08;系统研发方向&#xff09; 岗位2场面试的基本情况、提问问题等。 2024年04月投递了中国民生银行下属信用卡中心的金融科技&#xff08;系统研发方向&#xff09; 岗位&#xff0c;暂时不清楚…

关于反弹shell的学习

今天学习反弹shell&#xff0c;在最近做的ctf题里面越来越多的反弹shell的操作&#xff0c;所以觉得要好好研究一下&#xff0c;毕竟是一种比较常用的操作 什么是反弹shell以及原理 反弹Shell&#xff08;也称为反向Shell&#xff09;是一种技术&#xff0c;通常用于远程访问和…