k8s 使用 helm 文件部署 8.12.2 es 分角色集群

文章目录

    • @[toc]
  • 环境介绍
  • 添加 helm 仓库
  • 下载 elasticsearch chart 包
  • 配置 secret 文件
    • tls 证书
    • 用户名和密码
  • 部署 master 节点
  • 部署 ingest 节点
  • 部署 data 数据节点
    • 创建 pv 和 pvc
  • 节点验证
  • 部署 kibana
    • 配置 secret 文件
      • 用户名和密码
      • 随机密钥
    • 创建 kibana_login 用户
    • 下载 kibana chart 包
    • 部署 kibana

只开启了用户密码的认证,并没有开启 https

环境介绍

节点

添加 helm 仓库

helm repo add elastic https://helm.elastic.co

下载 elasticsearch chart 包

helm pull elastic/elasticsearch --version 8.5.1

配置 secret 文件

  • 因为官方自动创建的证书有效期都很短,我们要自己创建一个

用 es 镜像创建一个 docker 容器

docker run -it --rm --name es-cert-create docker.elastic.co/elasticsearch/elasticsearch:8.12.2 bash

tls 证书

  • 生成 ca 证书,指定证书有效期
    • Please enter the desired output file [elastic-stack-ca.p12] 要求写 ca 证书的文件名字,可以回车,默认名字是 elastic-stack-ca.p12
    • Enter password for elastic-stack-ca.p12 : 给 ca 证书设置密码,根据实际场景选择
elasticsearch-certutil ca --days 36500
  • 生成 cert 证书文件
    • 上面有配置 ca 证书输出文件名称的,把 elastic-stack-ca.p12 改成自己对应的名字
    • Enter password for CA (elastic-stack-ca.p12) : 输入创建 ca 证书时候的密码,没设置直接回车
    • Please enter the desired output file [elastic-certificates.p12]: 设置 cert 证书文件的名字,默认是 elastic-certificates.p12
    • Enter password for elastic-certificates.p12 : cert 证书设置密码,根据实际场景选择
elasticsearch-certutil cert --ca elastic-stack-ca.p12 --days 36500

验证证书到期时间

# p12 证书转换成 pem 证书,期间输入一次密码
openssl pkcs12 -in elastic-certificates.p12 -out cert.pem -nodes
# 查看证书到期时间
openssl x509 -in cert.pem -noout -enddate

从容器内复制出来

docker cp es-cert-create:/usr/share/elasticsearch/elastic-certificates.p12 ./elastic-certificates.p12

生成 secret,后期可以导出成 yaml,去其他环境直接使用

kubectl create secret -n es-logs generic elastic-certificates --from-file=elastic-certificates.p12

用户名和密码

  • elastic 是用户名
  • Passw0rd@123 是对应的密码
  • 写入 secret 是需要 base64 加密的
  • 一定要使用 echo -n,避免换行导致 readiness 脚本失败
cat <<EOF > elastic-credentials-secret.yaml
---
apiVersion: v1
kind: Secret
metadata:name: elastic-credentialsnamespace: es-logslabels:app: "elasticsearch"
type: Opaque
data:username: $(echo -n 'elastic' | base64)password: $(echo -n 'Passw0rd@123' | base64)
EOF

应用到 k8s 集群

kubectl apply -f elastic-credentials-secret.yaml

解压包

tar xf elasticsearch-8.5.1.tgz

备份 values.yaml 文件

mv elasticsearch/values.yaml{,.tmp}

完整 value 文件比较长,以下配置文件,仅提供需要修改的内容

部署 master 节点

cd elasticsearch
# 复制一份 master-values.yaml
cp values.yaml.tmp master-values.yaml

修改 master-values.yaml 文件

