005.MinIO-DirectPV分布式多租户存储部署

news/2024/11/14 16:04:59/文章来源:https://www.cnblogs.com/itzgr/p/18399049

MinIO部署准备

部署概述

本实验结合Kubernetes进行MinIO部署,实现MinIO于Kubernetes的融合。

minio官方支持通过简单的快速部署,以便于进行基础测试:

curl https://raw.githubusercontent.com/minio/docs/master/source/extra/examples/minio-dev.yaml -O
kubectl apply -f minio-dev.yaml

参考官方: 快速部署MinIO 。

本实验基于生产环境,部署一套可用于生产环境的多租户Minio。

MinIO官方推荐使用minio-operator部署多租户的minio系统。
每个 MinIO Tenant 代表 Kubernetes 集群中的一个独立的 MinIO Object Store。

部署架构

官方最佳实践推荐的架构如下:

003

前期规划

Kubernetes 安装

本实验不涉及 Kubernetes 部署, Kubernetes 部署参考 Kubernetes_v1.30.3高可用部署架构二 。

已完成部署的Kubernetes集群的规划及相关信息如下:

主机 IP 磁盘 备注
master01 172.24.10.11 —— master节点
master02 172.24.10.12 —— master节点
master03 172.24.10.13 —— master节点
worker01 172.24.10.14 /dev/nvme0n2 worker节点+ MinIO 节点
worker02 172.24.10.15 /dev/nvme0n2 worker节点+ MinIO 节点
worker03 172.24.10.16 /dev/nvme0n2 worker节点+ MinIO 节点
worker04 172.24.10.17 /dev/nvme0n2 worker节点+ MinIO 节点

集群VIP: 172.24.10.100
相关域名均能正常解析,可通过hosts解析相关域名至 VPI 。

helm 安装

生产环境下的 minio 官方建议使用 helm 部署,因此需要提前在 Kubernetes 中部署 helm 工具。
参考: Kubernetes集群管理-Helm部署及使用 。

MinIO Operator 组件

Minio Operator 介绍

部署 minio 之前,需要完成 minio operator 的部署,本实验使用最新稳定 Operator 版本 6.0.2。

MinIO Operator 会安装一个 Custom Resource Definition ( CRD )来支持将 MinIO 租户描述为 Kubernetes object 。

MinIO Operator 存在于它独立的命名空间中,并在其中创建 Kubernetes 资源,这些资源包括 pod 、 svc 、 replicasets 和 deployments 。

默认情况下,Operator pods 使用 MinIO CRD 监视对象的所有命名空间,并自动管理这些资源。

当使用 Operator 创建租户时,该租户必须拥有自己的命名空间,在该命名空间中,Operator 生成租户配置所需的 pod 。

每个Tenant pod运行三个容器:

  • MinIO 容器运行所有标准 MinIO 功能的容器,相当于裸机上的基本 MinIO 安装。这个容器在提供的挂载点(pv)中存储和检索object。
  • InitContainer,仅在启动 pod 期间存在,用于管理启动期间的配置secret,启动完成后,此容器终止。
  • Sidecar container 用于初始化MinIO租,sidecar 检索并验证每个租户的配置,并在 pod 中创建必要的本地资源。

在Operator 6.0.0 开始, Sidecar 有自己的 image 和释放周期,与 MinIO Operator 的其他部分分开。
MinIO Operator 将租户的环境变量存储在sidecar中,允许 Operator 在不需要滚动重启的情况下更新变量。

租户使 pvc 与存储对象的持久卷进行通信。

提示:
1:官方也支持 kubectl -k 和 kubectl --kustomize 部署,可以参考:Deploy the MinIO Operator 。本实验有限采用helm安装,也可参考: Deploy Operator With Helm 。
2:但若使用 Helm chart安装 Operator ,则必须使用 Helm 来管理该安装过程。不要使用kubectl krew、Kustomize或类似的方法来更新或管理 MinIO Operator 的安装。

Kubernetes TLS 证书

