云原生Kubernetes: K8S 1.29版本 部署Sonarqube
一、实验
1.环境
(1)主机
表1 主机
| 主机 | 架构 | 版本 | IP | 备注 |
| master | K8S master节点 | 1.29.0 | 192.168.204.8 | |
| node1 | K8S node节点 | 1.29.0 | 192.168.204.9 | |
| node2 | K8S node节点 | 1.29.0 | 192.168.204.10 | 已部署Kuboard |
(2)master节点查看集群
1)查看node
kubectl get node2)查看node详细信息
kubectl get node -o wide


(3)查看pod
[root@master ~]# kubectl get pod -A

(4) 访问Kuboard
http://192.168.204.10:30080/kuboard/cluster
查看节点
2.K8S 1.29版本 部署HELM
(1)查阅
https://github.com/helm/helm/releases/tag/v3.14.4
目前最新版为v3.14.4

(2) 部署HELM
1)安装 helm
//下载二进制 Helm client 安装包
helm-v3.14.4-linux-amd64.tar.gztar -zxvf helm-v3.14.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version//命令补全
source <(helm completion bash)
安装




(3)使用 helm 安装 Chart
1)查阅
https://github.com/SonarSource/helm-chart-sonarqube2)使用 helm 安装 Chart
//添加指定的 chart 仓库,
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube3) 下载指定版本
helm pull sonarqube/sonarqube --version 10.5.0+2748
查阅最新版本

安装
![]()
下载
![]()
(4)移动
cd ~ && mkdir sonarqubemv sonarqube-10.5.0+2748.tgz sonarqube/cd sonarqube/;ls
![]()
![]()

3.搭建NFS
(1)检查并安装rpcbind和nfs-utils软件包
[root@master ~]# rpm -q rpcbind nfs-utils

(2)创建目录并授权
[root@master ~]# mkdir -p /opt/sonarqube
![]()
[root@master opt]# chmod 777 sonarqube/

(3)打开nfs的配置文件
[root@master opt]# vim /etc/exports
![]()
(4)配置文件
给所有网段用户赋予读写权限、同步内容、不压缩共享对象root用户权限
……
/opt/sonarqube *(rw,sync,no_root_squash)

(5) 使NFS配置生效
[root@master opt]# exportfs -r

(6)监听端口
[root@master opt]# ss -antp | grep rpcbind

(7)查看共享
[root@master opt]# showmount -e

其他节点查看
[root@node1 ~]# showmount -e master

4.K8S 1.29版本安装nfs-provisioner
(1) 查阅
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases
(2)创建目录
[root@master ~]# cd ~ && mkdir nfs-subdir-external-provisioner
[root@master ~]# cd nfs-subdir-external-provisioner/
![]()
(3)第一种方式下载
helm添加repo
[root@master nfs-subdir-external-provisioner]# helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner

下载
[root@master ~]# helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
![]()
(5)第二种方式下载
查阅
https://artifacthub.io/packages/helm/nfs-subdir-external-provisioner/nfs-subdir-external-provisioner

点击右边的install

弹出页面

点击右下角"this link"

(6)移动并解压(选择上面的第二种方式)
[root@master ~]# mv nfs-subdir-external-provisioner-4.0.18.tgz nfs-subdir-external-provisioner[root@master nfs-subdir-external-provisioner]# tar -xvf nfs-subdir-external-provisioner-4.0.18.tgz


(7)node节点导入镜像
导入本地
[root@node1 ~]# docker load --input nfs-subdir-external-provisioner.tar

重新打标签
[root@node1 ~]# docker tag k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 registry.k8s.io/sig-storage/n

(8)master节点安装
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/ --set nfs.server=192.168.204.8 --set nfs.path=/opt/sonarqube --set storageClass.name=nfs-client --set storageClass.defaultClass=true -n nfs-provisioner --create-namespace

(9)查看pod