# es 集群的名称
clusterName: "es-cluster"
# es 节点的角色
roles:- master
minimumMasterNodes: 1
esConfig:elasticsearch.yml: |cluster.initial_master_nodes: ["es-cluster"]xpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
# 自己创建了证书,这里不需要自动创建
createCert: false
# 创建的用户密码要赋值,注意 secret 名字别错了,这个影响 readiness 探针
extraEnvs:- name: ELASTIC_PASSWORDvalueFrom:secretKeyRef:name: elastic-credentialskey: password- name: ELASTIC_USERNAMEvalueFrom:secretKeyRef:name: elastic-credentialskey: username
# 用户密码为了不在 value 文件里面明文展示,前期手动创建了 secret
secret:enabled: false
# 配置 ssl secret 的 volume 挂载
secretMounts:- name: elastic-certificatessecretName: elastic-certificatespath: /usr/share/elasticsearch/config/certsdefaultMode: 0755
# 部署的镜像 tag
imageTag: "8.12.2"
# 配置 es 的 jvm
esJavaOpts: "-Xmx1g -Xms1g"
# 配置 pod 资源限制
## limits.memory 配置成上面 jvm 的值乘以 1.25 或者 1.5,这些需要根据实际的资源来配置
## requests.cpu 和 requests.memory 也要根据实际集群资源来配置,超出了集群现有的 request 会导致 pod 无法被调度
resources:requests:cpu: "1000m"memory: "1Gi"limits:cpu: "1000m"memory: "2Gi"
# master 节点不需要数据持久化
persistence:enabled: false
# 节点亲和性,如果需要 es 启动到固定的几个节点,需要配置一下
nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 192.168.11.192- 192.168.11.194- 192.168.11.195
# 没有开启 https 的配置,这个参数会影响 readiness 探针
protocol: http
# 是否启动测试 pod 测试集群状态,默认是开启,可以自定义
tests:enabled: false

部署 master 节点

helm install es-master ./ -f master-values.yaml -n es-logs

返回下面这些信息,说明 es 正在启动

NAME: es-master
LAST DEPLOYED: Tue Jul  2 23:25:28 2024
NAMESPACE: es-logs
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Watch all cluster members come up.$ kubectl get pods --namespace=es-logs -l app=es-cluster-master -w
2. Retrieve elastic user's password.$ kubectl get secrets --namespace=es-logs es-cluster-master-credentials -ojsonpath='{.data.password}' | base64 -d

部署 ingest 节点

# 复制一份 ingest-values.yaml
cp values.yaml.tmp ingest-values.yaml

修改 ingest-values.yaml 文件

clusterName: "es-cluster"
nodeGroup: "ingest"
roles:- ingest- remote_cluster_client
esConfig:elasticsearch.yml: |cluster.initial_master_nodes: ["es-cluster"]discovery.seed_hosts: ["es-cluster-master-headless"]xpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12# 自己创建了证书,这里不需要自动创建
createCert: false
# 创建的用户密码要赋值,注意 secret 名字别错了,这个影响 readiness 探针
extraEnvs:- name: ELASTIC_PASSWORDvalueFrom:secretKeyRef:name: elastic-credentialskey: password- name: ELASTIC_USERNAMEvalueFrom:secretKeyRef:name: elastic-credentialskey: username
# 用户密码为了不在 value 文件里面明文展示,前期手动创建了 secret
secret:enabled: false
# 配置 ssl secret 的 volume 挂载
secretMounts:- name: elastic-certificatessecretName: elastic-certificatespath: /usr/share/elasticsearch/config/certsdefaultMode: 0755
# 部署的镜像 tag
imageTag: "8.12.2"
# 配置 es 的 jvm
esJavaOpts: "-Xmx1g -Xms1g"
# 配置 pod 资源限制
## limits.memory 配置成上面 jvm 的值乘以 1.25 或者 1.5,这些需要根据实际的资源来配置
## requests.cpu 和 requests.memory 也要根据实际集群资源来配置,超出了集群现有的 request 会导致 pod 无法被调度
resources:requests:cpu: "1000m"memory: "1Gi"limits:cpu: "1000m"memory: "2Gi"
# ingest 节点不需要数据持久化
persistence:enabled: false
# 节点亲和性,如果需要 es 启动到固定的几个节点,需要配置一下
nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 192.168.11.192- 192.168.11.194- 192.168.11.195
# 没有开启 https 的配置,这个参数会影响 readiness 探针
protocol: http
# 是否启动测试 pod 测试集群状态,默认是开启,可以自定义
tests:enabled: false