MinIO Operator 自动生成 TLS 证书签名请求( CSR )并使用 Kubernetes certificates.k8s.io TLS 证书管理 API创建签名的 TLS 证书。

因此 MinIO Operator要求 Kubernetes kube-controller-manager 配置包括以下配置设置:

  • --cluster-signing-key-file :指定用于签署集群范围证书的 PEM 编码的 RSA 或 ECDSA 私钥。
  • --cluster-signing-cert-file :指定用于颁发集群范围证书的 PEM 编码的 x.509 证书颁发机构证书。

如果 Kubernetes 集群未配置为相应生成的 CSR ,则 Operator 无法完成初始化。
默认情况下,Kubernetes 已完成如上自动挡配置,可通过下方式检查当前 Kubernetes 集群是否配置了 TLS 证书。

kubectl get pod kube-controller-manager-$CLUSTERNAME-control-plane -n kube-system -o yaml

004

提示:MinIO Operator 使用指定的证书颁发机构( CA )为所有 MinIO 租户 pod 自动生成 TLS 证书。Kubernetes 集群外部的客户端必须信任 Kubernetes 集群 CA 才能连接到 MinIO Operator 或 MinIO 租户。

不能信任 Kubernetes 集群 CA 的客户端可以尝试禁用连接 MinIO Operator 或 MinIO Tenant 的 TLS 验证。

也可以生成由已知且受信任的 CA 签署的 x.509 TLS 证书,并将这些证书传递给 MinIO 租户。

添加repo

使用 helm 添加 minio chart repo。

[root@master01 ~]# mkdir ten-minio
[root@master01 ~]# cd ten-minio
[root@master01 ten-minio]# helm repo add minio-operator https://operator.min.io
[root@master01 ten-minio]# helm repo update
[root@master01 ten-minio]# helm search repo minio-operator
NAME                         	CHART VERSION	APP VERSION	DESCRIPTION                    
minio-operator/minio-operator	4.3.7        	v4.3.7     	A Helm chart for MinIO Operator
minio-operator/operator      	6.0.3        	v6.0.3     	A Helm chart for MinIO Operator
minio-operator/tenant        	6.0.3        	v6.0.3     	A Helm chart for MinIO Operator

提示:国内可以使用 helm repo add minio-operator https://operator.minio.org.cn 进行添加。
minio-operator/minio-operator是一个旧版本的 operator ,不需要安装。

安装 operator

运行 helm install 命令安装 operator 。
以下命令指定并创建了一个专用 minio-operator 命名空间进行安装。

[root@master01 ten-minio]# helm show values minio-operator/operator > operator-values.yaml   #可选,导出默认chart values
[root@master01 ten-minio]# cat operator-values.yaml[root@master01 ten-minio]# helm install \--namespace minio-operator \--create-namespace \operator minio-operator/operator

验证 operator

验证 operator 安装情况。

[root@master01 ten-minio]# kubectl get all -n minio-operator                        #查看安装后的资源
NAME                                 READY   STATUS    RESTARTS   AGE
pod/minio-operator-95fd896dc-cdt84   1/1     Running   0          2m6s
pod/minio-operator-95fd896dc-rfjsr   1/1     Running   0          2m6sNAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/operator   ClusterIP   10.20.194.160   <none>        4221/TCP   2m7s
service/sts        ClusterIP   10.20.24.158    <none>        4223/TCP   2m7sNAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/minio-operator   2/2     2            2           2m7sNAME                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/minio-operator-95fd896dc   2         2         2       2m7s

持久卷

MinIO 要求专用于给对象存储的驱动器或卷的访问,本实验使用本地盘 /dev/nvme0n2 ,该磁盘独立用于部署minio。

提示:该专属磁盘用于部署minio分布式存储,其他任何进程、软件、脚本等都不得执行任何操作,也不得对MinIO放置在其上的对象或文件执行操作,否则可能带来数据破坏的风险。

MinIO 可以使用任何支持 ReadWriteOnce 访问模式的 Kubernetes PV。
MinIO 的一致性保证要求独占存储访问,而 ReadWriteOnce 正是提供这种支持。

