认识K8s集群的声明式资源管理方法

前言

Kubernetes 集群的声明式资源管理方法是当今云原生领域中的核心概念之一,使得容器化应用程序的部署和管理变得更加高效和可靠。本文将认识了解 Kubernetes 中声明式管理的相关理念、实际应用以及优势。

目录

一、管理方法介绍

1. 概述

2. 语法格式

2.1 管理资源对象格式

2.2 YAML 语法格式

3. yaml 文件组成部分  

4. 如何快速编写 yaml 

5. 资源配置清单

5.1 查看资源配置清单

5.2 解释资源配置清单

6. 修改资源配置清单并应用

6.1 离线修改

6.2 在线修改

7. 查看 api 资源版本标签 

8. 删除资源配置清单

二、编写 ymal 文件

1. 部署 nginx-yaml 配置

1.1 编辑清单 yaml 文件

1.2 创建资源对象

1.3 创建 service 服务对外提供访问

1.4 创建 svc 资源对象

1.5 访问测试

1.6 port 端口类型

2. 部署 redis-yaml 配置

2.1 编辑清单、service yaml 文件

2.2 创建资源对象

2.3 连接 pod 实例

3. 部署 mysql-yaml 配置

3.1 生成模板 yaml 文件

3.2 创建资源

3.3 访问验证


一、管理方法介绍

1. 概述

通过使用 yaml 或 josn 文件对资源配置,然后再实现对资源的管理。

适合于对资源的修改操作

声明式资源管理方法依赖于资源配置清单文件对资源进行管理;资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)

对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里

2. 语法格式

2.1 管理资源对象格式

  • JSON 格式:主要用于 api 接口之间消息的传递
  • YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读

2.2 YAML 语法格式

  • 大小写敏感
  • 使用缩进表示层级关系
  • 不支持Tab键制表符缩进,只使用空格缩进
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
  • 符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等
  • “---”表示YAML格式,一个文件的开始,用于分隔文件间
  • “#”表示注释 

kubectl create -f xxxx.yaml 

create 命令用于根据提供的配置文件创建新的 Kubernetes 资源。

  • 如果资源尚不存在,Kubernetes 会根据 YAML 文件中的定义新建对象(如 Deployments、Services、Pods 等)。
  • 如果资源已经存在,create 命令不会更改现有资源的状态,而是会报错,因为它旨在创建新资源而非修改现有资源。 

kubectl apply -f xxxx.yaml

apply 命令也用于根据配置文件创建或更新资源。

  • 与 create 不同的是,apply 会比较配置文件中定义的资源状态与集群中实际资源的状态。
  • 如果资源不存在,它将创建资源;
  • 如果资源已存在,它会尝试将实际资源的状态更新为配置文件中描述的状态。
  • 这意味着你可以多次运行 apply 来更新资源。

kubectl delete -f xxxx.yaml 

delete 命令用于根据配置文件删除 Kubernetes 资源;此命令非常直接,用于清理不再需要的资源。

  • 当你提供一个之前用于创建或更新资源的 YAML 文件时,kubectl 会识别出文件中定义的所有资源,并将其从集群中删除;
  • 这可以是单个资源,也可以是多个相关联的资源集合。 

3. yaml 文件组成部分  

在 K8s 中,控制器的定义是通过 YAML 文件完成的,该文件描述了资源的预期状态。这包括控制器的类型:如Deployment、statefulSet、Service 副本数量,使用的容器镜像,以及任何配置参数或环境变量。每一个控制器通常对应一种资源类型,如 Deployment、Service 等等。

在YAML中,我们可以指定这些资源的状态以及如何管理它们。Deployment 控制器在 YAML 文件中的定义可能包括:

  • metadata:例如控制器的名称和命名空间
  • spec:例如应用的副本数量,以及图像的 URL
  • selector:例如确定哪些 Pods 应由该控制器管理的标签
  • template:例如 Pod 的基本设计

4. 如何快速编写 yaml 

① 使用 kubectl create 命令生成 yaml 文件导出

示例:
kubectl create deployment nginx svc -o yaml > nginx-svc.yaml