详细查看
[root@master ~]# kubectl describe pod nfs-subdir-external-provisioner-567b586d45-xz8r6 -n nfs-provisioner
Name: nfs-subdir-external-provisioner-567b586d45-xz8r6
Namespace: nfs-provisioner
Priority: 0
Service Account: nfs-subdir-external-provisioner
Node: node1/192.168.204.9
Start Time: Sat, 27 Apr 2024 19:38:39 +0800
Labels: app=nfs-subdir-external-provisionerpod-template-hash=567b586d45release=nfs-subdir-external-provisioner
Annotations: cni.projectcalico.org/containerID: 8f4479951e36de27cc21dcce8b7bf11a34eb838107d4457c6ca352acbf69399ecni.projectcalico.org/podIP: 10.244.166.167/32cni.projectcalico.org/podIPs: 10.244.166.167/32
Status: Running
IP: 10.244.166.167
IPs:IP: 10.244.166.167
Controlled By: ReplicaSet/nfs-subdir-external-provisioner-567b586d45
Containers:nfs-subdir-external-provisioner:Container ID: docker://9c18e809cc7179a55d66a1886b6addbd034841a6010fd07c4b4049449ab79814Image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2Image ID: docker://sha256:932b0bface75b80e713245d7c2ce8c44b7e127c075bd2d27281a16677c8efef3Port: <none>Host Port: <none>State: RunningStarted: Sat, 27 Apr 2024 19:38:41 +0800Ready: TrueRestart Count: 0Environment:PROVISIONER_NAME: cluster.local/nfs-subdir-external-provisionerNFS_SERVER: 192.168.204.8NFS_PATH: /opt/sonarqubeMounts:/persistentvolumes from nfs-subdir-external-provisioner-root (rw)/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-t248d (ro)
Conditions:Type StatusPodReadyToStartContainers True Initialized True Ready True ContainersReady True PodScheduled True
Volumes:nfs-subdir-external-provisioner-root:Type: NFS (an NFS mount that lasts the lifetime of a pod)Server: 192.168.204.8Path: /opt/sonarqubeReadOnly: falsekube-api-access-t248d:Type: Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds: 3607ConfigMapName: kube-root-ca.crtConfigMapOptional: <nil>DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Pulled 88s kubelet Container image "registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2" already present on machineNormal Created 88s kubelet Created container nfs-subdir-external-provisionerNormal Started 87s kubelet Started container nfs-subdir-external-provisionerNormal Scheduled 81s default-scheduler Successfully assigned nfs-provisioner/nfs-subdir-external-provisioner-567b586d45-xz8r6 to node1


(10)Kuboard查看
工作负载

容器组

详细信息

5.K8S 1.29版本 部署Sonarqube(第一种方式)
(1)解压
[root@master ~]# cd sonarqube/
[root@master sonarqube]# ls
[root@master sonarqube]# tar -xvf sonarqube-10.5.0+2748.tgz






(2)修改values.yaml文件
[root@master sonarqube]# cd sonarqube/
[root@master sonarqube]# vim values.yaml
……
# 全局搜索"service"关键字
service:type: NodePort # 类型修改为NodePortexternalPort: 9000internalPort: 9000nodePort: 30090 # NodePort对外暴露的端口
……
persistence:enabled: true #设置为true
……storageClass: nfs-client #设置为当前集群默认的StorageClass

修改前:




修改后:




(3)创建一个安装Sonarqube用的名字空间
[root@master sonarqube]# kubectl create ns sonarqube

(4)chart安装Sonarqube
[root@master sonarqube]# helm install sonarqube ./sonarqube -n sonarqube
NAME: sonarqube
LAST DEPLOYED: Sat Apr 27 20:12:09 2024
NAMESPACE: sonarqube
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:export NODE_PORT=$(kubectl get --namespace sonarqube -o jsonpath="{.spec.ports[0].nodePort}" services sonarqube-sonarqube)export NODE_IP=$(kubectl get nodes --namespace sonarqube -o jsonpath="{.items[0].status.addresses[0].address}")echo http://$NODE_IP:$NODE_PORT
WARNING: Please note that the SonarQube image runs with a non-root user (uid=1000) belonging to the root group (guid=0). In this way, the chart can support arbitrary user ids as recommended in OpenShift.Please visit https://docs.openshift.com/container-platform/4.14/openshift_images/create-images.html#use-uid_create-images for more information.WARNING: The embedded PostgreSQL is intended for evaluation only, it is DEPRECATED, and it will be REMOVED in a future release.Please visit https://artifacthub.io/packages/helm/sonarqube/sonarqube#production-use-case for more information.

(5)输入命令
[root@master sonarqube]# export NODE_PORT=$(kubectl get --namespace sonarqube -o jsonpath="{.spec.ports[0].nodePort}" services sonarqube-sonarqube)
[root@master sonarqube]# export NODE_IP=$(kubectl get nodes --namespace sonarqube -o jsonpath="{.items[0].status.addresses[0].address}")
[root@master sonarqube]# echo http://$NODE_IP:$NODE_PORT
http://192.168.204.8:30090