此外,MinIO 建议为 PVC StorageClass 设置 Retain 回收策略,同时建议在配置storage class、CSI或者基于PV的存储的时候,将卷格式化为 XFS 以确保最佳性能。

MinIO可以使用任何支持ReadWriteOnce访问模式的Kubernetes Persistent Volume (PV)。
MinIO的一致性保证需要ReadWriteOnce提供的独占存储访问,在部署租户之前,持久卷必须已经存在。

此外,MinIO建议为PVC StorageClass设置Retain的回收策略,在最佳实践下,配置StorageClass、CSI或PV底层的其他提供程序,建议将卷格式化为XFS,以确保最佳性能。

对于节点具有直接连接存储的Kubernetes集群,MinIO强烈建议使用DirectPV CSI驱动程序。

DirectPV提供了一个分布式持久卷管理器,它可以发现、格式化、挂载、调度和监视Kubernetes节点上的驱动器,DirectPV解决了手动配置和监控本地持久卷的限制。

详细 DirectPV 使用见: 002.DirectPV介绍及安装 和 003.DirectPV存储管理 。

本实验已完成directpv的安装,相关信息如下:

[root@master01 ten-minio]# kubectl -n directpv get all
NAME                              READY   STATUS    RESTARTS   AGE
pod/controller-79f6b96bf8-t9c4l   3/3     Running   0          25m
pod/controller-79f6b96bf8-vrb2q   3/3     Running   0          25m
pod/controller-79f6b96bf8-x76gj   3/3     Running   0          25m
pod/node-server-4tj7p             4/4     Running   0          25m
pod/node-server-67c7b             4/4     Running   0          25m
pod/node-server-cjhd5             4/4     Running   0          25m
pod/node-server-k6ks2             4/4     Running   0          25mNAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/node-server   4         4         4       4            4           <none>          25mNAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/controller   3/3     3            3           25mNAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/controller-79f6b96bf8   3         3         3       25m
[root@master01 ten-minio]# kubectl -n directpv get sc
NAME                 PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
directpv-min-io      directpv-min-io      Delete          WaitForFirstConsumer   true                   26m

创建租户namespace

创建模拟多租户的命名空间。

[root@master01 ten-minio]# vim minio-ns.yaml
apiVersion: v1
kind: Namespace
metadata:name: minio-ns01labels:name: minio-ns01[root@master01 ten-minio]# kubectl apply -f minio-ns.yaml

MinIO Helm部署

helm概述

Helm是一个自动将应用程序部署到Kubernetes集群的工具,参考:053.Kubernetes集群管理-Helm部署及使用 。

Helm charts是一组定义部署细节的YAML文件、模板和其他需要的文件。
如下过程使用Helm Chart来部署由MinIO Operator管理的租户。

这个过程需要Kubernetes集群有一个有效的Operator部署,不能使用MinIO Operator租户chart来部署独立于Operator的租户。

提示:MinIO Operator 租户 Chart与社区管理的MinIO chart不同。

社区 Helm Chart 由社区建立、维护和支持。
MinIO不保证支持任何给定的错误、特性请求或引用该chart的更新带来的问题。

Operator 租户 Chart 由 MinIO 正式维护和支持,MinIO 强烈建议在生产环境中使用 Operator 和 tenant 的官方 Helm Chart 。

先决条件

安装一个带 Helm 的 MinIO tenant ,需要满足以下要求:

  • 可用的Kubernetes集群;
  • 与 Kubernetes 集群匹配的kubectl CLI工具;
  • Hlem 3.8 或更高版本;
  • yq 4.18.1 或更高版本;
  • 已安装 MinIO Operator。

此安装必须具备Kubernetes集群访问管理权限。

Helm Charts部署MinIO Tenant

如下使用官方的 MinIO Tenant chart进行部署 MinIO 租户,与本地chart安装相比,此方法支持简化的安装路径。

如下的步骤是使用Helm根据官方的MinIO Tenant chart部署MinIO租户。