部署 ingest 节点

helm install es-ingest ./ -f ingest-values.yaml -n es-logs

部署 data 数据节点

# 复制一份 data-values.yaml
cp values.yaml.tmp data-values.yaml

修改 data-values.yaml 文件

clusterName: "es-cluster"
nodeGroup: "data"
roles:- data- data_content- data_hot- data_warm- data_cold- ingest- ml- remote_cluster_client- transform
esConfig:elasticsearch.yml: |cluster.initial_master_nodes: ["es-cluster-master"]discovery.seed_hosts: ["es-cluster-master-headless"]xpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
# 自己创建了证书,这里不需要自动创建
createCert: false
# 创建的用户密码要赋值,注意 secret 名字别错了,这个影响 readiness 探针
extraEnvs:- name: ELASTIC_PASSWORDvalueFrom:secretKeyRef:name: elastic-credentialskey: password- name: ELASTIC_USERNAMEvalueFrom:secretKeyRef:name: elastic-credentialskey: username
# 用户密码为了不在 value 文件里面明文展示,前期手动创建了 secret
secret:enabled: false
# 配置 ssl secret 的 volume 挂载
secretMounts:- name: elastic-certificatessecretName: elastic-certificatespath: /usr/share/elasticsearch/config/certsdefaultMode: 0755
# 部署的镜像 tag
imageTag: "8.12.2"
# 配置 es 的 jvm
esJavaOpts: "-Xmx1g -Xms1g"
# 配置 pod 资源限制
## limits.memory 配置成上面 jvm 的值乘以 1.25 或者 1.5,这些需要根据实际的资源来配置
## requests.cpu 和 requests.memory 也要根据实际集群资源来配置,超出了集群现有的 request 会导致 pod 无法被调度
resources:requests:cpu: "1000m"memory: "1Gi"limits:cpu: "1000m"memory: "2Gi"
# 节点亲和性,如果需要 es 启动到固定的几个节点,需要配置一下
nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 192.168.11.198- 192.168.11.194- 192.168.11.195
# 没有开启 https 的配置,这个参数会影响 readiness 探针
protocol: http
# 是否启动测试 pod 测试集群状态,默认是开启,可以自定义
tests:enabled: false

创建 pv 和 pvc

本地创建目录,那个 es 固定在哪个节点,就去哪个节点创建对应的目录

mkdir -p /elastic/es-cluster-data-0
mkdir -p /elastic/es-cluster-data-1
mkdir -p /elastic/es-cluster-data-2
chmod -R 777 /elastic/es-cluster-data-0
chmod -R 777 /elastic/es-cluster-data-1
chmod -R 777 /elastic/es-cluster-data-2
  • 我这边直接使用 localpath 的 pv 做的持久化
  • pvc 的名字是 clusterName-nodeGroup-clusterName-nodeGroup-sts副本序号,按照我的配置文件,三副本,pvc 的名字就是 es-cluster-data-es-cluster-data-0es-cluster-data-es-cluster-data-1es-cluster-data-es-cluster-data-2
