K8s(九)—volume.md
目录
- volume
- configMap
- 介绍
- 官网
- 例子
- 基于文件生成 ConfigMap
- 使用 ConfigMap 数据定义容器环境变量
- 使用单个 ConfigMap 中的数据定义容器环境变量
- EmptyDir
- hostPath
- hostPath 配置示例
- nfs
- persistentVolumeClaim
volume
https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/
在Kubernetes中,Volume是一种抽象的概念,用于将持久化存储附加到Pod中,以便容器可以读取和写入数据。Volumes提供了一种在Pod之间共享数据、将数据持久化存储以及将数据从主机挂载到容器中的方法。以下是关于Kubernetes中Volume的详细解释:
Volume的基本概念:
-
•
容器存储抽象: Volume是Kubernetes的容器存储抽象,它使容器能够在不同的Pod之间共享数据,或者将数据持久化存储到底层存储设备上。
-
•
生命周期绑定: Volume的生命周期与Pod紧密绑定,当Pod被删除时,与之关联的Volume也会被删除(除非它被配置为保留)。
-
•
挂载点: Volume在Pod中通过一个或多个挂载点(mount points)进行访问。容器可以将这些挂载点用作文件或目录的存储位置。
内置Volume类型:
Kubernetes支持多种内置Volume类型,每种类型都有不同的用途和特性,包括但不限于:
-
•
EmptyDir: 空目录,生命周期与Pod相同,适合临时存储。
-
•
HostPath: 主机文件系统的目录,适合与主机共享文件。
-
•
PersistentVolumeClaim (PVC): PVC允许动态分配持久卷,并且可以用于数据持久性存储。
-
•
ConfigMap和Secret: 将ConfigMap和Secret数据作为文件或环境变量挂载到容器中。
持久卷(Persistent Volumes)和持久卷声明(Persistent Volume Claims):
-
•
持久卷(PV)是集群级别的存储资源,它们独立于Pod的生命周期。
-
•
持久卷声明(PVC)是Pod对PV的请求。PVC允许开发人员声明他们需要多少存储以及存储的属性(例如访问模式和存储类)。
-
•
PVC与PV进行绑定,Pod再引用PVC,使得数据持久化存储可以动态地分配给Pod。
存储类(Storage Class):
-
•
存储类是一种用于动态分配PV的资源管理策略。它允许管理员定义不同类型的存储(如本地存储、网络存储等)以及各种参数。
-
•
当PVC没有指定存储卷时,存储类可以根据要求动态创建PV。
Volume的使用场景:
-
•
共享配置文件: 使用ConfigMap Volume或Secret Volume将配置文件共享给多个容器。
-
•
数据持久化: 使用PersistentVolume和PersistentVolumeClaim来实现数据的持久性存储,例如数据库数据。
-
•
临时存储: 使用EmptyDir Volume来创建在Pod之间共享的临时目录。
-
•
日志和监控数据: 使用HostPath Volume将日志文件或监控数据存储到宿主主机上以供分析。
Volume的声明:
-
•
在Pod的定义中,可以通过
volumes
字段声明要使用的Volume。 -
•
在容器的定义中,可以通过
volumeMounts
字段将Volume挂载到容器的指定路径。
示例:
以下是一个使用PersistentVolumeClaim和Volume的示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:volumes:- name: my-storagepersistentVolumeClaim:claimName: my-pvccontainers:- name: my-containerimage: my-imagevolumeMounts:- mountPath: /dataname: my-storage
在此示例中,我们创建了一个PersistentVolumeClaim(my-pvc),然后在Pod中使用该PVC来创建一个Volume,并将它挂载到容器的/data
路径上。
总之,Kubernetes的Volume是一种强大的机制,用于处理容器存储需求,它提供了多种选项,使得在容器化应用程序中管理数据变得更加灵活和可靠。不同类型的Volume适用于不同的用例,根据应用程序的需求来选择适当的Volume类型是非常重要的。
configMap
介绍
在Kubernetes中,ConfigMap(配置映射)是一种用于将配置数据以键值对的形式存储并注入到容器中的资源。ConfigMap允许将配置信息从容器镜像中分离出来,从而使配置更易于管理和修改。以下是关于Kubernetes中ConfigMap的详细解释:
ConfigMap的基本概念:
**配置数据存储**: ConfigMap用于存储配置数据,这些数据通常以**键值对**的形式存在。键值对中的键(key)是配置的名称,而值(value)是配置的内容。
**解耦配置**: ConfigMap将配置数据从应用程序容器中分离出来,从而使得应用程序可以更容易地配置和修改,而不需要重新构建镜像。
**不敏感数据**: ConfigMap通常用于存储非敏感数据,如应用程序配置、环境变量、命令行参数等。
创建和管理ConfigMap:
**命令行创建**:可以使用`kubectl create configmap`命令或从YAML文件创建ConfigMap。例如:```kubectl create configmap my-config --from-literal=KEY1=VALUE1 --from-literal=KEY2=VALUE2```
**YAML定义**:以下是一个ConfigMap的YAML示例:```apiVersion: v1kind: ConfigMapmetadata:name: my-configdata:KEY1: VALUE1KEY2: VALUE2```
**从文件创建**:还可以从文件创建ConfigMap,例如从配置文件中读取键值对列表。
将ConfigMap注入到Pod中:
ConfigMap可以通过以下方式注入到Pod中:- **作为环境变量**: 使用`env`字段将ConfigMap的数据注入为容器的环境变量。- **作为卷(Volume)**: 将ConfigMap数据作为文件挂载到容器中的某个路径上,容器可以读取这些文件作为配置文件。
示例:以下是一个将ConfigMap作为环境变量注入到Pod中的示例:```apiVersion: v1kind: Podmetadata:name: my-podspec:containers:- name: my-containerimage: my-imageenv:- name: KEY1valueFrom:configMapKeyRef:name: my-configkey: KEY1```
使用场景:
**应用程序配置**: 将应用程序的配置信息(如数据库连接字符串、端口号、日志级别等)存储在ConfigMap中,使应用程序更易于配置和管理。
**环境变量注入**: 使用ConfigMap将环境变量注入到容器中,以自定义容器的行为。
**配置文件挂载**: 将配置文件存储在ConfigMap中,并将其作为卷挂载到容器中,以供应用程序读取。
更新和维护:
ConfigMap的数据可以随时更新,Kubernetes会自动将更新后的数据应用到Pod中。
当ConfigMap更新时,使用该ConfigMap的Pod可以实时感知到这些变化。
总之,ConfigMap是Kubernetes中一种重要的资源,用于存储和注入配置数据,以实现应用程序的可配置性和可维护性。通过将配置数据与容器镜像分离,ConfigMap使得应用程序的配置更加灵活,允许在不重新构建容器镜像的情况下进行配置更改。这在微服务和容器化应用程序中非常有用,因为它使配置管理变得更加简单且易于维护。
官网
configMap
卷提供了向 Pod 注入配置数据的方法。 ConfigMap 对象中存储的数据可以被 configMap
类型的卷引用,然后被 Pod 中运行的容器化应用使用。
引用 configMap 对象时,你可以在卷中通过它的名称来引用。 你可以自定义 ConfigMap 中特定条目所要使用的路径。 下面的配置显示了如何将名为 log-config
的 ConfigMap 挂载到名为 configmap-pod
的 Pod 中:
apiVersion: v1
kind: Pod
metadata:name: configmap-pod
spec:containers:- name: testimage: busybox:1.28volumeMounts:- name: config-volmountPath: /etc/configvolumes:- name: config-volconfigMap:name: log-configitems:- key: log_levelpath: log_level
log-config
ConfigMap 以卷的形式挂载,并且存储在 log_level
条目中的所有内容都被挂载到 Pod 的 /etc/config/log_level
路径下。 请注意,这个路径来源于卷的 mountPath
和 log_level
键对应的 path
。
说明:
在使用 ConfigMap 之前你首先要创建它。
ConfigMap 总是以 readOnly
的模式挂载。
容器以 subPath
卷挂载方式使用 ConfigMap 时,将无法接收 ConfigMap 的更新。
文本数据挂载成文件时采用 UTF-8 字符编码。如果使用其他字符编码形式,可使用 binaryData
字段。
例子
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/
# 将示例文件下载到 `/root/configmap/` 目录
wget https://kubernetes.io/examples/configmap/game.properties wget https://kubernetes.io/examples/configmap/ui.properties# 创建 ConfigMap
kubectl create configmap game-config --from-file=/root/configmap/
[root@k8smaster configmap]# kubectl get cm
NAME DATA AGE
game-config 2 39s
kube-root-ca.crt 1 2d23h
[root@k8smaster configmap]# kubectl create configmap game-config --from-file=/root/configmap/
configmap/game-config created
[root@k8smaster configmap]# kubectl get gf
error: the server doesn't have a resource type "gf"
[root@k8smaster configmap]# kubectl get cm
NAME DATA AGE
game-config 2 39s
kube-root-ca.crt 1 2d23h
[root@k8smaster configmap]# kubectl describe configmaps game-config
Name: game-config
Namespace: default
Labels: <none>
Annotations: <none>Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNiceEvents: <none>
[root@k8smaster configmap]# kubectl get configmaps game-config -o yaml >/root/configmap/game.yaml
[root@k8smaster configmap]# ls
game.properties game.yaml ui.properties
基于文件生成 ConfigMap
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: game-config-4files:- configmap/game.properties
EOF
应用(Apply)kustomization 目录创建 ConfigMap 对象:
kubectl apply -k .
[root@k8smaster ~]# kubectl get cm
NAME DATA AGE
game-config 2 8m9s
game-config-4-m9dm2f92bt 1 59s
kube-root-ca.crt 1 2d23h
[root@k8smaster ~]# kubectl describe configmaps/game-config-4-m9dm2f92bt
Name: game-config-4-m9dm2f92bt
Namespace: default
Labels: <none>
Annotations: <none>Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
Events: <none>
使用 ConfigMap 数据定义容器环境变量
使用单个 ConfigMap 中的数据定义容器环境变量
-
•
在 ConfigMap 中将环境变量定义为键值对:
kubectl create configmap special-config --from-literal=special.how=very
这是一个
kubectl
命令,用于在Kubernetes集群中创建一个名为special-config
的ConfigMap,并将一个键值对添加到该ConfigMap中。具体来说,这个命令的含义如下:
•
kubectl create configmap special-config
:这部分命令告诉Kubernetes创建一个名为special-config
的ConfigMap。•
--from-literal=special.how=very
:这部分是kubectl
命令的选项,用于指定要添加到ConfigMap中的数据。具体来说,它包含了一个键值对,键是special.how
,值是very
。这意味着创建的ConfigMap中将包含一个键为special.how
,值为very
的项。运行这个命令后,将在Kubernetes集群中创建一个名为
special-config
的ConfigMap,该ConfigMap包含一个键为special.how
,值为very
的配置项。这个ConfigMap可以被Pod引用,以便在容器中使用这个配置项的值作为环境变量、命令参数或其他配置选项。例如,可以在上一个回答中提到的Pod配置中引用这个ConfigMap,将special.how
的值分配给SPECIAL_LEVEL_KEY
环境变量。
[root@k8smaster ~]# kubectl get cm
NAME DATA AGE
game-config 2 12m
game-config-4-m9dm2f92bt 1 5m7s
kube-root-ca.crt 1 2d23h
special-config 1 16s
[root@k8smaster ~]# kubectl describe configmaps/special-config
Name: special-config
Namespace: default
Labels: <none>
Annotations: <none>Data
====
special.how:
----
very
Events: <none>
-
•
将 ConfigMap 中定义的
special.how
赋值给 Pod 规约中的SPECIAL_LEVEL_KEY
环境变量。创建
pods/pod-single-configmap-env-variable.yaml
[root@k8smaster configmap]# ls game.properties game.yaml pod-single-configmap-env-variable.yaml ui.properties[root@k8smaster configmap]# wget https://kubernetes.io/examples/pods/pod-single-configmap-env-variable.yaml --no-check-certificate
apiVersion: v1 kind: Pod metadata:name: dapi-test-pod spec:containers:- name: test-containerimage: busyboximagePullPolicy: IfNotPresentcommand: [ "/bin/sh"]args: ["-c","env ;while true; do echo hello; sleep 100;done"]env:# Define the environment variable- name: SPECIAL_LEVEL_KEYvalueFrom:configMapKeyRef:# The ConfigMap containing the value you want to assign to SPECIAL_LEVEL_KEYname: special-config# Specify the key associated with the valuekey: special.howrestartPolicy: Never
这是一个Kubernetes Pod的配置文件,用于创建一个名为 “dapi-test-pod” 的Pod。以下是配置文件中各部分的详细解释:
-
apiVersion 和 kind:
-
•
apiVersion: v1
表示使用Kubernetes的v1版本API。 -
•
kind: Pod
指定创建的资源类型为Pod。
-
metadata:
-
•
name: dapi-test-pod
定义了Pod的名称为 “dapi-test-pod”。
-
spec:
-
•
containers
:这是一个容器列表,用于定义Pod中的容器。-
•
name: test-container
:定义了容器的名称为 “test-container”。 -
•
image: busybox
:指定了容器要使用的镜像,这里是一个名为 “busybox” 的轻量级Linux发行版。 -
•
imagePullPolicy: IfNotPresent
:这表示如果本地已经存在相同的镜像,就使用它,否则不拉取新的镜像。 -
•
command
和args
:这两个字段定义了容器的启动命令和参数。-
•
command: [ "/bin/sh"]
:指定容器要执行的命令为 “/bin/sh”。 -
•
args: ["-c","env ;while true; do echo hello; sleep 100;done"]
:这些参数将传递给命令,容器将在启动后运行/bin/sh -c "env ;while true; do echo hello; sleep 100;done"
这个Shell命令。
-
-
•
env
:这里定义了容器的环境变量。-
•
name: SPECIAL_LEVEL_KEY
:指定环境变量的名称为 “SPECIAL_LEVEL_KEY”。 -
•
valueFrom
:这里使用了valueFrom
来从ConfigMap引用值。-
•
configMapKeyRef
:这是引用ConfigMap的方式。-
•
name: special-config
:指定了ConfigMap的名称为 “special-config”。 -
•
key: special.how
:指定了要引用的ConfigMap中的键为 “special.how”。
-
-
-
-
-
•
restartPolicy: Never
:定义了Pod的重启策略为 “Never”,这意味着一旦容器退出,Pod将不会自动重启。
这个配置文件创建了一个Pod,其中包含一个名为 “test-container” 的容器,该容器使用BusyBox镜像,运行一个无限循环的Shell命令,每隔100秒输出 “hello”。此容器还引用了一个名为 “special-config” 的ConfigMap,并将其中的 “special.how” 键的值分配给环境变量 “SPECIAL_LEVEL_KEY”。这个配置演示了如何在Pod中使用ConfigMap来配置容器的环境变量。
[root@k8smaster configmap]# kubectl get pod NAME READY STATUS RESTARTS AGE dapi-test-pod 1/1 Running 0 21s test-pd 1/1 Running 0 55m
[root@k8smaster configmap]# kubectl logs dapi-test-pod *** SPECIAL_LEVEL_KEY=very ***
现在,Pod 的输出包含环境变量
SPECIAL_LEVEL_KEY=very
。 -
EmptyDir
apiVersion: v1
kind: Pod
metadata:name: test-pd
spec:containers:- image: registry.k8s.io/test-webservername: test-containervolumeMounts:- mountPath: /cachename: cache-volumevolumes:- name: cache-volumeemptyDir:sizeLimit: 500Mi
启用pod
[root@k8smaster volume]# kubectl apply -f nginx.yaml
pod/test-pd created
[root@k8smaster volume]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-pd 1/1 Running 0 6s
进入容器里面,进入卷里面创建文件
[root@k8smaster volume]# kubectl exec -it test-pd -- bash
root@test-pd:/# ls
bin cache docker-entrypoint.d etc lib media opt root sbin sys usr
boot dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
root@test-pd:/# cd cache/
root@test-pd:/cache# ls
root@test-pd:/cache# mkdir test
查找pod调度到那个node上
[root@k8smaster volume]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-pd 1/1 Running 0 85s 10.244.185.201 k8snode2 <none> <none>
在k8snode2查找卷
[root@k8snode2 ~]# find / -name "test"
***
/var/lib/kubelet/pods/bfe54579-84e1-4ef2-b85e-722b84d848d1/volumes/kubernetes.io~empty-dir/cache-volume/test
***
[root@k8snode2 ~]# cd /var/lib/kubelet/pods/bfe54579-84e1-4ef2-b85e-722b84d848d1/volumes/kubernetes.io~empty-dir/cache-volume/test
[root@k8snode2 test]# ls
[root@k8snode2 test]# cd ..
[root@k8snode2 cache-volume]# ls
test
hostPath
警告:
HostPath 卷存在许多安全风险,最佳做法是尽可能避免使用 HostPath。 当必须使用 HostPath 卷时,它的范围应仅限于所需的文件或目录,并以只读方式挂载。
如果通过 AdmissionPolicy 限制 HostPath 对特定目录的访问,则必须要求 volumeMounts
使用 readOnly
挂载以使策略生效。
hostPath
卷能将主机节点文件系统上的文件或目录挂载到你的 Pod 中。 虽然这不是大多数 Pod 需要的,但是它为一些应用程序提供了强大的逃生舱。
例如,hostPath
的一些用法有:
-
•
运行一个需要访问 Docker 内部机制的容器;可使用
hostPath
挂载/var/lib/docker
路径。 -
•
在容器中运行 cAdvisor 时,以
hostPath
方式挂载/sys
。 -
•
允许 Pod 指定给定的
hostPath
在运行 Pod 之前是否应该存在,是否应该创建以及应该以什么方式存在。
除了必需的 path
属性之外,你可以选择性地为 hostPath
卷指定 type
。
支持的 type
值如下:
取值 | 行为 |
---|---|
空字符串(默认)用于向后兼容,这意味着在安装 hostPath 卷之前不会执行任何检查。 | |
DirectoryOrCreate | 如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 kubelet 相同的组和属主信息。 |
Directory | 在给定路径上必须存在的目录。 |
FileOrCreate | 如果在给定路径上什么都不存在,那么将在那里根据需要创建空文件,权限设置为 0644,具有与 kubelet 相同的组和所有权。 |
File | 在给定路径上必须存在的文件。 |
Socket | 在给定路径上必须存在的 UNIX 套接字。 |
CharDevice | 在给定路径上必须存在的字符设备。 |
BlockDevice | 在给定路径上必须存在的块设备。 |
当使用这种类型的卷时要小心,因为:
-
•
HostPath 卷可能会暴露特权系统凭据(例如 Kubelet)或特权 API(例如容器运行时套接字),可用于容器逃逸或攻击集群的其他部分。
-
•
具有相同配置(例如基于同一 PodTemplate 创建)的多个 Pod 会由于节点上文件的不同而在不同节点上有不同的行为。
-
•
下层主机上创建的文件或目录只能由 root 用户写入。 你需要在特权容器中以 root 身份运行进程,或者修改主机上的文件权限以便容器能够写入
hostPath
卷。
hostPath 配置示例
apiVersion: v1
kind: Pod
metadata:name: test-pd-2
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: ydhnginx-2volumeMounts:- mountPath: /ydhdataname: cache-volume-2volumes:- name: cache-volume-2hostPath:# 宿主上目录位置path: /data# 此字段为可选type: DirectoryOrCreate
进入容器创建文件
[root@k8smaster volume]# kubectl exec -it test-pd-2 -- bash
root@test-pd-2:/# ls
bin docker-entrypoint.d home media proc sbin tmp ydhdata
boot docker-entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
root@test-pd-2:/# cd ydhdata/
root@test-pd-2:/ydhdata# mkdir ydhtest
[root@k8snode2 /]# cd data/
[root@k8snode2 data]# ls
ydhtest
nfs
nfs
卷能将 NFS (网络文件系统) 挂载到你的 Pod 中。 不像 emptyDir
那样会在删除 Pod 的同时也会被删除,nfs
卷的内容在删除 Pod 时会被保存,卷只是被卸载。 这意味着 nfs
卷可以被预先填充数据,并且这些数据可以在 Pod 之间共享。
apiVersion: v1
kind: Pod
metadata:name: test-pd
spec:containers:- image: registry.k8s.io/test-webservername: test-containervolumeMounts:- mountPath: /my-nfs-dataname: test-volumevolumes:- name: test-volumenfs:server: my-nfs-server.example.compath: /my-nfs-volumereadOnly: true
说明:
在使用 NFS 卷之前,你必须运行自己的 NFS 服务器并将目标 share 导出备用。
还需要注意,不能在 Pod spec 中指定 NFS 挂载可选项。 可以选择设置服务端的挂载可选项,或者使用 /etc/nfsmount.conf。 此外,还可以通过允许设置挂载可选项的持久卷挂载 NFS 卷。
如需了解用持久卷挂载 NFS 卷的示例,请参考 NFS 示例。
persistentVolumeClaim
persistentVolumeClaim
卷用来将持久卷(PersistentVolume)挂载到 Pod 中。 持久卷申领(PersistentVolumeClaim)是用户在不知道特定云环境细节的情况下“申领”持久存储(例如 GCE PersistentDisk 或者 iSCSI 卷)的一种方法。
更多详情请参考持久卷。
相关文章:
K8s(九)—volume.md
目录 volumeconfigMap介绍官网例子基于文件生成 ConfigMap使用 ConfigMap 数据定义容器环境变量使用单个 ConfigMap 中的数据定义容器环境变量 EmptyDirhostPathhostPath 配置示例 nfspersistentVolumeClaim volume https://kubernetes.io/zh-cn/docs/concepts/storage/volume…...
python N个人围成一圈报数 报到3出列 直到只剩下最后一人
公司聚会上,N名员工围成一圈,按1—N顺序编号(要求N<40)。 然后从队头开始1,2,3报数,数3的出列,剩下的员工再从头开始1,2,3报数……直到剩下最后一名员工时, 这员工就是…...
RFC4861 中文版下
10. 协议常量 路由器常量: MAX_INITIAL_RTR_ADVERT_INTERVAL 16 秒MAX_INITIAL_RTR_ADVERTISEMENTS 3 次发送MAX_FINAL_RTR_ADVERTISEMENTS 3 次发送MIN_DELAY_BETWEEN_RAS 3 秒MAX_RA_DELAY_TIME .5 秒主机常量: MAX_RTR_SOLICITATION_…...
用友时空 KSOA 多处SQL注入漏洞复现
0x01 产品简介 用友时空 KSOA 是建立在 SOA 理念指导下研发的新一代产品,是根据流通企业前沿的 IT 需求推出的统一的IT基础架构,它可以让流通企业各个时期建立的 IT 系统之间彼此轻松对话。 0x02 漏洞概述 用友时空 KSOA 系统 PayBill、QueryService、linkadd.jsp等接口处…...
[AutoSar]基础部分 RTE 介绍
目录 关键词平台说明一、什么是RTE二、RTE的主要功能 关键词 嵌入式、C语言、autosar、EcuM、wakeup、flex 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C编译器HighTec (GCC) 一、什么是RTE RTE(Run-Time Environment&…...
Logstash访问安全访问Elasticsearch集群
生成logstash证书: opensal pkcs12 -in elastic-stack-ca.p12 -clcerts -nokeys > logafash.cer openssl x509 -in logstash.cer -out logstash.pem 编排配置文件...
加密的艺术:对称加密的奇妙之处(下)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测
异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测 目录 异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测效果一览基本介绍模型准备模型设计参考资料效果一览 基本介绍 训练一个双向 LSTM 自动编码器来检测机器是否正常工作。 自动编码器接受…...
2023“楚怡杯”湖南省赛“信息安全管理与评估“--数字取证调查(高职组)
2023“楚怡杯”湖南省“信息安全管理与评估”(高职组)任务书 2023“楚怡杯”湖南省“信息安全管理与评估”(高职组)任务书第一阶段竞赛项目试题第二阶段竞赛项目试题第二部分 数字取证调查:需要环境私聊博主:2023“楚怡杯”湖南省“信息安全管理与评估”(高职组)任务书…...
C++ list常用操作
目录 一、介绍 二、list的常用操作 1、构造 2、迭代器 3、元素访问 4、容量操作 一、介绍 std::list文档链接 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个…...
MILP加速运算技巧——模型对称性的预处理
文章目录 整数规划的对称性什么是对称性对称性的影响 对称性的预处理方法 整数规划的对称性 什么是对称性 许多整数规划问题存在对称性,这种对称性是指问题解空间的对称,即在对称的解空间当中解的优化目标值上是相同的。这种对称性并不会改变问题的最优…...
JavaScript中的生成器与迭代器详解
一、迭代器与可迭代对象 1.什么是迭代器 迭代器(iterator),使用户在容器对象(container,例如链表或数组)上遍访的对象,使用该接口无需关心对象的内部实现细节。 其行为像数据库中的光标&…...
WebLangChain_ChatGLM:结合 WebLangChain 和 ChatGLM3 的中文 RAG 系统
WebLangChain_ChatGLM 介绍 本文将详细介绍基于网络检索信息的检索增强生成系统,即 WebLangChain。通过整合 LangChain,成功将大型语言模型与最受欢迎的外部知识库之一——互联网紧密结合。鉴于中文社区中大型语言模型的蓬勃发展,有许多可供利…...
hive常用SQL函数及案例
1 函数简介 Hive会将常用的逻辑封装成函数给用户进行使用,类似于Java中的函数。 好处:避免用户反复写逻辑,可以直接拿来使用。 重点:用户需要知道函数叫什么,能做什么。 Hive提供了大量的内置函数,按照其特…...
分页操作中使用LIMIT和OFFSET后出现慢查询的原因分析
事情经过 最近在做批量数据处理的相关业务,在和下游对接时,发现拉取他们的业务数据刚开始很快,后面会越来越慢,40万数据一个小时都拉不完。经过排查后,发现对方用了很坑的分页查询方式 —— LIMIT OFFSET,…...
Java八股文面试全套真题【含答案】- Redis篇
请看下面列举的50个关于Redis的经典面试问题和简短答案: Redis是什么?简要介绍一下Redis的特点。 Redis是一个开源的高性能键值存储数据库,支持多种数据结构,如字符串、列表、集合、哈希和有序集合等。 特点包括快速、可持久化、支…...
【C++11特性篇】一文助小白轻松理解 C++中的【左值&左值引用】【右值&右值引用】
前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.【左值&左值引用】&…...
动态规划——OJ题(一)
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、第N个泰波那契数1、题目讲解2、思路讲解3、代码实现 二、三步问题1、题目讲解2、思路讲解…...
六:爬虫-数据解析之BeautifulSoup4
六:bs4简介 基本概念: 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据官方解释如下: Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。 它是一个工具箱…...
音频筑基:总谐波失真THD+N指标
音频筑基:总谐波失真THDN指标 THDN含义深入理解 在分析音频信号中,THDN指标是我们经常遇到的概念,这里谈谈自己的理解。 THDN含义 首先,理解THD的定义: THD,Total Harmonic Distortion,总谐波…...
自动驾驶技术:驶向未来的智能之路
导言 自动驾驶技术正引领着汽车产业向着更安全、高效、智能的未来演进。本文将深入研究自动驾驶技术的核心原理、关键技术、应用场景以及对交通、社会的深远影响。 1. 简介 自动驾驶技术是基于先进传感器、计算机视觉、机器学习等技术的创新,旨在实现汽车在不需要人…...
TIGRE: a MATLAB-GPU toolbox for CBCT image reconstruction
TIGRE: 用于CBCT图像重建的MATLAB-GPU工具箱 论文链接:https://iopscience.iop.org/article/10.1088/2057-1976/2/5/055010 项目链接:https://github.com/CERN/TIGRE Abstract 本文介绍了基于层析迭代GPU的重建(TIGRE)工具箱,这是一个用于…...
我的NPI项目之Android 安全系列 -- EMVCo
最近一直在和支付有关的内容纠缠,原来我负责的产品后面还要过EMVCo的认证。于是,就网上到处找找啥事EMVCo,啥是EMVCo,啥是EMVCo。 于是找到了一个神奇的个人网站:Ganeshji Marwaha 虽然时间有点久远,但是用…...
vue中实现使用相框点击拍照,canvas进行前端图片合并下载
拍照和相框合成,下载图片dome 一、canvas介绍 Canvas是一个HTML5元素,它提供了一个用于在网页上绘制图形、图像和动画的2D渲染上下文。Canvas可以用于创建各种图形,如线条、矩形、圆形、文本等,并且可以通过JavaScript进行编程操作。 Canvas元素本身是一个矩形框,可以通…...
边缘检测@获取labelme标注的json黑白图掩码mask
import cv2 as cv import numpy as np import json import os from PIL import Imagedef convertPolygonToMask(jsonfilePath):...
嵌入式培训-数据结构-day23-线性表
线性表 线性表是包含若干数据元素的一个线性序列 记为: L(a0, ...... ai-1, ai, ai1 ...... an-1) L为表名,ai (0≤i≤n-1)为数据元素; n为表长,n>0 时,线性表L为非空表,否则为空表。 线性表L可用二元组形式描述…...
C# DotNetCore AOP简单实现
背景 实际开发中业务和日志尽量不要相互干扰嵌套,否则很难维护和调试。 示例 using System.Reflection;namespace CSharpLearn {internal class Program{static void Main(){int age 25;string name "bingling";Person person new(age, name);Conso…...
19.Tomcat搭建
Tomcat 简介 Tomcat的安装和启动 前置条件 • JDK 已安装(JAVA_HOME环境变量已被成功配置) Windows 下安装 访问 http://tomcat.apache.org ⇒ 左侧边栏 “Download” 2. 解压缩下载的文件到 “D:\tomcat”, tomcat的内容最终被解压到 “D:\tomcat\apache-tomcat-9.0.84” 3.…...
HarmonyOS云开发基础认证考试满分答案(100分)【全网最全-不断更新】【鸿蒙专栏-29】
系列文章: HarmonyOS应用开发者基础认证满分答案(100分) HarmonyOS应用开发者基础认证【闯关习题 满分答案】 HarmonyOS应用开发者高级认证满分答案(100分) HarmonyOS云开发基础认证满分答案(100分…...
Unity项目里Log系统该怎么设计
其实并没有想完整就设计一个好用的Log系统,然后发出来。记录这个的原因,是在书里看到这么一句话,Log会消耗资源,特别是写文件,因此可以设置一个Log缓冲区,等缓冲区满了再一次性写入文件,以节省资…...
哪个平台免费招人最快/搜索引擎优化的方式
参考链接: 11周精通python计划(完结) 总结: # 演示类的使用 # 1.类属性, 类对象的属性, 由所有实例对象所共享,通过(类名.属性)或者(实例名.属性)来访问 # 2.实例属性, 实例对象的属性, 由各实例对象所独享,通过(实例名.属性)来访问代码实验展示: # 演…...
江门电商网站设计培训/帮人推广的平台
本文章首发于浩瀚先森博客,地址: http://www.guohao1206.com/2016/08/23/967.html samba时一款为了实现linux系统中的文件能在windows系统中正常访问的软件,分为服务器端和客户端,按照下列方法安装samba服务器即可在windows系统中访问linux系统中的文件。…...
网站做的优化 怎么排名靠后了/nba排名2021最新排名
Pig...
徐州市水利工程建设有限公司网站/网络营销公司好不好
1.什么是分布式锁 线程锁主要用来给方法,代码加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行改方法或改代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,进程锁是为了控制…...
如何登录网站备案/友情链接怎么购买
转自:http://blog.csdn.net/stormbjm/article/details/9086163 1、添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户#passwd tommy //修改密码 Changing password for user tom…...
wordpress _the_logo/全球搜官网
动态加载技术(插件化)系列已经坑了有一段时间了,不过UP主我并没有放弃治疗哈,相信在不就的未来就可以看到“系统Api Hook模式”和插件化框架Frontia的更新了。今天要讲的是动态加载技术的亲戚 —— MultiDex。他们的核心原理之一都…...