更多chart配置参考:MinIO Server Config Guide 。

验证MinIO Operator

添加repo参考: 添加repo

配置helm

配置相关helm vaule 。

[root@master01 ten-minio]# curl -sLo tenant-values.yaml https://raw.githubusercontent.com/minio/operator/master/helm/tenant/values.yaml

提示:如果使用 Helm 部署 MinIO tenant ,则必须使用 Helm 来管理或升级该部署。不要使用kubectl krew、Kustomize或类似的方法来管理或升级 MinIO tenant 。
2:也可使用 helm 命令导出 minio chart 的默认 values.yaml 。

[root@master01 ten-minio]# helm show values minio-operator/tenant > tenant-values.yaml

配置租户拓扑

pool[0]前缀控制部署在租户中的所有pod的服务器数量、每个服务器的卷数量和存储类。

配置说明:

配置项 描述
servers 要在服务器池中部署的MinIO pod的数量
volumesPerServer 要附加到每个MinIO pod(服务器)的持久卷的数量,Operator 为租户生成 volumesPerServer x servers 数量的 PVC
storageClassName 要与生成的PVC相关联的Kubernetes存储类,如果没有匹配指定值的存储类存在,或者指定的存储类不能满足请求的pvc个数或存储容量,则可能导致租户启动失败
size 为每个生成的PVC请求的存储量
[root@master01 ten-minio]# vim tenant-values.yaml
tenant:name: tenant-01pools:- servers: 4volumesPerServer: 4name: pool-0size: 2Gi                                 #受限于实验磁盘空间,调整为2GistorageClassName: directpv-min-io         #指定使用directpv创建的sc

配置亲和/或反亲和

Tenant Chart 支持以下 Kubernetes Selector、亲和性和反亲和性配置:

  • 节点选择器 (tenant.nodeSelector)
  • 节点/Pod 亲和性或反亲和性 (spec.pools[n].affinity)

MinIO 建议为租户配置 Pod 反亲和性,以确保 Kubernetes 调度程序不会将多个 Pod 部署到同一台工作节点上。

如果需要将 Pod 部署到特定的工作节点上,可将这些节点的标签或筛选器传递给 nodeSelector 或 affinity 字段,以限制调度程序将 Pod 部署到这些节点上。

[root@master01 ten-minio]# kubectl label nodes worker0{1,2,3,4} tenant-minio=enabled     #根据部署规划给节点打标签
tenant:pools:- servers: 4name: pool-0size: 2Gi                 #受限于实验磁盘空间,调整为2Giaffinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: tenant-miniooperator: Invalues:- enabled

配置TLS证书

MinIO租户CRD提供以下字段,使用相应字段配置租户TLS网络加密:

配置 描述
tenant.certificate.requestAutoCert 启用或禁用 MinIO 自动生成 TLS 证书。
如果省略,默认为 true 或 enabled 。
tenant.certificate.certConfig 自定义自动 TLS 的行为(如果启用)。
tenant.certificate.externalCertSecret 通过服务器名称指示( SNI )为多个主机名启用TLS。
指定一个或多个 kubernetes.io/tls 或 cert-manager 的 Kubernetes secret
tenant.certificate.externalCACertSecret 启用对未知、第三方或内部 CA ( Certificate authority )签名的客户端TLS证书进行验证。
指定一个或多个 kubernetes.io/tls 的 Kubernetes secret,其中包含特定机构的 CA 证书的完整链。

提前创建证书。

[root@master01 ten-minio]# ll *com*
-rw-r--r-- 1 root root 3.9K Aug 24 06:19 api.linuxsb.com.crt
-rw-r--r-- 1 root root 1.7K Aug 24 06:19 api.linuxsb.com.key
-rw-r--r-- 1 root root 3.9K Aug 24 05:36 minio.linuxsb.com.crt
-rw-r--r-- 1 root root 1.7K Aug 24 05:36 minio.linuxsb.com.key[root@master01 ten-minio]# kubectl -n minio-ns01 create secret tls minio-webui-tls --cert=minio.linuxsb.com.crt --key=minio.linuxsb.com.key
[root@master01 ten-minio]# kubectl -n minio-ns01 create secret tls minio-api-tls --cert=api.linuxsb.com.crt --key=api.linuxsb.com.key[root@master01 ten-minio]# kubectl -n minio-ns01 describe secrets minio-webui-tls
[root@master01 ten-minio]# kubectl -n minio-ns01 describe secrets minio-api-tls