(6)node节点拉取postgresql镜像
[root@node2 ~]# docker pull docker.io/bitnami/postgresql:11.14.0-debian-10-r22#也可以使用替代愿镜像:m.daocloud.io/docker.io/bitnami/postgresql:11.14.0-debian-10-r22

Kuboard容器组查看

(7) node节点拉取sonarqube镜像
node2拉取镜像
[root@node2 ~]# docker pull sonarqube:10.5.0-community

node2节点导出镜像
[root@node2 ~]# docker save -o sonarqube.tar sonarqube:10.5.0-community

复制Docker镜像到node1节点
[root@node2 ~]# scp sonarqube.tar root@node1:~

node1节点导入Docker镜像
[root@node1 ~]# docker load -i sonarqube.tar

(8) 查看服务

(9)查看卷
[root@master sonarqube]# cd /opt/sonarqube/
[root@master sonarqube]# ls

Kuboard查看

(10)HELM更新配置文件
[root@master sonarqube]# helm upgrade -f sonarqube/values.yaml sonarqube ./sonarqube -n sonarqube

(11)删除项目
[root@master sonarqube]# helm uninstall sonarqube -n sonarqube
![]()
5.K8S 1.29版本 部署Sonarqube(第二种方式)
(1)创建NFS
postgresql
[root@master opt]# cd ~
[root@master ~]# mkdir -p /opt/postgre
[root@master ~]# cd /opt
[root@master opt]# chmod 777 postgre/
[root@master opt]# vim /etc/exports
[root@master opt]# exportfs -r
[root@master opt]# showmount -e
Export list for master:
/opt/postgre *
/opt/sonar *
/opt/sonarqube *
/opt/nexus *
/opt/k8s *


sonarqube
[root@master sonarqube]# cd ~
[root@master ~]# mkdir -p /opt/sonar
[root@master ~]#
[root@master ~]# cd /opt
[root@master opt]# chmod 777 sonar/
[root@master opt]# vim /etc/exports
[root@master opt]# exportfs -r
[root@master opt]# showmount -e
Export list for master:
/opt/sonar *
/opt/sonarqube *
/opt/nexus *
/opt/k8s *


(2)创建postgresql的pv
[root@master ~]# vim pv-postgre.yaml
![]()
apiVersion: v1
kind: PersistentVolume
metadata:name: pv-postgre
spec:capacity:storage: 5Gi #配置容量大小volumeMode: FilesystemaccessModes:- ReadWriteOnce #配置访问策略为只允许一个节点读写persistentVolumeReclaimPolicy: Retain #配置回收策略,Retain为手动回收storageClassName: "pv-postgre" #配置为nfsnfs:path: /opt/postgre #配置nfs服务端的共享路径server: 192.168.204.8 #配置nfs服务器地址
(3)生成资源
[root@master ~]# kubectl apply -f pv-postgre.yaml
(4)查看pv
[root@master ~]# kubectl get pv
(5)拉取镜像
node2
[root@node2 ~]# docker pull postgres:11.4
(6) 导出镜像
[root@node2 ~]# docker save -o postgres.tar postgres:11.4
![]()
(7)复制Docker镜像到node1节点
[root@node2 ~]# scp postgres.tar root@node1:~
(8)node1节点导入Docker镜像
[root@node1 ~]# docker load -i postgres.tar

(9)部署postgresql
[root@master ~]# vim postgre.yaml
![]()
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: postgre-pvcnamespace: sonarqube
spec:accessModes:- ReadWriteOncestorageClassName: "pv-postgre"resources:requests:storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:name: postgres-sonarlabels:app: postgres-sonarnamespace: sonarqube
spec:replicas: 1selector:matchLabels:app: postgres-sonartemplate:metadata:labels:app: postgres-sonarspec:containers:- name: postgres-sonarimage: postgres:11.4imagePullPolicy: IfNotPresentports:- containerPort: 5432env:- name: POSTGRES_DBvalue: "sonarDB"- name: POSTGRES_USERvalue: "sonarUser"- name: POSTGRES_PASSWORDvalue: "123456"resources:limits:cpu: 1000mmemory: 2048Mirequests:cpu: 500mmemory: 1024MivolumeMounts:- name: datamountPath: /var/lib/postgresql/datavolumes:- name: datapersistentVolumeClaim:claimName: postgre-pvc
---
apiVersion: v1
kind: Service
metadata:name: postgres-sonarnamespace: sonarqubelabels:app: postgres-sonar
spec:ports:- port: 5432protocol: TCPtargetPort: 5432selector:app: postgres-sonar