---
apiVersion: v1
kind: PersistentVolume
metadata:name: es-cluster-data-es-cluster-data-0
spec:accessModes:- ReadWriteOncecapacity:storage: 30GiclaimRef:apiVersion: v1kind: PersistentVolumeClaimname: es-cluster-data-es-cluster-data-0namespace: es-logshostPath:path: /elastic/es-cluster-data-0type: "DirectoryOrCreate"persistentVolumeReclaimPolicy: RetainnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 192.168.11.198
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: es-cluster-data-es-cluster-data-0namespace: es-logs
spec:accessModes:- ReadWriteOnceresources:requests:storage: 30GivolumeName: es-cluster-data-es-cluster-data-0
---
apiVersion: v1
kind: PersistentVolume
metadata:name: es-cluster-data-es-cluster-data-1
spec:accessModes:- ReadWriteOncecapacity:storage: 30GiclaimRef:apiVersion: v1kind: PersistentVolumeClaimname: es-cluster-data-es-cluster-data-1namespace: es-logshostPath:path: /elastic/es-cluster-data-1type: "DirectoryOrCreate"persistentVolumeReclaimPolicy: RetainnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 192.168.11.194
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: es-cluster-data-es-cluster-data-1namespace: es-logs
spec:accessModes:- ReadWriteOnceresources:requests:storage: 30GivolumeName: es-cluster-data-es-cluster-data-1
---
apiVersion: v1
kind: PersistentVolume
metadata:name: es-cluster-data-es-cluster-data-2
spec:accessModes:- ReadWriteOncecapacity:storage: 30GiclaimRef:apiVersion: v1kind: PersistentVolumeClaimname: es-cluster-data-es-cluster-data-2namespace: es-logshostPath:path: /elastic/es-cluster-data-2type: "DirectoryOrCreate"persistentVolumeReclaimPolicy: RetainnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 192.168.11.195
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: es-cluster-data-es-cluster-data-2namespace: es-logs
spec:accessModes:- ReadWriteOnceresources:requests:storage: 30GivolumeName: es-cluster-data-es-cluster-data-2

生成 pv 和 pvc

k apply -f pv-pvc.yaml

查看 pvc 是不是显示 Bound

k get pvc -n es-logs

部署 data

helm install es-data ./ -f data-values.yaml -n es-logs

节点验证

k exec -it -n es-logs es-cluster-master-0 -- curl -s -u "elastic:Passw0rd@123" "localhost:9200/_cat/nodes?v"

这里是 3 个 master,3 个 ingest 和 3 个 data

ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.22.27.22            43          87   1    0.37    0.84     0.55 cdhilrstw -      es-cluster-data-1
172.22.11.101           37          87   1    0.07    0.43     0.29 ir        -      es-cluster-ingest-0
172.22.84.48            36          86   1    2.26    1.61     0.85 ir        -      es-cluster-ingest-1
172.22.92.6             39          87   1    0.04    0.11     0.12 cdhilrstw -      es-cluster-data-0
172.22.84.49            38          86   1    2.26    1.61     0.85 cdhilrstw -      es-cluster-data-2
172.22.27.20            20          43   1    0.37    0.84     0.55 m         -      es-cluster-master-2
172.22.11.100           53          45   2    0.07    0.43     0.29 m         *      es-cluster-master-0
172.22.84.47            69          43   1    2.26    1.61     0.85 m         -      es-cluster-master-1
172.22.27.21            44          87   1    0.37    0.84     0.55 ir        -      es-cluster-ingest-2

部署 kibana

配置 secret 文件

用户名和密码

上面的方法部署的 es,默认生成的 kibana_system 会没有权限访问,8.12 版本的 kibana 不允许使用 superuser 角色来访问 es 集群,这里要重新创建一个用户,所以先创建一个 secret 文件

  • kibana_login 是用户名
  • Passw0rd@123 是对应的密码
  • 写入 secret 是需要 base64 加密的
  • 一定要使用 echo -n,避免换行导致 readiness 脚本失败
cat <<EOF > elastic-credentials-kibana-secret.yaml
---
apiVersion: v1
kind: Secret
metadata:name: elastic-credentials-kibananamespace: es-logslabels:app: "kibana"
type: Opaque
data:username: $(echo -n 'kibana_login' | base64)password: $(echo -n 'Passw0rd@123' | base64)
EOF

随机密钥