关闭 cert-manager 自动证书。

  certificate:externalCaCertSecret: [ ]externalCertSecret: [ ]requestAutoCert: falsecertConfig: { }

配置环境变量

可以使用tenant.configuration设置MinIO Server环境变量。

表头 表头
tenant.configuration 指定一个Kubernetes opaque secret,其数据负载config.env包含想要设置的每个MinIO环境变量。
config.env数据负载必须是一个base64编码的字符串,可以创建一个本地文件,设置环境变量,然后使用cat LOCALFILE base64来创建有效负载。

本设置可以设置minio相关用户和密码,本实验保持默认minio/minio123 。

配置ingress

配置ingress规则,将集群内minio对外暴露。

ingress:api:enabled: trueingressClassName: "nginx"labels: { }annotations: nginx.ingress.kubernetes.io/rewrite-target: /tls: - hosts:- 'api.linuxsb.com'secretName: minio-api-tlshost: api.linuxsb.compath: /pathType: Prefixconsole:enabled: trueingressClassName: "nginx"labels: { }annotations: nginx.ingress.kubernetes.io/rewrite-target: /tls: - hosts:- 'minio.linuxsb.com'secretName: minio-webui-tlshost: minio.linuxsb.compath: /pathType: Prefix

完整values.yaml如下:

tenant:name: tenant-01image:repository: quay.io/minio/miniotag: RELEASE.2024-08-17T01-24-54ZpullPolicy: IfNotPresentimagePullSecret: { }scheduler: { }configuration:name: myminio-env-configurationconfigSecret:name: myminio-env-configurationaccessKey: miniosecretKey: minio123pools:- servers: 4name: pool-0volumesPerServer: 4size: 2GistorageClassName: directpv-min-iostorageAnnotations: { }annotations: { }labels: { }tolerations: [ ]nodeSelector: { }affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: tenant-miniooperator: Invalues:- enabledresources: { }securityContext:runAsUser: 1000runAsGroup: 1000fsGroup: 1000fsGroupChangePolicy: "OnRootMismatch"runAsNonRoot: truecontainerSecurityContext:runAsUser: 1000runAsGroup: 1000runAsNonRoot: trueallowPrivilegeEscalation: falsecapabilities:drop:- ALLseccompProfile:type: RuntimeDefaulttopologySpreadConstraints: [ ]mountPath: /exportsubPath: /datametrics:enabled: falseport: 9000protocol: httpcertificate:externalCaCertSecret: [ ]externalCertSecret: [ ]requestAutoCert: falsecertConfig: { }features:bucketDNS: falsedomains: { }enableSFTP: falsebuckets: [ ]users: [ ]podManagementPolicy: Parallelliveness: { }readiness: { }startup: { }lifecycle: { }exposeServices: { }serviceAccountName: ""prometheusOperator: falselogging: { }serviceMetadata: { }env: [ ]priorityClassName: ""additionalVolumes: [ ]additionalVolumeMounts: [ ]ingress:api:enabled: trueingressClassName: "nginx"labels: { }annotations: nginx.ingress.kubernetes.io/rewrite-target: /tls: - hosts:- 'api.linuxsb.com'secretName: minio-api-tlshost: api.linuxsb.compath: /pathType: Prefixconsole:enabled: trueingressClassName: "nginx"labels: { }annotations: nginx.ingress.kubernetes.io/rewrite-target: /tls: - hosts:- 'minio.linuxsb.com'secretName: minio-webui-tlshost: minio.linuxsb.compath: /pathType: Prefix

正式部署

使用配置好的values.yaml进行部署。