(10) 生成资源
[root@master ~]# kubectl apply -f postgre.yaml

(11) 查看pv,pvc
[root@master ~]# kubectl get pv[root@master ~]# kubectl get pvc -n sonarqube


(12) 查看pod,svc
[root@master ~]# kubectl get pod.svc -n sonarqube

(13)Kuboard查看
工作负载

容器组

服务

(14)创建sonarqube的pv
[root@master ~]# vim pv-sonar.yaml
![]()
apiVersion: v1
kind: PersistentVolume
metadata:name: pv-sonar
spec:capacity:storage: 10Gi #配置容量大小volumeMode: FilesystemaccessModes:- ReadWriteOnce #配置访问策略为只允许一个节点读写persistentVolumeReclaimPolicy: Retain #配置回收策略,Retain为手动回收storageClassName: "pv-sonar" #配置为nfsnfs:path: /opt/sonar #配置nfs服务端的共享路径server: 192.168.204.8 #配置nfs服务器地址

(15)生成资源
[root@master ~]# kubectl apply -f pv-sonar.yaml
(16)查看pv
[root@master ~]# kubectl get pv

(17)拉取镜像
node1
[root@node1 ~]# docker pull sonarqube:lts
(18) 导出镜像
[root@node1 ~]# docker save -o sonar.tar sonarqube:lts

(19)复制Docker镜像到node1节点
[root@node1 ~]# scp sonar.tar root@node2:~
(20)node1节点导入Docker镜像
[root@node2 ~]# docker load -i sonar.tar

(21) 部署sonarqube
[root@master ~]# vim sonar.yaml
![]()
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: sonarqube-pvcnamespace: sonarqube
spec:accessModes:- ReadWriteOncestorageClassName: "pv-sonar"resources:requests:storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:name: sonarqubelabels:app: sonarqubenamespace: sonarqube
spec:replicas: 1selector:matchLabels:app: sonarqubetemplate:metadata:labels:app: sonarqubespec:initContainers:- name: init-sysctlimage: busyboximagePullPolicy: IfNotPresentcommand: ["sysctl", "-w", "vm.max_map_count=262144"]securityContext:privileged: truecontainers:- name: sonarqubeimage: sonarqube:ltsports:- containerPort: 9000env:- name: SONARQUBE_JDBC_USERNAMEvalue: "sonarUser"- name: SONARQUBE_JDBC_PASSWORDvalue: "123456"- name: SONARQUBE_JDBC_URLvalue: "jdbc:postgresql://postgres-sonar:5432/sonarDB" #postgres-sonar改成集群IPlivenessProbe:httpGet:path: /sessions/newport: 9000initialDelaySeconds: 60periodSeconds: 30readinessProbe:httpGet:path: /sessions/newport: 9000initialDelaySeconds: 60periodSeconds: 30failureThreshold: 6resources:limits:cpu: 2000mmemory: 2048Mirequests:cpu: 1000mmemory: 1024MivolumeMounts:- mountPath: /opt/sonarqube/confname: datasubPath: conf- mountPath: /opt/sonarqube/dataname: datasubPath: data- mountPath: /opt/sonarqube/extensionsname: datasubPath: extensionsvolumes:- name: datapersistentVolumeClaim:claimName: sonarqube-pvc
---
apiVersion: v1
kind: Service
metadata:name: sonarqubenamespace: sonarqubelabels:app: sonarqube
spec:type: NodePortports:- name: sonarqubeport: 9000targetPort: 9000nodePort: 30090protocol: TCPselector:app: sonarqube


(22) 生成资源
[root@master ~]# kubectl apply -f sonar.yaml

(23) 查看pv,pvc
[root@master ~]# kubectl get pv[root@master ~]# kubectl get pvc -n sonarqube


(24)查看pod,svc
[root@master ~]# kubectl get pod,svc -n sonarqube