② 使用 kubectl get 命令导出 yaml 文件

示例:
kubectl get svc nginx-service -o yaml > my-svc.yaml
或
kubectl edit svc nginx-service  #复制配置,再粘贴到新文件

③ 官网或者其他网站下载 yaml 模版,然后进行修改快速的方法

官网获取网址:Pods | Kubernetes

GITHUB获取地址:kubernetes/hack/testdata at master · kubernetes/kubernetes · GitHub

④ 查看字段帮助信息,可一层层的查看相关资源对象的帮助信息

kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers

⑤ 模拟运行 kubectl 陈述式创建资源的命令获取 

用 --dry-run 命令生成:
kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml

5. 资源配置清单

资源配置清单是指用于定义 K8s 资源对象的配置文件。这些配置文件通常以 YAML 或 JSON 格式编写,用于描述要在 K8s 集群中创建、管理或删除的各种资源,如 Pod、Service、Deployment 等。

5.1 查看资源配置清单

返回nginx-01的Deployment资源的摘要信息,并以yaml格式显示:
[root@master01 ~]# kubectl get deployment nginx-01 -n fql -o yaml获取nginx-service的Service资源,并以yaml格式输出该资源的详细信息:
[root@master01 ~]# kubectl get svc nginx-service -n fql -o yaml

5.2 解释资源配置清单

获取有关Kubernetes中Deployment资源的metadata字段的详细信息和说明:
[root@master01 ~]# kubectl explain deployment.metadata获取有关Kubernetes中Service资源的metadata字段的详细信息和说明
[root@master01 ~]# kubectl explain service.metadata在K8s中,metadata是用于描述资源对象的信息,metadata字段通常包括以下内容:
# name:资源对象的名称,用于在集群中唯一标识该对象
# namespace:资源对象所属的命名空间,用于对资源进行逻辑隔离和组织
# labels:一组键值对,用于标识和分类资源对象,以便于查询和选择
# annotations:一组键值对,用于存储额外的非标识性信息,如描述、构建信息等

6. 修改资源配置清单并应用

6.1 离线修改