[root@master01 ten-minio]# helm install \
--namespace minio-ns01 \
--create-namespace \
--values tenant-values.yaml tenant-01 minio-operator/tenant

016

确认验证

确认相关部署成功。

  • 部署情况验证
    查看minio。
[root@master01 ten-minio]# kubectl get all -n minio-ns01 -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP             NODE       NOMINATED NODE   READINESS GATES
pod/tenant-01-pool-0-0   2/2     Running   0          6m6s   10.10.5.9      worker01   <none>           <none>
pod/tenant-01-pool-0-1   2/2     Running   0          6m6s   10.10.30.65    worker02   <none>           <none>
pod/tenant-01-pool-0-2   2/2     Running   0          6m6s   10.10.196.79   worker04   <none>           <none>
pod/tenant-01-pool-0-3   2/2     Running   0          6m5s   10.10.19.79    worker03   <none>           <none>NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE    SELECTOR
service/minio               ClusterIP   10.20.208.139   <none>        80/TCP     6m7s   v1.min.io/tenant=tenant-01
service/tenant-01-console   ClusterIP   10.20.114.138   <none>        9090/TCP   6m7s   v1.min.io/tenant=tenant-01
service/tenant-01-hl        ClusterIP   None            <none>        9000/TCP   6m7s   v1.min.io/tenant=tenant-01NAME                                READY   AGE    CONTAINERS      IMAGES
statefulset.apps/tenant-01-pool-0   4/4     6m6s   minio,sidecar   quay.io/minio/minio:RELEASE.2024-08-17T01-24-54Z,quay.io/minio/operator-sidecar:v6.0.2[root@master01 ten-minio]# kubectl -n minio-ns01 get ingress -o wide
NAME                CLASS   HOSTS               ADDRESS        PORTS     AGE
tenant-01           nginx   api.linuxsb.com     172.24.10.11   80, 443   6m31s
tenant-01-console   nginx   minio.linuxsb.com   172.24.10.11   80, 443   6m31s

查看directpv。

[root@master01 ten-minio]# kubectl -n minio-ns01 get pvc
[root@master01 ten-minio]# kubectl directpv list drives

019

020

  • 浏览器验证
    使用浏览器访问 https://minio.linuxsb.com ,默认minio账号密码: minio / minio123 。

017

018

  • MC验证
    MinIO Client mc命令行工具提供了ls、cat、cp、mirror和diff等命令,支持文件系统和Amazon s3兼容的云存储服务。

mc命令行工具是为与AWS S3 API兼容而构建的,并在MinIO和AWS S3上测试了预期的功能和行为。

安装mc:

[root@master01 minio]# curl https://dl.min.io/client/mc/release/linux-amd64/mc \--create-dirs \-o /usr/local/bin/mc[root@master01 minio]# chmod +x /usr/local/bin/mc
[root@master01 minio]# mc --help

连接minio:
使用mc alias set命令将Amazon s3兼容的服务添加到mc配置中,将alias替换为要关联到S3服务的名称。
mc命令通常需要alias作为参数来标识要对哪个S3服务执行,如果省略ACCESS_KEY和SECRET_KEY,执行命令时会提示在CLI中输入这些值。

[root@master01 minio]# mc alias set myminio https://api.linuxsb.com minio minio123
Added `myminio` successfully.
[root@master01 minio]# mc admin info myminio

021

部署参考: K8S中使用helm安装MinIO书 。

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

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

相关文章

软件工程实践第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13243这个作业的目标 适应在接下来的学习任务中使用博客园进行作业的提交学号 1022011371.个人logo文生图任务设计理念:一望无际的大…

2024秋软件工程课程个人作业(第一次)

2024秋软件工程课程个人作业(第一次)软件工程课程 班级链接作业要求 作业链接作业目标 搭建个人博客,熟练使用AI工具,自我评估并规划未来发展学号 102201312一、个人logo文生图任务使用免费的AIGC图像生成工具为你的Github和博客园账号创建一个独特的个人Logo。推荐工具:DA…

libreoffice24.2--arm环境源码编译--构建RPM包