(25)部署ingress
[root@master ~]# vim ingress-sonar.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-sonarnamespace: sonarqube
spec:ingressClassName: "nginx"rules:- host: sonarqube.sitehttp:paths:- path: /pathType: Prefixbackend:service:name: sonarqubeport:number: 9000
(26)生成资源
[root@master ~]# kubectl apply -f ingress-sonar.yaml

(27)查看ingress
[root@master ~]# kubectl get ingress -n sonarqube
(28)详细查看
[root@master ~]# kubectl describe ingress ingress-sonar -n sonarqube
Name: ingress-sonar
Labels: <none>
Namespace: sonarqube
Address: 10.101.23.182
Ingress Class: nginx
Default backend: <default>
Rules:Host Path Backends---- ---- --------sonarqube.site / sonarqube:9000 (10.244.166.129:9000)
Annotations: <none>
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Sync 72s (x2 over 86s) nginx-ingress-controller Scheduled for syncNormal Sync 72s (x2 over 86s) nginx-ingress-controller Scheduled for sync

(29)Kuboard查看
应用路由

详细信息

(30)master节点修改hosts
[root@master ~]# vim /etc/hosts
![]()

(31)查看
ingress-nginx-controller对外暴露端口为31820

(32)curl测试
[root@master ~]# curl sonarqube.site:31820

(33)物理机修改hosts


(34)访问系统
http://sonarqube.site:31820
(35)输入用户名和密码
账号:admin密码:admin
(36) 设置新密码
弹出

修改

(37)进入系统

(38)其他方式的Sonarqube部署
可以参考本人博客:
持续集成交付CICD:CentOS 7 安装 Sonarqube9.6-CSDN博客
二、问题
1.chart安装Sonarqube报错
(1)报错
Error: INSTALLATION FAILED: cannot load values.yaml: error converting YAML to JSON: yaml: line 67: mapping values are not allowed in this context
![]()
(2)原因
格式错误。
(3)解决方法
修改配置文件。
修改前:

修改后:

2.K8S 部署sonarqube报错
(1)报错
查看pod,svc

查看deploy

(2) 原因分析
JDBC连接postgresql失败,value: "jdbc:postgresql://postgres-sonar:5432/sonarDB"中的postgres-sonar需要写入集群IP。
(3)解决方法
修改配置文件:
[root@master ~]# kubectl edit deploy sonarqube -n sonarqube
![]()
修改后:
![]()
成功:
[root@master ~]# kubectl get pod,svc -n sonarqube