cat <<EOF > elastic-encryptionkey-kibana-secret.yaml
---
apiVersion: v1
kind: Secret
metadata:name: elastic-encryptionkey-kibananamespace: es-logslabels:app: "kibana"
type: Opaque
data:reporting: $(cat /dev/urandom | tr -dc '_A-Za-z0-9' | head -c 50 | base64)security: $(cat /dev/urandom | tr -dc '_A-Za-z0-9' | head -c 50 | base64)encryptedsavedobjects: $(cat /dev/urandom | tr -dc '_A-Za-z0-9' | head -c 50 | base64)
EOF

应用到 k8s 集群

k apply -f elastic-credentials-kibana-secret.yaml
k apply -f elastic-encryptionkey-kibana-secret.yaml

创建 kibana_login 用户

k exec -it -n es-logs es-cluster-master-0 -- curl -s -XPOST -u "elastic:Passw0rd@123" "localhost:9200/_security/user/kibana_login" -H 'Content-Type: application/json' -d '
{"password" : "Passw0rd@123","roles" : [ "kibana_system","superuser" ],"full_name" : "kibana_login","email" : "kibana_login@mail.com","metadata" : {"intelligence" : 7}
}'

返回 {"created":true} 说明用户创建成功了,用这个用户访问一下,能返回节点信息,说明这个用户可以被 kibana 使用

k exec -it -n es-logs es-cluster-master-0 -- curl -s -XGET -u "kibana_login:Passw0rd@123" "localhost:9200/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip"

下载 kibana chart 包

helm pull elastic/kibana --version 8.5.1

解压 chart 包

tar xf kibana-8.5.1.tgz

部署 kibana

备份 values.yaml

cd kibana
cp values.yaml{,.tmp}

修改 values.yaml

# 让 kibana 连接 ingest
elasticsearchHosts: "http://es-cluster-ingest-headless:9200"
elasticsearchCertificateSecret: elastic-certificates
elasticsearchCertificateAuthoritiesFile: elastic-certificates.p12
# 改成上面创建的 kibana_login 用户这个 secret 名字
elasticsearchCredentialSecret: elastic-credentials-kibana
# 增加一个变量,kibana 中文界面
extraEnvs:- name: I18N_LOCALEvalue: zh-CN- name: ELASTICSEARCH_PASSWORDvalueFrom:secretKeyRef:name: elastic-credentials-kibanakey: password- name: ELASTICSEARCH_USERNAMEvalueFrom:secretKeyRef:name: elastic-credentials-kibanakey: username- name: KIBANA_REPORTING_KEYvalueFrom:secretKeyRef:name: elastic-encryptionkey-kibanakey: reporting- name: KIBANA_SECURITY_KEYvalueFrom:secretKeyRef:name: elastic-encryptionkey-kibanakey: security- name: KIBANA_ENCRYPTEDSAVEDOBJECTS_KEYvalueFrom:secretKeyRef:name: elastic-encryptionkey-kibanakey: encryptedsavedobjects
# 修改 tag
imageTag: "8.12.2"
kibanaConfig:kibana.yml: |elasticsearch.requestTimeout: 300000xpack.encryptedSavedObjects.encryptionKey: ${KIBANA_ENCRYPTEDSAVEDOBJECTS_KEY}xpack.reporting.encryptionKey: ${KIBANA_REPORTING_KEY}xpack.security.encryptionKey: ${KIBANA_SECURITY_KEY}server.maxPayload: 10485760elasticsearch.username: ${ELASTICSEARCH_USERNAME}elasticsearch.password: ${ELASTICSEARCH_PASSWORD}
# 开个 nodeport
service:type: NodePort# 可以自定义,也可以不写,让 k8s 自己随机一个nodePort: "31560"

修改 templates/deployment.yaml

      ## volumes 下面的- name: elasticsearch-certssecret:secretName: {{ .Values.elasticsearchCertificateSecret }}## env 下面的- name: ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIESvalue: "{{ template "kibana.home_dir" . }}/config/certs/{{ .Values.elasticsearchCertificateAuthoritiesFile }}"- name: ELASTICSEARCH_SERVICEACCOUNTTOKENvalueFrom:secretKeyRef:name: {{ template "kibana.fullname" . }}-es-tokenkey: tokenoptional: false## volumeMounts 下面的- name: elasticsearch-certsmountPath: {{ template "kibana.home_dir" . }}/config/certsreadOnly: true