[root@master01 ~]# kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=2
[root@master01 ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-svc --type=NodePort[root@master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        5d22h
nginx-svc    NodePort    10.96.72.223   <none>        80:30997/TCP   4s
[root@master01 ~]# kubectl get pod,svc -o wide
NAME                        READY   STATUS    RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
pod/nginx-d9d8cf5c7-6rhcs   1/1     Running   0          7m1s   10.244.1.40   node01   <none>           <none>
pod/nginx-d9d8cf5c7-p44sk   1/1     Running   0          7m1s   10.244.1.39   node01   <none>           <none>NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE     SELECTOR
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        5d22h   <none>
service/nginx-svc    NodePort    10.96.72.223   <none>        80:30997/TCP   26s     app=nginx

修改 yaml 文件,并用 kubectl apply -f xxxx.yaml 文件使之生效;注意:当 apply 不生效时,先使用 delete 清除资源,再 apply 创建资源。

[root@master01 ~]# kubectl get svc nginx-svc -o yaml > nginx-svc.yaml
[root@master01 ~]# vim nginx-svc.yaml port: 8080   # 修改[root@master01 ~]# kubectl delete -f nginx-svc.yaml  # 清除资源
service "nginx-svc" deleted
[root@master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   5d22h
[root@master01 ~]# kubectl apply -f nginx-svc.yaml 
service/nginx-svc created
[root@master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          5d22h
nginx-svc    NodePort    10.96.72.223   <none>        8080:30997/TCP   2s[root@master01 ~]# curl 10.96.72.223:8080
<title>Welcome to nginx!</title>

6.2 在线修改

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改

[root@master01 ~]# kubectl edit svc nginx-svc
service/nginx-svc edited
# i:编辑,wq:保存 

[root@master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP         5d22h
nginx-svc    NodePort    10.96.72.223   <none>        888:30997/TCP   10m
[root@master01 ~]# vim nginx-svc.yaml port: 8080    # 未对yaml文件内容进行修改
[root@master01 ~]# curl 10.96.72.223:888
<title>Welcome to nginx!</title>

7. 查看 api 资源版本标签 

[root@master01 ~]# kubectl api-versions
apps/v1					# 如果是业务场景一般首选使用 apps/v1
apps/v1beta1			# 带有beta字样的代表的是测试版本,不用在生产环境中

8. 删除资源配置清单

① 陈述式删除

kubectl delete service nginx
# 是一个命令,用于删除名为nginx的服务。这将从Kubernetes集群中删除该服务的定义和相关资源

② 声明式删除

kubectl delete -f nginx-svc.yaml
# 根据提供的YAML文件删除资源

区别:

  • 第一个命令是根据资源名称直接删除服务;
  • 第二个命令是根据提供的 YAML 文件中的定义删除资源。第二个命令更加灵活,可以一次性删除多个资源,而不仅限于服务。

二、编写 ymal 文件

1. 部署 nginx-yaml 配置

1.1 编辑清单 yaml 文件

[root@master01 ~]# mkdir /data/demo -p
[root@master01 ~]# cd /data/demo/
[root@master01 demo]# vim nginx-dp.yaml
apiVersion: apps/v1          # 指定api版本标签
kind: Deployment             # 定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:                    # 定义资源的元数据信息,比如资源的名称、namespace、标签等信息name: nginx-01             # 定义资源的名称,在同一个namespace空间中必须是唯一的labels:                    # 定义Deployment资源标签web: nginx-01            # 定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
spec:                  replicas: 3                # 定义副本数量selector:                  # 定义标签选择器matchLabels:             # 定义匹配标签 web: nginx-01          # 需与 .spec.template.metadata.labels 定义的标签保持一致template:                  # 定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配metadata:                labels:                # 定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致web: nginx-01spec:containers:            # 定义容器属性- name: nginx          # 定义一个容器名,一个 - name: 定义一个容器image: nginx:1.14    # 定义容器使用的镜像以及版本ports:- containerPort: 80  # 定义容器的对外的端口

1.2 创建资源对象

[root@master01 demo]# kubectl apply -f nginx-dp.yaml 
deployment.apps/nginx-01 created
[root@master01 demo]# kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
nginx-01-8449c47886-22tm4   1/1     Running   0          8s
nginx-01-8449c47886-csqhk   1/1     Running   0          8s
nginx-01-8449c47886-zq9z8   1/1     Running   0          8s

1.3 创建 service 服务对外提供访问

[root@master01 demo]# vim nginx-svc.yaml
apiVersion: v1      # Kubernetes API 的版本,指定为 v1
kind: Service       # 定义了一个 Service(服务)
metadata:           # 包含了服务的元数据,比如名称、标签等name: nginx-svc   # 服务的名称labels:           # 服务的标签,用于标识和选择相关的资源web: nginx-01   # 服务的标签
spec:               # 定义了服务的规格,包括服务类型、端口和选择器type: NodePort    # 服务的类型,被设置为 NodePortports:            # 服务的端口列表- port: 80        # 服务的端口targetPort: 80  # 服务转发请求的目标端口,设置为 80,与后端 Pod 的容器端口匹配selector:         # 定义了用于选择后端 Pod 的标签web: nginx-01   # 选择器的标签,与 Deployment 或 Pod 的标签匹配

1.4 创建 svc 资源对象

[root@master01 demo]# kubectl apply -f nginx-svc.yaml 
service/nginx-svc created
[root@master01 demo]# kubectl get pod,svc -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
pod/nginx-01-8449c47886-22tm4   1/1     Running   0          24m   10.244.1.43   node01   <none>           <none>
pod/nginx-01-8449c47886-csqhk   1/1     Running   0          24m   10.244.2.34   node02   <none>           <none>
pod/nginx-01-8449c47886-zq9z8   1/1     Running   0          24m   10.244.1.44   node01   <none>           <none>NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        6d    <none>
service/nginx-svc    NodePort    10.96.60.107   <none>        80:31646/TCP   10s   web=nginx-01

1.5 访问测试

[root@master01 demo]# curl 10.96.60.107
<title>Welcome to nginx!</title>[root@master01 demo]# curl 10.96.60.107 -I
Server: nginx/1.14.2

1.6 port 端口类型

① port

port 是 k8s 集群内部访问 service 的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service(四层)
② nodePort

nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service
③ targetPort

targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器
④ containerPort

containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort

2. 部署 redis-yaml 配置

2.1 编辑清单、service yaml 文件

[root@master01 demo]# vim redis-db-svc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: redis-dplabels:nosql: redis-01
spec:replicas: 1selector:matchLabels:nosql: redis-01template:metadata:labels:nosql: redis-01spec:containers:- name: redisimage: redis:latestports:- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:name: redis-svclabels:nosql: redis-01
spec:selector:nosql: redis-01ports:- nodePort: 30001port: 6379protocol: TCPtargetPort: 6379type: NodePort

2.2 创建资源对象

[root@master01 demo]# kubectl apply -f redis-db-svc.yaml[root@master01 demo]# kubectl get pod,svc
NAME                            READY   STATUS    RESTARTS   AGE
pod/nginx-01-8449c47886-22tm4   1/1     Running   0          60m
pod/nginx-01-8449c47886-csqhk   1/1     Running   0          60m
pod/nginx-01-8449c47886-zq9z8   1/1     Running   0          60m
pod/redis-dp-cd9f5cff6-clhdr    1/1     Running   0          8m25sNAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          6d1h
service/nginx-svc    NodePort    10.96.60.107    <none>        80:31646/TCP     36m
service/redis-svc    NodePort    10.96.203.220   <none>        6379:30002/TCP   77s

2.3 连接 pod 实例

3. 部署 mysql-yaml 配置

3.1 生成模板 yaml 文件

使用 yaml 格式导出生成模板,并进行修改以及删除一些不必要的参数

① 生成并修改命名空间创建 yaml 文件

[root@master01 ~]# kubectl create ns mysql-server -o yaml --dry-run=client > mysql.yaml
[root@master01 ~]# vim mysql.yaml
apiVersion: v1
kind: Namespace
metadata:name: mysql-server
---

② 生成并修改清单创建 yaml 文件

  • 追加创建一个 Deployment YAML 文件模板,但不包含环境变量
  • 手动编辑 mysql.yaml 文件,添加环境变量、卷挂载
[root@master01 ~]# kubectl create deployment mysql-01 --image=mysql:latest --port=3306 --replicas=1 -n mysql-server --dry-run=client -o yaml >> mysql.yaml
apiVersion: v1             # Kubernetes API 的版本
kind: Namespace            # 定义了一个 Namespace
metadata:                  # 包含了资源的元数据,比如名称、标签等name: mysql-server       # Namespace 的名称
---                        # 这个分隔符表示 YAML 文件中的两个资源定义之间的分隔
apiVersion: apps/v1
kind: Deployment           # 指定了资源类型为 Deploymen
metadata:                  # 包含了 Deployment 的元数据,比如名称、标签等labels:                  # Deployment 的标签,用于标识和选择相关的资源app: mysql-01        name: mysql-01           # Deployment 的名称namespace: mysql-server  # Deployment 所属的 Namespace
spec:                      # 定义了 Deployment 的规格,包括副本数量、选择器和 Pod 模板replicas: 1              # Deployment 的副本数量selector:                # 定义了用于选择 Pod 的标签matchLabels:           # 这是选择器的标签,与 Pod 模板中的标签匹配app: mysql-01        template:                # 定义了要创建的 Pod 的模板metadata:              # 包含了 Pod 模板的元数据,比如标签等labels:              # Pod 模板的标签,用于标识和选择相关的资源app: mysql-01spec:                  # 定义了 Pod 的规格,包括容器和端口containers:- image: mysql:latest          # 容器的镜像,使用的是最新版本的 MySQL 镜像name: mysql                  # 容器的名称ports:                       # 容器的端口列表- containerPort: 3306        # 容器的端口env:                         # 定义环境变量列表- name: MYSQL_ROOT_PASSWORD  # 环境变量的名称value: "123123"            # 设置MySQL的root密码,也就是环境变量的值
# 当MySQL容器首次启动时,它会检查数据库是否已经初始化,并且如果没有提供密码相关的环境变量,它会报错并退出volumeMounts:                # 定义如何挂载卷到容器中- name: mysql-data           # 引用的卷的名称mountPath: /var/lib/mysql  # 卷在容器中的挂载路径volumes:                       # 定义Pod中使用的卷列表- name: mysql-data             # 卷的名称,与volumeMounts中的name相对应emptyDir: {}
# 一个空目录卷。这种类型的卷在Pod首次被调度到节点上时创建,并在Pod被删除时销毁。它不持久化数据,仅用于临时存储
---

③ 编辑 svc 资源 yaml 文件

由于集群中还未创建 mysql-01,无法使用命令生成模板:kubectl expose service mysql-01 --port=3306 --target-port=3306 --name=mysql-svc --type=NodePort --dry-run=client -o yaml >> mysql.yam

这里手动编辑 yaml 文件:

[root@master01 ~]# vim mysql.yaml 
apiVersion: v1             # Kubernetes API 的版本
kind: Namespace            # 定义了一个 Namespace
metadata:                  # 包含了资源的元数据,比如名称、标签等name: mysql-server       # Namespace 的名称
---                        # 这个分隔符表示 YAML 文件中的两个资源定义之间的分隔
apiVersion: apps/v1
kind: Deployment           # 指定了资源类型为 Deploymen
metadata:                  # 包含了 Deployment 的元数据,比如名称、标签等labels:                  # Deployment 的标签,用于标识和选择相关的资源app: mysql-01        name: mysql-01           # Deployment 的名称namespace: mysql-server  # Deployment 所属的 Namespace
spec:                      # 定义了 Deployment 的规格,包括副本数量、选择器和 Pod 模板replicas: 1              # Deployment 的副本数量selector:                # 定义了用于选择 Pod 的标签matchLabels:           # 这是选择器的标签,与 Pod 模板中的标签匹配app: mysql-01        template:                # 定义了要创建的 Pod 的模板metadata:              # 包含了 Pod 模板的元数据,比如标签等labels:              # Pod 模板的标签,用于标识和选择相关的资源app: mysql-01spec:                  # 定义了 Pod 的规格,包括容器和端口containers:- image: mysql:latest          # 容器的镜像,使用的是最新版本的 MySQL 镜像name: mysql                  # 容器的名称ports:                       # 容器的端口列表- containerPort: 3306        # 容器的端口env:                         # 定义环境变量列表- name: MYSQL_ROOT_PASSWORD  # 环境变量的名称value: "123123"            # 设置MySQL的root密码,也就是环境变量的值
# 当MySQL容器首次启动时,它会检查数据库是否已经初始化,并且如果没有提供密码相关的环境变量,它会报错并退出volumeMounts:                # 定义如何挂载卷到容器中- name: mysql-data           # 引用的卷的名称mountPath: /var/lib/mysql  # 卷在容器中的挂载路径volumes:                       # 定义Pod中使用的卷列表- name: mysql-data             # 卷的名称,与volumeMounts中的name相对应emptyDir: {}
# 一个空目录卷。这种类型的卷在Pod首次被调度到节点上时创建,并在Pod被删除时销毁。它不持久化数据,仅用于临时存储
--- 
apiVersion: v1              
kind: Service               # 定义了一个 Service(服务)
metadata:                   # 包含了服务的元数据,比如名称、标签等name: mysql-service       # 服务的名称namespace: mysql-server   # 服务所属的 Namespacelabels:                   # 服务的标签,用于标识和选择相关的资源app: mysql-01           # 服务的标签,与 Deployment 或 Pod 的标签匹配
spec:                       # 定义了服务的规格,包括服务类型、端口和选择器type: NodePort            # 服务的类型,被设置为 NodePortports:                    # 服务的端口列表- port: 3306              # 服务的端口targetPort: 3306        # 服务转发请求的目标端口selector:                 # 定义了用于选择后端 Pod 的标签app: mysql-01           # 选择器的标签,与 Deployment 或 Pod 的标签匹配

3.2 创建资源

[root@master01 ~]# kubectl apply -f mysql.yaml 
namespace/mysql-server created
deployment.apps/mysql-01 created
service/mysql-service created[root@master01 ~]# kubectl get pod,svc -n mysql-server -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
pod/mysql-01-776dd57c9b-fb5hp   1/1     Running   0          48s   10.244.2.37   node02   <none>           <none>NAME                    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   SELECTOR
service/mysql-service   NodePort   10.96.103.121   <none>        3306:32316/TCP   68s   app=mysql-01

3.3 访问验证

[root@master01 ~]# kubectl exec -it mysql-01-776dd57c9b-fb5hp  -n mysql-server bash 
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@mysql-01-776dd57c9b-fb5hp:/# mysql -u root -p'123123'
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

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

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

相关文章

Qt 配置Eigen矩阵库 - 并简单测试

Qt 配置Eigen矩阵库 - 并简单测试 引言一、在Qt中配置Eigen二、低通Demo源码三、参考链接以及其他 引言 Eigen是一个开源的C模板库&#xff0c;提供了线性代数和矩阵运算的功能。它被设计为一个高性能、可扩展和易用的库&#xff0c;可以用于科学计算、机器学习和计算机图形学等…

dubbo复习:(4) 和springboot 整合时,客户端负载均衡的配置

需要在DubboReference注解指定loadbalance属性。示例如下&#xff1a; package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Ser…

使用NuScenes数据集生成ROS Bag文件:深度学习与机器人操作的桥梁

在自动驾驶、机器人导航及环境感知的研究中&#xff0c;高质量的数据集是推动算法发展的关键。NuScenes数据集作为一项开源的多模态自动驾驶数据集&#xff0c;提供了丰富的雷达、激光雷达&#xff08;LiDAR&#xff09;、摄像头等多种传感器数据&#xff0c;是进行多传感器融合…

Discuz!X3.4论坛网站公安备案号怎样放到网站底部?

Discuz&#xff01;网站的工信部备案号都知道在后台——全局——站点信息——网站备案信息代码填写&#xff0c;那公安备案号要添加在哪里呢&#xff1f;并没有看到公安备案号填写栏&#xff0c;今天驰网飞飞和你分享 1&#xff09;工信部备案号和公安备案号统一填写到网站备案…

服务器感染了. rmallox勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; 近年来&#xff0c;随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;勒索病毒作为一种严重的网络威胁&#xff0c;对个人和企业数据造成了巨大的威胁。本文将重点介绍.rmallox勒索病毒的特点、传播途径以及应对策略&#xff0c;旨…

压力测试JMeter

压力测试JMeter 1 下载JMeter1.1 测试计划1.2 JMeter Address Already in use 错误解决1.3 java 内存模型1.4 jconsole与jvisualvm1.5 优化方向1.6 Nginx动静分离 1 下载JMeter 官网地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 运行apache-jmeter-5.6.3\…

firebase如何自定义上传日志

我们可以很轻松的得到2个代码&#xff1a; Firebase.crashlytics.log(str) Firebase.crashlytics.recordException(ex)这就是firebase提供的自定义日志和excption上传的方法。 但是如果你认为log函数调用后&#xff0c;直接就能查看到日志就错了。 我们在这个page是找不到日志…

如何找出真正的交易信号?Anzo Capital昂首资本总结7个

匕首是一种新兴的价格走势形态&#xff0c;虽然不常见&#xff0c;但具有较高的统计可靠性。它通常预示着趋势的持续发展。该模式涉及到同时参考两个不同的时间周期进行交易&#xff0c;一个是短期&#xff0c;另一个是长期&#xff0c;比如一周时间框架与一天时间框架、一天时…

字母的大小写转换

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;字符串对象提供了lower()方法和upper()方法进行字母的大小写转换&#xff0c;即可用于将大写字母转换为小写字母或者将小写字…

Windows下PostgreSQL数据库的备份与恢复

文章目录 一、备份1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;使用pg_dump进行备份1.打开命令窗口2.使用pg_dump将数据库备份下来 二、恢复1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;…

FTP介绍

FTP 1、FTP—文件传输协议 文件传输协议&#xff08;File Transfer Protocol&#xff0c;FTP&#xff09;是用于在网络上进行文件传输的一套标准协议&#xff0c;它工作在 OSI 模型的第七层&#xff0c; TCP 模型的第四层&#xff0c; 即应用层&#xff0c; 使用 TCP 传输&…

利润而不是损失:谁信任你的游戏本地化

中国游戏市场巨大且前景广阔。这尤其适用于移动游戏&#xff1a;Statista预测&#xff0c;2024年。它的收入将达到346.6亿美元。然而&#xff0c;这种巨大的财务潜力也有其反面&#xff1a;游戏进入市场的次数越多&#xff0c;它们就越难以相互争夺玩家的注意力。此外&#xff…

信息学奥赛初赛天天练-15-阅读程序-深入解析二进制原码、反码、补码,位运算技巧,以及lowbit的神奇应用

更多资源请关注纽扣编程微信公众号 1 2021 CSP-J 阅读程序1 阅读程序&#xff08;程序输入不超过数组或字符串定义的范围&#xff1b;判断题正确填 √&#xff0c;错误填&#xff1b;除特 殊说明外&#xff0c;判断题 1.5 分&#xff0c;选择题 3 分&#xff09; 源码 #in…

DNSlog环境搭建

阿里云域名公网VPS地址 购买阿里云域名后设置“自定义DNSHOST” DNS服务器填写ns1和ns2 如&#xff1a;ns1.aaa.com IP地址填写你的VPS地址 如&#xff1a;1.1.1.1 填写解析记录&#xff0c;一个A记录、一个NS记录 NS记录就是*.域名指向记录值ns1.域名 如&#xff1a;*.aaa…

【已解决】使用token登录机制,token获取不到,blog_list.html界面加载不出来

Bug产生 今天使用token完成用户登录信息的存储的时候被卡了大半天。 因为登录的功能写的已经很多了&#xff0c;所以今天就没有写一点验一点&#xff0c;而是在写完获取博客列表功功能&#xff0c;验证完它的后端后&#xff0c;了解完令牌的基本使用以及Jwt的基本使用方式——…

【二叉树】:LeetCode:100.相同的数(分治)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;初阶初阶结构刷题 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 1.问题描述&#xff1a; 2.问题分析&#xff1a; 二叉树是区分结构的&#xff0c;即左右子树是不一…

Vanna使用ollama分析本地MySQL数据库

上一章节中已经实现了vanna的本地运行&#xff0c;但是大模型和数据库都还是远程的&#xff0c;因为也就没办法去训练&#xff0c;这节一起来实现vanna分析本地mysql数据库&#xff0c;因为要使用本地大模型&#xff0c;所以开始之前需要给本地安装好大模型&#xff0c;我这里用…

通过Wirtinger流进行相位恢复:理论与算法

文章目录 1. 简介2. 算法描述2.1 初始化(Initialization)2.2 迭代更新(Iterative Updates)2.3 学习率调整&#xff08;Learning Rate Adjustment&#xff09; 3. 代码实现3.1 一维信号测试 &#xff08;Gaussian model&#xff09;3.2 一维信号测试 &#xff08;Coded diffract…

最长递增子序列,交错字符串

第一题&#xff1a; 代码如下&#xff1a; int lengthOfLIS(vector<int>& nums) {//dp[i]表示以第i个元素为结尾的最长子序列的长度int n nums.size();int res 1;vector<int> dp(n, 1);for (int i 1; i < n; i){for (int j 0; j < i; j){if (nums[i]…

ArcGIS提取含有计曲线的等高线

喜欢就关注我们吧&#xff01; 今天我么来看看&#xff0c;如何利用DEM提取含有计曲线的等高线&#xff01; 常规的话我们利用DEM提取的等高线都是不带计曲线的&#xff0c;无法把计曲线标注出来&#xff0c;今天我们就来看下&#xff0c;如何处理一下哦&#xff01;提取带有计…