当前位置: 首页 > news >正文

云原生Kubernetes: K8S 1.29版本 部署Sonarqube

 一、实验

1.环境

(1)主机

表1 主机

主机架构版本IP备注
masterK8S master节点1.29.0192.168.204.8

node1K8S node节点1.29.0192.168.204.9
node2K8S node节点1.29.0192.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.环境 &#xff08;1&#xff09;主机 表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 &#xff08;2&#xff09;master节点查看集群 1&…...

读天才与算法:人脑与AI的数学思维笔记19_深度数学

1. 深度数学 1.1. 组合与选择&#xff0c;是发明新事物的两个不可或缺的条件 1.1.1. 保尔瓦雷里&#xff08;Paul Valry&#xff09; 1.2. 利用以往的数学定理证明过程训练算法&#xff0c;以发现新的定理 1.3. 谷歌设在伦敦的总部整体有一种现代牛津大学的感觉&#xff0c…...

Springboot+Vue项目-基于Java+MySQL的旅游网站系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…...

Element UI 简介

Element UI是一个基于Vue.js的组件库&#xff0c;提供了一套丰富的可复用的组件&#xff0c;包括按钮、表单、弹框、表格、菜单等等。它的设计风格简洁大方&#xff0c;易于使用&#xff0c;能够帮助开发者快速构建现代化的Web应用。 在Element UI中&#xff0c;有许多常用的组…...

mysql 删除重复的数据保留id最大的一条

在 MySQL 中&#xff0c;可以使用以下查询删除重复数据&#xff0c;只保留 ID 最大的那条记录&#xff1a; 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制作搜索框

效果&#xff1a; 一、控件层级结构 1.父控件层级结构 2.子控件层级结构 二、蓝图 1.先清除掉创建子项&#xff08;注意&#xff1a;这里使用的是reverse循环&#xff01;&#xff09; 2.判断是否含有关键字&#xff0c;创建子控件...

JavaScript js写九九乘法表(两种方法)

方法一&#xff1a; 观察规律&#xff1a; 第一个数每行都是自增1。 我们发下第二个数都是从1开始&#xff0c;依次递增1&#xff0c;永远不大于前面的数。 前面数字每自增一次&#xff0c;后面数字自增一轮。 我们可以用双重for循环&#xff0c;外层初始值设为i&#xff0…...

算法--贪心算法

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法在有最优子结构的问题中尤其有效&#xff0c;这意味着局部最优解能决定全局最优解。简单来说&#xff0c;贪心…...

Redis基本數據結構 ― String

Redis基本數據結構 ― String 介紹常用命令範例1. 為字串鍵設值/取得字串鍵的值2. 查看字串鍵的過期時間3. 如何為key設置時間?4. 如何刪除指定key?5. 如何增加value的值?6. 獲取value值的長度 介紹 字串鍵是Redis中最基本的鍵值對類型&#xff0c;這種類型的鍵值對會在數據…...

php7.4在foreach中对使用数据使用无法??[]判读,无法使用引用传递

代码如下图&#xff1a;这样子在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&#xff1a;用户数据报协议UDP报文格式TCP与UDP的区别 UDP&#xff1a;用户数据报协议 UDP是一种面向无连接的传输层协议&#xff08;数据一直发送&#xff0c;没有ack&#xff0c;所以不需要考虑ack&#xff09;&#xff0c;传输可靠性没有保证。 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&#xff1a;一步一步完成 LVGL&#xff0c;作为一款强大且灵活的开源图形库&#xff0c;专为嵌入式系统GUI设计而生&#xff0c;极大地简化了开发者在创建美观用户界面时的工作。作为一名初学者&#xff0c;小编正逐步深入探索LVGL的奥秘&#xff0c;并决…...

Linux中分析日志及问题排查

可以参考:Linux命令 Linux系统日志是系统管理和故障排查的关键工具。通过分析系统日志,我们能够深入了解系统的运行状况,迅速发现并解决潜在的问题。 1. 日志文件位置 系统日志通常存储在/var/log/目录下,不同的日志有不同的文件,如下: /var/log/syslog:系统日志,包含…...

复杂环境下实时鲁棒3D激光雷达定位