部署 kibana

helm install kibana ./ -f values.yaml -n es-logs --no-hooks

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

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

相关文章

qt6 获取百度地图(一)

需求分析&#xff1a; 要获取一个地图&#xff0c; 需要ip 需要根据ip查询经纬度 根据经纬度查询地图 另外一条线是根据输入的地址 查询ip 根据查询到的ip查地图‘ 最后&#xff0c;要渲染地图 上面这这些动作&#xff0c;要进行http查询&#xff1a; 为此要有三个QNet…

机器学习与AI大数据的融合:开启智能新时代

在当今这个信息爆炸的时代&#xff0c;大数据和人工智能&#xff08;AI&#xff09;已经成为推动社会进步的强大引擎。作为AI核心技术之一的机器学习&#xff08;Machine Learning, ML&#xff09;&#xff0c;与大数据的深度融合正引领着一场前所未有的科技革命&#xff0c;不…

深入浅出mysql分库分表

文章目录 为什么要分库分表&#xff1f;什么场景下才需要分库分表&#xff1f;1. 数据量增长导致数据量过大--分表2. 高并发访问--分库3. 地理分散的业务--分库 分库分表的区别分库&#xff08;Database Sharding&#xff09;分表&#xff08;Table Partitioning&#xff09; 垂…

Qt学习:Qt用户界面的核心元素

Qt界面设计主要包括以下几个核心元素&#xff1a; 窗口和对话框&#xff1a;Qt中的基本组件之一是窗口&#xff08;Window&#xff09;&#xff0c;它可以包含各种控件&#xff0c;如按钮、文本框、列表框等&#xff0c;用于展示信息和接收用户输入。对话框&#xff08;Dialog&…

C++_STL---priority_queue

priority_queue的相关介绍 优先级队列是一种容器适配器&#xff0c;根据严格的排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大(小)的。该容器适配器类似于堆&#xff0c;在堆中可以随时插入元素&#xff0c;并且可以检索最大(小)堆元素(优先级队列中位于顶部的元…

等保2.0中还有哪些针对云计算的安全要求?

等保2.0中针对云计算的安全要求概述 等保2.0是中国信息安全等级保护制度的升级版&#xff0c;它对云计算环境提出了一系列特定的安全要求&#xff0c;以确保云服务的安全性和合规性。以下是一些关键的云计算安全扩展要求&#xff1a; 基础设施位置&#xff1a;要求云计算基础…

内涵:日常工作中docker的常用知识

内涵&#xff1a;日常工作中docker的常用知识 1. docker高频指令&#xff08;与参数&#xff09;2. 单docker使用场景3.双&#xff08;多&#xff09;docker使用场景 正如 优雅&#xff1a;从系统环境到依赖包的管理&#xff0c;最近工作中&#xff0c;对开发、部署环境中的管…

电子画册制作的小秘密都在这篇文章了

电子画册作为现代营销和展示的重要工具&#xff0c;已经成为各类企业和个人宣传品的首选。相比传统印刷画册&#xff0c;电子画册不仅节省成本&#xff0c;还能通过多媒体元素增强视觉冲击力&#xff0c;提升用户互动体验。本文将介绍电子画册制作的基础步骤和关键要点&#xf…

电气-伺服(4)CANopen

一、CAN Controller Area Network ,控制器局域网&#xff0c;80年的德国Bosch的一家公司研发可以测量仪器直接的实时数据交换而开发的一款串行通信协议。 CAN发展历史 二、CAN 的osi 模型 CAN特性&#xff1a; CAN 的数据帧 三、CANopen 什么是CANopen CANopen 的网络模型 …

Unity In App Purchasing内购校验