相关文章:
云原生Kubernetes: K8S 1.29版本 部署Sonarqube
一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注masterK8S master节点1.29.0192.168.204.8 node1K8S node节点1.29.0192.168.204.9node2K8S node节点1.29.0192.168.204.10已部署Kuboard (2)master节点查看集群 1&…...
读天才与算法:人脑与AI的数学思维笔记19_深度数学
1. 深度数学 1.1. 组合与选择,是发明新事物的两个不可或缺的条件 1.1.1. 保尔瓦雷里(Paul Valry) 1.2. 利用以往的数学定理证明过程训练算法,以发现新的定理 1.3. 谷歌设在伦敦的总部整体有一种现代牛津大学的感觉,…...
Springboot+Vue项目-基于Java+MySQL的旅游网站系统(附源码+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...
Element UI 简介
Element UI是一个基于Vue.js的组件库,提供了一套丰富的可复用的组件,包括按钮、表单、弹框、表格、菜单等等。它的设计风格简洁大方,易于使用,能够帮助开发者快速构建现代化的Web应用。 在Element UI中,有许多常用的组…...
mysql 删除重复的数据保留id最大的一条
在 MySQL 中,可以使用以下查询删除重复数据,只保留 ID 最大的那条记录: SQL DELETE t FROM table_name t LEFT JOIN ( SELECT column_name, MAX(id) AS max_id FROM table_name GROUP BY column_name ) t2 ON t.column_name t2…...
UE4 Widget制作搜索框
效果: 一、控件层级结构 1.父控件层级结构 2.子控件层级结构 二、蓝图 1.先清除掉创建子项(注意:这里使用的是reverse循环!) 2.判断是否含有关键字,创建子控件...
JavaScript js写九九乘法表(两种方法)
方法一: 观察规律: 第一个数每行都是自增1。 我们发下第二个数都是从1开始,依次递增1,永远不大于前面的数。 前面数字每自增一次,后面数字自增一轮。 我们可以用双重for循环,外层初始值设为i࿰…...
算法--贪心算法
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法在有最优子结构的问题中尤其有效,这意味着局部最优解能决定全局最优解。简单来说,贪心…...
Redis基本數據結構 ― String
Redis基本數據結構 ― String 介紹常用命令範例1. 為字串鍵設值/取得字串鍵的值2. 查看字串鍵的過期時間3. 如何為key設置時間?4. 如何刪除指定key?5. 如何增加value的值?6. 獲取value值的長度 介紹 字串鍵是Redis中最基本的鍵值對類型,這種類型的鍵值對會在數據…...
php7.4在foreach中对使用数据使用无法??[]判读,无法使用引用传递
代码如下图:这样子在foreach中是无法修改class_history的。正确的应该是去掉??[]判断。 public function actionY(){$array [name>aaa,class_history>[[class_name>一班,class_num>1],[class_name>二班,class_num>2]]];foreach ($array[class_…...
传输层协议 TCP UDP协议 解析(二)
文章目录 UDP:用户数据报协议UDP报文格式TCP与UDP的区别 UDP:用户数据报协议 UDP是一种面向无连接的传输层协议(数据一直发送,没有ack,所以不需要考虑ack),传输可靠性没有保证。 UDP不提供重传…...
java+jsp+Oracle+Tomcat 记账管理系统论文(一)
⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️ ➡️点击免费下载全套资料:源码、数据库、部署教程、论文、答辩ppt一条龙服务 ➡️有部署问题可私信联系 ⬆️⬆️⬆️⬆️…...
echarts双Y轴,并实现图例等
一个Y轴时yAxis为对象 yAxis: {type: value,name: 占比(%) },两个Y轴时yAxis为数组 yAxis: [{ // 左侧的type: value,name: 占比(%),nameTextStyle: {padding: [0, 0, 10, -50]},min: 0,max: 100,splitNumber: this.splitNumber, // 设置坐标轴的分割段数interval: 20, // 标轴…...
STM32 工程移植 LVGL:一步一步完成
STM32 工程移植 LVGL:一步一步完成 LVGL,作为一款强大且灵活的开源图形库,专为嵌入式系统GUI设计而生,极大地简化了开发者在创建美观用户界面时的工作。作为一名初学者,小编正逐步深入探索LVGL的奥秘,并决…...
Linux中分析日志及问题排查
可以参考:Linux命令 Linux系统日志是系统管理和故障排查的关键工具。通过分析系统日志,我们能够深入了解系统的运行状况,迅速发现并解决潜在的问题。 1. 日志文件位置 系统日志通常存储在/var/log/目录下,不同的日志有不同的文件,如下: /var/log/syslog:系统日志,包含…...
复杂环境下实时鲁棒3D激光雷达定位
复杂环境下实时鲁棒3D激光雷达定位 一、摘要 定位是机器人领域的重要研究方向。本篇文章里,我们提出了一种基于3D激光雷达的复杂环境下的定位方案。我们首先使用GPS和雷达建立一张点云地图,然后在匹配定位的时候从大地图中分割出一个小地图,…...
9.3.k8s的控制器资源(deployment部署控制器)
目录 一、deployment部署控制器概念 二、deployment资源的清单编写 三、小结 功能 使用场景 原理 四、deployment实现升级和回滚 1.编辑deployment资源清单(v1版本) 2.创建service资源用于访问 编辑 3.修改deploy清单中pod镜像版本为V2 4…...
通过符号程序搜索提升prompt工程
原文地址:supercharging-prompt-engineering-via-symbolic-program-search 通过自动探索大量提示变体来找到更好的提示 2024 年 4 月 22 日 众所周知,LLMs的成功在很大程度上仍然取决于我们用正确的指导和例子来提示他们的能力。随着新一代LLMs变得越…...
js开启子线程及其使用
众所周知,js是单线程,但是可以开启子线程来帮忙处理一些数据,但是这个子线程是有限制的 1.必须是同源 2.完全受主线程控制 3.不能在子线程中操作dom节点 4.子线程没有window,可以使用self 5.等等 具体的查看官网 进程切换是要耗时…...
excel办公系列-图表元素及其作用
Excel图表元素及其作用 Excel图表由各种元素组成,每个元素都有其特定的作用,可以帮助我们更清晰地传达数据信息。下面将介绍Excel图表中常见的一些元素及其作用,并附上相关截图。 原始数据 月份 网站访问量 (万次) 销售额 (万…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...