复杂环境下实时鲁棒3D激光雷达定位 一、摘要 定位是机器人领域的重要研究方向。本篇文章里&#xff0c;我们提出了一种基于3D激光雷达的复杂环境下的定位方案。我们首先使用GPS和雷达建立一张点云地图&#xff0c;然后在匹配定位的时候从大地图中分割出一个小地图&#xff0c…...

9.3.k8s的控制器资源(deployment部署控制器)

目录 一、deployment部署控制器概念 二、deployment资源的清单编写 三、小结 功能 使用场景 原理 四、deployment实现升级和回滚 1.编辑deployment资源清单&#xff08;v1版本&#xff09; 2.创建service资源用于访问 ​编辑 3.修改deploy清单中pod镜像版本为V2 4…...

通过符号程序搜索提升prompt工程

原文地址&#xff1a;supercharging-prompt-engineering-via-symbolic-program-search 通过自动探索​​大量提示变体来找到更好的提示 2024 年 4 月 22 日 众所周知&#xff0c;LLMs的成功在很大程度上仍然取决于我们用正确的指导和例子来提示他们的能力。随着新一代LLMs变得越…...

js开启子线程及其使用

众所周知&#xff0c;js是单线程&#xff0c;但是可以开启子线程来帮忙处理一些数据&#xff0c;但是这个子线程是有限制的 1.必须是同源 2.完全受主线程控制 3.不能在子线程中操作dom节点 4.子线程没有window&#xff0c;可以使用self 5.等等 具体的查看官网 进程切换是要耗时…...

excel办公系列-图表元素及其作用

Excel图表元素及其作用 Excel图表由各种元素组成&#xff0c;每个元素都有其特定的作用&#xff0c;可以帮助我们更清晰地传达数据信息。下面将介绍Excel图表中常见的一些元素及其作用&#xff0c;并附上相关截图。 原始数据 月份 网站访问量 (万次&#xff09; 销售额 (万…...

rocketmq dashboard控制台中topic状态无法展示

现象 在使用rocketmq控制台查看topic状态和订阅状态时&#xff0c;出现错误和没有信息的情况。 原因 rocketmq控制台版本问题&#xff0c;最新版本为1.0.1&#xff0c;支持rocketmq5版本&#xff0c;如果使用rocketmq4版本的服务无法兼容对应的数据。同理1.0.0版本也无法兼容ro…...

GPT每日面试题-Typescript中type和interface的区别

充分利用ChatGPT的优势&#xff0c;帮助我们快速准备前端面试。今日问题&#xff1a;typescript中type和interface的区别? Q&#xff1a;如果在前端面试中&#xff0c;被问到typescript的type和interface的区别是什么&#xff0c;怎么回答最好&#xff1f; A&#xff1a;当谈…...

python数据分析——大数据伦理风险分析

大数据伦理风险分析 前言一、大数据伦理二、大数据技术伦理风险2.1算法安全性、可信赖性及稳定性风险及其应对2.2算法的可解释性风险及其应对2.3算法的决策不可预见性风险及其应对2.4数据收集与储存中的泄漏风险及其应对2.5案例&#xff1a;某大型电商平台内部员工涉嫌窃取50亿…...

配置 Trunk,实现相同VLAN的跨交换机通信

1.实验环境 公司的员工人数已达到 100 人&#xff0c;其网络设备如图所示。现在的网络环境导致广播较多网速慢&#xff0c;并且也不安全。公司希望按照部门划分网络&#xff0c;并且能够保证一定的网络安全性。 其网络规划如下。 PC1和 PC3为财务部&#xff0c;属于VLAN 2&…...

Python 植物大战僵尸

文章目录 效果图项目结构实现思路源代码 效果图 项目结构 实现思路 下面是代码的实现思路&#xff1a; 导入必要的库和模块&#xff1a;首先&#xff0c;我们导入了Python的os、time库以及pygame库&#xff0c;还有植物大战僵尸游戏中用到的各个植物和僵尸的类。 初始化游戏和…...

SpringBoot:实战项目TLIAS智能学习辅助系统1.1