1&#xff0c;利用收据验证混淆器 把后台的key填进去&#xff0c;点击自动生成一些文件 2&#xff0c;代码过滤 using UnityEngine.Purchasing.Security;在IAPManager.cs的 public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)增加 #if !UNITY_EDITOR…

【C++之unordered_set和unordered_map的模拟实现】

C学习笔记---025 C之unordered_set和unordered_map的模拟实现1、unordered_set的模拟实现2、unordered_map的模拟实现 C之unordered_set和unordered_map的模拟实现 前言&#xff1a; 前面篇章学习了C对unordered_set和unordered_map的认识和应用&#xff0c;接下来继续学习&am…

Java_网络通信:TCP和UDP

1、区别 TCP Transfer Control Protocol 是一种面向连接的、可靠的、传输层通信协议。 ​ 特点&#xff1a; 好比是打电话&#xff1a;面向连接的&#xff0c;点对点的通信&#xff0c;高可靠的&#xff0c;效率比较低&#xff0c;占用的系统资源比较多。 UDP User Datagram…

香橙派AIpro如何赋能AI+边缘流媒体设备

文章目录 &#xff08;一&#xff09;前言&#xff08;二&#xff09;AI边缘流媒体设备展示&#xff08;三&#xff09;赋能AI边缘流媒体设备1、准备开发环境2、在板子中下载编译安装SRS3、基本推拉流测试4、多路推流性能测试 &#xff08;四&#xff09;一些注意事项1、开发板…

ESP32-C3模组上跑通MD5(3)

接前一篇文章:ESP32-C3模组上跑通MD5(2) 本文内容参考: ESP32 MD5 代码_esp32 idf md5开启-CSDN博客 ESP32学习笔记(47)——加密算法AES/MD5/SHA_esp32 aes-CSDN博客 特此致谢! 上一回解析了ESP-IDF中组件(components)中MD5相关的例程,也给出了笔者参照该例程自行…

springboot 篮球馆管理系统-计算机毕业设计源码21945

目 录 摘要 1 绪论 1.1选题背景 1.2研究意义 1.3论文结构与章节安排 2 篮球馆管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 …

【笔记】字符串相似度代码分享

目录 一、算法介绍1、算法1&#xff09;基于编辑距离2&#xff09;基于标记3&#xff09;基于序列4&#xff09;基于压缩5&#xff09;基于发音6&#xff09;简单算法 2、安装 二、代码demo1、Hamming 距离2、Levenshtein 距离3、Damerau-Levenshtein距离4、Jaro 相似度5、Jaro…

ctfshow sql注入

开启其他注入 web221 limit注入 给出查询语句 以及过滤逻辑为空 获取数据库名即可 limit 用于控制返回结果行数 limit后面似乎只能跟PROCEDURE ANALYSE( ) 函数了 PROCEDURE ANALYSE( ) 函数用于分析查询结果的函数 参数是用来控制函数的 这个参数的位置 可以放入报错函数 原…

MySQL—创建查看删除备份恢复数据库

创建数据库 创建数据库 LLF_DB01CREATE DATABASE LLF_DB01删除数据库DROP DATABASE LLF_DB01创建一个使用utf8字符集的数据库并带校对规则的数据库CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin 查看、删除数据库 显示所有的数据库SHOW DATABASES显示数据库…

AI PC(智能电脑)技术分析

一文看懂AI PC&#xff08;智能电脑&#xff09; 2024年&#xff0c;英特尔、英伟达等芯片巨头革新CPU技术&#xff0c;融入AI算力&#xff0c;为传统PC带来质的飞跃&#xff0c;引领智能计算新时代。 2024年&#xff0c;因此被叫作人工智能电脑&#xff08;AI PC&#xff09;…

归一化(normalization)

归一化是指对数据进行标准化处理&#xff0c;使其均值为0&#xff0c;方差为1&#xff0c;从而消除不同特征量纲的影响&#xff0c;使得不同特征之间可以进行比较和计算。对于时间序列数据&#xff0c;归一化的目的是减弱非平稳性&#xff0c;使得模型能够更好地学习数据的规律…