1、下载源代码地址:https://zh-cn.libreoffice.org/download/libreoffice/ 2、构建环境,使用docker容器,在容器内编译,使用的基础镜像是:fedora:latest,使用过centos9和centos10,centos9 gcc版本不够;centos10安装fakeroot包有问题,无法构建rpm包。3、在解压后的libr…

探索无限知识,儿童百科全书智能体点亮孩子的智慧之旅

本文由 ChatMoney团队出品介绍说明 在孩子充满好奇与探索欲望的成长道路上,知识是他们最宝贵的财富。而我们的儿童百科全书智能体,就像一座知识的宝库,为孩子们打开了一扇通往世界的神奇大门。 儿童百科全书智能体是专为孩子们精心打造的知识伙伴。它涵盖了丰富多样的领域,…

AI Logo制作工具网站——LogoAI.ai

AI Logo制作工具,可通过输入文本生成Logo。可自定义颜色、字体、布局等,生成的Logo可以无水印下载。AI Logo制作工具,可通过输入文本生成Logo。可自定义颜色、字体、布局等,生成的Logo可以无水印下载。 功能介绍:免费每日使用配额:每天可免费使用AI生成Logo。 高级自定义…

基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践

该最佳实践会指导大家基于开源WebChat组件LobeChat[1]和阿里云函数计算(FC)[2]构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。作者:计缘 LLM Chat 应用大家应该都不陌生,这类应用也逐渐称为了我们日常的…

Android Opencl从零实战(一)--windows搭建开发环境

系统win11 visual studio 2022 opencl 3.0库:Releases KhronosGroup/OpenCL-SDK (github.com)在新建的解决方案中 项目->[项目名称]和属性点选 c/c++->常规->附件包含目录->编辑,将自己下载的oepncl sdk的include路径填进去,作为头文件的引用目录点选 链接器-&…

VScode远程连接报错 Resolver error: Error: Connecting with SSH timed out

0、引言导致VScode连接失败的原因有很多。该方法仅针对超时引起的报错。1、报错内容:[18:01:33.071] Running script with connection command: "C:\Windows\System32\OpenSSH\ssh.exe" -T -D 53443 "docker_sys" bash [18:01:33.072] Terminal shell pat…

第16篇 如何制作自己的安装程序--使用InnoSetupPE工具

1.安装 去官网下载最新版本:https://jrsoftware.org/isdl.php#stable2.进入应用主界面3.点击file》New【开始打包】直接next 4.填写相关数据直接点next5.根据要求填写,然后直接next6.这里默认不改,然后直接next7.这里也默认不改,然后直接next8.这里为空,可以不填,然后直接…

Origin2024中如何添加误差带?直观查看数据的变化范围

误差线是通常用于统计或科学绘图中,本期给大家分享Origin中绘制带填充区的误差带图,可以直观显示数据的变化范围,填充区域也可以增加视觉效果和美观性操作步骤: 1、打开Origin2024软件,然后在Book1中输入如下示例数据:2、选中所有数据:3、点击菜单栏中【绘图】→【基础2…

苹果iMessage群发,苹果iMessage短信,苹果iMessage推信,电脑版Mac Os系统自动群发iMessage完美实现 - 电脑升级版

一、PC电脑版苹果系统(Mac OS)上实现imessage群发总结为以下几种方式: /*MacOS苹果系统,正常情况下,只能安装到苹果公司自己出品的Mac电脑,俗称白苹果,不能安装到各种组装机或者其他品牌的品牌机上,黑苹果的的原理,就是通过一些 “破解补丁” 工具欺骗macOS系统,让苹果系统…

autocad软件许可优化解决方案

Autocad软件介绍 Autodesk 是世界领先的设计软件和数字内容创建公司,用于建筑设计、土地资源开发、生产、公用设施、通信、媒体和娱乐。始建于 1982 年,Autodesk 提供设计软件、Internet 门户服务、无线开发平台及定点应用,帮助遍及 150 多个国家的四百万用户推动业务,保持…