SpringBootWeb项目 TILAS智能学习辅助系统 需求 部门管理 查询部门列表 删除部门 新增部门 修改部门 员工管理 查询员工列表(分页) 删除员工 新增员工 修改员工 准备工作 导入依赖 web(2.7.6) mybatis mysql驱动 lombok 准备好包结构 Controller->Servi…...

ubuntu-meta-22.04桌面版+ros2-humble 镜像

ubuntu-meta-22.04桌面版ros2-humble 镜像 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1PSBe4EqWch44OQUlkCCEig?pwdknty 提取码&#xff1a;knty 镜像文件较大&#xff0c;分成了两个压缩包&#xff0c;下载后直接解压ubuntu22.04-desk-meta-ros2-arm (…...

『大模型笔记』Code Example: Function Calling with ChatGPT

Code Example: Function Calling with ChatGPT 文章目录 一. Code Example: Function Calling with ChatGPT二. 参考文献一. Code Example: Function Calling with ChatGPT from openai import OpenAI from dotenv import load_dotenv import json# --------------------------…...

【智能算法应用】混合粒子群算法求解CVRP问题

目录 1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】粒子群算法&#xff08;PSO&#xff09;原理及实现 经典PSO算法用于连续空间优化问题&#xff0c;VRP问题为离散组合优化问题&#xff0c;涉及如何有效地分配一组车辆去访问多个客户点&…...

Python项目开发实战:飞机大战游戏(案例教程)

一、引言 飞机大战游戏是一款经典的射击类游戏&#xff0c;玩家需要驾驶飞机在空中与敌人进行战斗&#xff0c;躲避敌人的攻击&#xff0c;同时发射子弹消灭敌人。本文将详细介绍如何使用Python及其相关库来开发一款简单的飞机大战游戏&#xff0c;包括游戏的设计思路、开发过…...

做旅游行程的网站推荐/网站点击量软件

我安装的是PHP Version 5.3.26&#xff0c;按照网上提示在Eclipse中使用XDebug进行调试&#xff0c;不过配置了却使用不了&#xff0c;下面把解决方法简要说一下。 XDebug老是加载不了 From PHP 5.3 onwards, you always need to use the zend_extension PHP.ini setting name,…...

做网站引流的最佳方法/长安网站优化公司

php include 和io流的效率之前看了&#xff0c;平凡的世界大大的一篇文章 传送门 &#xff0c;php文件缓存性能测试。很不以为然&#xff0c;include怎么会比io流慢了 &#xff0c;就算加上序列化&#xff0c;按照常理&#xff0c;include也会稍快一些&#xff0c;但是事实却是…...

乐山网站制作设计公司/小学培训机构

71. 隐藏标题栏和菜单栏隐藏标题栏 ModifyStyle(WS_CAPTION,0)隐藏菜单栏 SetMenu(NULL)72. InflateRectInflateRect这个函数用于增大或减小一个矩形的大小.如m_graphRect.InflateRect(-70, -30, -30, -50);将矩形左边坐标加70&#xff0c;上面加30&#xff0c;右边减30&#x…...

服装网站建设目的/推广普通话绘画

我们前面做了一个这样的页面&#xff0c;为了增加我们的学习难度&#xff0c;我们特意拆分成了不同的组件。 我们知道&#xff0c;我们在子组件里并不能直接对兄弟组件里的属性进行操作&#xff0c;我们通过this.$emit() 调用父组件的方法&#xff0c;通过this.$parent.$data.…...

南昌做建网站的/谷歌推广怎么操作

问题引入&#xff1a; 在进行一个条件查询的时候&#xff0c;没太注意&#xff1d;&#xff1d; 与equal之间的区别&#xff0c;之间用&#xff1d;&#xff1d;来判断两个字符串是否相等&#xff0c;明明都是中文“全部”&#xff0c;却没有结果&#xff0c;于是开始调试 case…...

网站建设 自助建站/百度一下首页网页手机版

上一篇&#xff1a;《IDDD 实现领域驱动设计&#xff0d;CQRS&#xff08;命令查询职责分离&#xff09;和 EDA&#xff08;事件驱动架构&#xff09;》 学习架构知识&#xff0c;需要有一些功底和经验&#xff0c;要不然你会和我一样吃力&#xff0c;CQRS、EDA、ES、Saga 等等…...