项目实战:k8s部署考试系统

news2024/12/27 10:30:55

一、新建nfs服务器(192.168.1.44)

1.基础配置(IP地址防火墙等)

2.配置时间同步

[root@localhost ~]# yum -y install ntpdate.x86_64 
[root@localhost ~]# ntpdate time2.aliyun.com
27 Sep 10:28:08 ntpdate[1634]: adjust time server 203.107.6.88 offset 0.014965 sec
[root@localhost ~]# crontab -e                   //设置计划任务
* 3 * * * /sbin/ntpdate time2.aliyun.com

3.安装nfs服务应用

[root@localhost ~]# yum -y install rpcbind nfs-utils

4.配置文件

[root@localhost ~]# echo "/root/pes    *(rw,sync)" >> /etc/exports
[root@localhost ~]# cat /etc/exports
/root/pes   *(rw.sync)

5.准备pes资源目录(部署考试系统项目)

6.启动服务

[root@localhost ~]# systemctl start rpcbind.service nfs-server.service                      //启动
[root@localhost ~]# systemctl enable rpcbind.service nfs-server.service                   //设置开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

7.验证

[root@localhost ~]# showmount -e localhost                  //这样代表成功
Export list for localhost:
/root/pes *

二、部署前端

1.创建web-deployment.yaml资源清单文件

[root@k8s-master ~]# mkdir pes-k8s
[root@k8s-master ~]# cd pes-k8s
[root@k8s-master pes-k8s]# vim web-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  web-deployment
  namespace: default
  labels:
    app:  web-deployment
spec:
  selector:
    matchLabels:
      app: web-deployment
  replicas: 3
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app:  web-deployment
    spec:
      containers:
      - name:  nginxlatest
        image:  docker.io/library/nginx:latest
        imagePullPolicy: Never
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort:  80
          name:  nginxport
        volumeMounts:
        - name: localtime
          mountPath: /usr/share/nginx/html
      volumes:
        - name: localtime
          nfs:
            server: 192.168.1.44
            path: /root/pes/web/dist
      restartPolicy: Always

[root@k8s-master pes-k8s]# kubectl create -f web-deployment.yaml 
deployment.apps/web-deployment created
[root@k8s-master pes-k8s]# kubectl get po -owide
NAME                              READY   STATUS    RESTARTS       AGE   IP               NODE        NOMINATED NODE   READINESS GATES
cluster-test-66bb44bd88-nk46t     1/1     Running   76 (21m ago)   14d   172.16.169.179   k8s-node2   <none>           <none>
web-deployment-7bff5ff45c-45rz6   1/1     Running   0              13m   172.16.169.186   k8s-node2   <none>           <none>
web-deployment-7bff5ff45c-nlq2s   1/1     Running   0              13m   172.16.36.76     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-whkd2   1/1     Running   0              13m   172.16.169.185   k8s-node2   <none>           <none>

2.访问测试

[root@k8s-master pes-k8s]# curl 172.16.169.186
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
    <script type="module" crossorigin src="/assets/index-C4kAShR5.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-CSz7ARPP.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

三、部署Java后台

1.自定义Java容器

(1)把nfs主机的下的pes/java目录传到k8s-master主机

[root@localhost ~]# scp -r pes/java root@192.168.1.110:/root/

(2)查看java目录是否传过来

[root@k8s-master pes-k8s]# ls ~
anaconda-ks.cfg  java                 mysql.tar         nginx.1.25.0.tar  tdr
busybox.tar      k8s-ha-install       new.yaml          nginx.tar         token
centos.tar       kubeadm-config.yaml  nginx.1.20.0.tar  pes-k8s           wordpress.tar
haproxy.tar      mariadb.tar          nginx.1.21.0.tar  pods
[root@k8s-master pes-k8s]# cd ~/java/
[root@k8s-master java]# ls
Dockerfile  jdk  src  start.sh

(3)创建Java镜像

[root@k8s-master java]# systemctl start docker.service 
[root@k8s-master java]# docker build -t java:v0 ./                          //使用Dockerfile创建镜像


[root@k8s-master java]# docker images                  //查看
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
java         v0        5c0a07c9bcfb   2 minutes ago   592MB
wordpress    latest    e6e656a22e5a   2 weeks ago     699MB
haproxy      latest    a782c02b8259   3 weeks ago     103MB
mariadb      latest    09f5b532c2ef   3 weeks ago     414MB
nginx        alpine    c7b4f26a7d93   6 weeks ago     43.2MB
nginx        latest    39286ab8a5e1   6 weeks ago     188MB
mysql        5.7.44    5107333e08a8   9 months ago    501MB
nginx        1.25.0    7d3c40f240e1   15 months ago   143MB
busybox      latest    6fd955f66c23   16 months ago   4.26MB
centos       latest    5d0da3dc9764   3 years ago     231MB
nginx        1.21.0    4f380adfc10f   3 years ago     133MB
nginx        1.20.0    7ab27dbbfbdf   3 years ago     133MB

(4)打包上传到k8s-node节点上

[root@k8s-master java]# docker save -o java.tar java:v0                   //打包
[root@k8s-master java]# scp java.tar root@192.168.1.22:~                   //上传node1节点
java.tar                                                             100%  572MB  25.2MB/s   00:22    
[root@k8s-master java]# scp java.tar root@192.168.1.33:~                   //上传node2节点
java.tar                                                             100%  572MB  22.9MB/s   00:24   

(5)去node1和node2导入镜像

[root@k8s-node1 ~]# ctr -n k8s.io images import java.tar --platform linux/amd64
unpacking docker.io/library/java:v0 (sha256:a3fe9b7e8ff3f56cf95e4d35c0206237c3aeea3ebf10817d99523509c0a59fbc)...done
[root@k8s-node2 ~]# ctr -n k8s.io images import java.tar --platform linux/amd64
unpacking docker.io/library/java:v0 (sha256:a3fe9b7e8ff3f56cf95e4d35c0206237c3aeea3ebf10817d99523509c0a59fbc)...done
[root@k8s-node1 ~]# crictl images|grep java                     //查看
docker.io/library/java                                           v0                  5c0a07c9bcfb3       599MB
[root@k8s-node2 ~]# crictl images|grep java
docker.io/library/java                                           v0                  5c0a07c9bcfb3       599MB

2.创建java-deployment.yaml资源清单文件

[root@k8s-master java]# cd
[root@k8s-master ~]# cd pes-k8s/ 
[root@k8s-master pes-k8s]# vim java-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  java-deployment
  namespace: default
  labels:
    app:  java-deployment
spec:
  selector:
    matchLabels:
      app: java-deployment
  replicas: 3
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app:  java-deployment
    spec:
      # initContainers:
        # Init containers are exactly like regular containers, except:
          # - Init containers always run to completion.
          # - Each init container must complete successfully before the next one starts.
      containers:
      - name:  java
        image:  docker.io/library/java:v0
        imagePullPolicy: Never
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 100m
            memory: 300Mi                          #这里得多给点

        ports:
        - containerPort:  8080
          name:  javaport
        volumeMounts:
        - name: localtime
          mountPath: /java/src
      volumes:
        - name: localtime
          nfs:
            server: 192.168.1.44
            path: /root/pes/java/src
      restartPolicy: Always

[root@k8s-master pes-k8s]# kubectl create -f java-deployment.yaml 
deployment.apps/java-deployment created
[root@k8s-master pes-k8s]# kubectl get po -owide
NAME                               READY   STATUS    RESTARTS       AGE    IP               NODE        NOMINATED NODE   READINESS GATES
cluster-test-66bb44bd88-nk46t      1/1     Running   80 (12m ago)   14d    172.16.169.179   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-bgq2s   1/1     Running   0              109s   172.16.169.132   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-bnsr9   1/1     Running   0              109s   172.16.169.137   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-hz7s6   1/1     Running   0              109s   172.16.36.94     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-45rz6    1/1     Running   0              4h5m   172.16.169.186   k8s-node2   <none>           <none>
web-deployment-7bff5ff45c-nlq2s    1/1     Running   0              4h5m   172.16.36.76     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-whkd2    1/1     Running   0              4h5m   172.16.169.185   k8s-node2   <none>           <none>

注意:压缩包在解压过程中可能出现问题,比如权限丢失

给相应的权限即可

3.访问测试

[root@k8s-master pes-k8s]# curl 172.16.169.132:8080                    //这样表示成功
{"code":20002,"msg":"账号不存在或密码错误"}[root@k8s-master pes-k8s]# 


四、部署数据库

1.部署mysql-deployment.yaml文件

[root@k8s-master pes-k8s]# vim mysql-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  mysql-deploy
  namespace: default
  labels:
    app:  mysql-deploy
spec:
  selector:
    matchLabels:
      app: mysql-deploy
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app:  mysql-deploy
    spec:
      # initContainers:
        # Init containers are exactly like regular containers, except:
          # - Init containers always run to completion.
          # - Each init container must complete successfully before the next one starts.
      containers:
      - name:  mysql-deployment
        image:  docker.io/library/mysql:5.7.44
        imagePullPolicy: Never
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 100m
            memory: 200Mi

        ports:
        - containerPort:  3306
          name:  mysql-deploy
        volumeMounts:
        - name: localtime
          mountPath: /var/lib/mysql
      volumes:
        - name: localtime
          nfs:
            server: 192.168.1.44
            path: /root/pes/mysql/data
      restartPolicy: Always
[root@k8s-master pes-k8s]# kubectl create -f mysql-deployment.yaml 
deployment.apps/mysql-deploy created
[root@k8s-master pes-k8s]# kubectl get po               //这里发现mysql没创建成功,这是由于权限不够
NAME                               READY   STATUS             RESTARTS       AGE
cluster-test-66bb44bd88-nk46t      1/1     Running            80 (30m ago)   14d
java-deployment-7948cbb74b-bgq2s   1/1     Running            0              20m
java-deployment-7948cbb74b-bnsr9   1/1     Running            0              20m
java-deployment-7948cbb74b-hz7s6   1/1     Running            0              20m
mysql-deploy-77776fd66f-4fd5r      0/1     CrashLoopBackOff   2 (20s ago)    45s
web-deployment-7bff5ff45c-45rz6    1/1     Running            0              4h23m
web-deployment-7bff5ff45c-nlq2s    1/1     Running            0              4h23m
web-deployment-7bff5ff45c-whkd2    1/1     Running            0              4h23m

2.到nfs主机

[root@localhost ~]# vim /etc/exports
/root/pes    *(rw,sync,no_root_squash)
[root@localhost ~]# systemctl restart nfs.service             //重启

3.回到k8s-master

[root@k8s-master pes-k8s]# kubectl delete -f mysql-deployment.yaml         //先删
deployment.apps "mysql-deploy" deleted
[root@k8s-master pes-k8s]# kubectl create -f mysql-deployment.yaml           //再创
deployment.apps/mysql-deploy created
[root@k8s-master pes-k8s]# kubectl get po 
NAME                               READY   STATUS    RESTARTS       AGE
cluster-test-66bb44bd88-nk46t      1/1     Running   80 (37m ago)   14d
java-deployment-7948cbb74b-bgq2s   1/1     Running   0              26m
java-deployment-7948cbb74b-bnsr9   1/1     Running   0              26m
java-deployment-7948cbb74b-hz7s6   1/1     Running   0              26m
mysql-deploy-77776fd66f-gr9l6      1/1     Running   0              4s
web-deployment-7bff5ff45c-45rz6    1/1     Running   0              4h30m
web-deployment-7bff5ff45c-nlq2s    1/1     Running   0              4h30m
web-deployment-7bff5ff45c-whkd2    1/1     Running   0              4h30m

4.访问测试

[root@k8s-master pes-k8s]# kubectl get po -owide       //查看IP
NAME                               READY   STATUS    RESTARTS       AGE     IP               NODE        NOMINATED NODE   READINESS GATES
cluster-test-66bb44bd88-nk46t      1/1     Running   80 (42m ago)   14d     172.16.169.179   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-bgq2s   1/1     Running   0              32m     172.16.169.132   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-bnsr9   1/1     Running   0              32m     172.16.169.137   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-hz7s6   1/1     Running   0              32m     172.16.36.94     k8s-node1   <none>           <none>
mysql-deploy-77776fd66f-gr9l6      1/1     Running   0              5m32s   172.16.36.85     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-45rz6    1/1     Running   0              4h35m   172.16.169.186   k8s-node2   <none>           <none>
web-deployment-7bff5ff45c-nlq2s    1/1     Running   0              4h35m   172.16.36.76     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-whkd2    1/1     Running   0              4h35m   172.16.169.185   k8s-node2   <none>           <none>
[root@k8s-master pes-k8s]# mysql -h 172.16.36.85 -uzhangmin -pzhangmin             //访问,主机必须得有mysql客户端

五、部署对应的service(代理,负载均衡)

[root@k8s-master ~]# kubectl get po --show-labels        //查看标签
NAME                               READY   STATUS    RESTARTS         AGE     LABELS
cluster-test-66bb44bd88-nk46t      1/1     Running   82 (5m54s ago)   14d     app=cluster-test,pod-template-hash=66bb44bd88
java-deployment-7948cbb74b-bgq2s   1/1     Running   1 (5m54s ago)    84m     app=java-deployment,pod-template-hash=7948cbb74b
java-deployment-7948cbb74b-bnsr9   1/1     Running   1 (5m54s ago)    84m     app=java-deployment,pod-template-hash=7948cbb74b
java-deployment-7948cbb74b-hz7s6   1/1     Running   1 (6m7s ago)     84m     app=java-deployment,pod-template-hash=7948cbb74b
mysql-deploy-77776fd66f-gr9l6      1/1     Running   1 (6m7s ago)     58m     app=mysql-deploy,pod-template-hash=77776fd66f
web-deployment-7bff5ff45c-45rz6    1/1     Running   1 (5m54s ago)    5h28m   app=web-deployment,pod-template-hash=7bff5ff45c
web-deployment-7bff5ff45c-nlq2s    1/1     Running   1 (6m7s ago)     5h28m   app=web-deployment,pod-template-hash=7bff5ff45c
web-deployment-7bff5ff45c-whkd2    1/1     Running   1 (5m54s ago)    5h28m   app=web-deployment,pod-template-hash=7bff5ff45c

1.部署web-deployment的service

[root@k8s-master pes-k8s]# vim web-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: web-service
  namespace: default
spec:
  selector:
    app: web-deployment
  type: NodePort
  sessionAffinity: None
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  ports:
  - name: webport
    protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32000
[root@k8s-master pes-k8s]# kubectl create -f web-service.yaml
service/web-service created
[root@k8s-master pes-k8s]# kubectl get svc                            //查看svc
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes    ClusterIP   10.96.0.1    <none>        443/TCP        14d
web-service   NodePort    10.96.3.80   <none>        80:32000/TCP   74s

2.浏览器访问192.168.1.110:32000

3.宿主机做hosts劫持

C:\Windows\System32\drivers\etc


4.部署java-deployment的service

[root@k8s-master pes-k8s]# vim java-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: javaservice
  namespace: default
spec:
  selector:
    app: java-deployment
  type: NodePort
  sessionAffinity: None
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  ports:
  - name: javaport
    protocol: TCP
    port: 8080
    targetPort:  8080
    nodePort: 32100
[root@k8s-master pes-k8s]# kubectl create -f java-service.yaml 
service/javaservice created
[root@k8s-master pes-k8s]# kubectl get svc                    //查看svc
NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
javaservice   NodePort    10.96.71.251   <none>        8080:32100/TCP   91s
kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          14d
web-service   NodePort    10.96.3.80     <none>        80:32000/TCP     13m

5.外部访问测试


这里请求不到,因为请求的是8080端口,而java服务是32100端口,可以使用代理(haproxy,ipvs,nginx等),也可以改变java服务请求的端口,改为32100(不建议)

6.改变请求java服务的端口(nfs主机)

[root@localhost ~]# cd pes/web/dist/assets/
[root@localhost assets]# for fn in $(ls *.js); do echo $fn; cat $fn|grep 8080; done //查找里面哪个文件有8080
[root@localhost assets]# vim index-8SnX15u9.js                 //将8080改为32100


7.访问测试


此时能够在外部访问web应用和java应用,发现500错误,查看java的日志文件,发现链接不到数据库
[root@k8s-master pes-k8s]# kubectl logs java-deployment-7948cbb74b-hz7s6 


8查看java配置文件(nfs主机)

[root@localhost ~]# cat pes/java/src/application.properties

9.部署mysql-deployment的service

[root@k8s-master pes-k8s]# vim mysql-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: hap                           #这里必须是hap,和java的配置文件保持一致
  namespace: default
spec:
  selector:
    app: mysql-deploy
  type: ClusterIP
  sessionAffinity: None
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  ports:
  - name: mysqlport
    protocol: TCP
    port: 3306
    targetPort: 3306
[root@k8s-master pes-k8s]# kubectl create -f mysql-service.yaml 
service/hap created
[root@k8s-master pes-k8s]# kubectl get svc
NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hap           ClusterIP   10.96.171.17   <none>        3306/TCP         76s
javaservice   NodePort    10.96.71.251   <none>        8080:32100/TCP   75m
kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          14d
web-service   NodePort    10.96.3.80     <none>        80:32000/TCP     87m

六、访问测试

[root@k8s-master pes-k8s]# mysql -h172.16.36.84 -uzhangmin -pzhangmin         //在mysql中获取账号密码
>select * from project_exam_system.user;

浏览器访问

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

风景视频素材高清无水印怎么找?推荐几个风景视频素材下载网站

那些绝美的大自然风景视频素材都在哪里找的&#xff1f;今天就跟大家聊聊那些可以下载高清无水印的大自然风景视频素材的网站&#xff0c;如果你也在苦苦寻找&#xff0c;快来看看吧&#xff5e; 1. 稻虎网 稻虎网作为国内遥遥领先的视频素材网站&#xff0c;提供了大量高清无…

2024最新Linux Socket编程

我们深谙信息交流的价值&#xff0c;那网络中进程之间如何通信&#xff0c;如我们每天打开浏览器浏览网页时&#xff0c;浏览器的进程怎么与web服务器通信的&#xff1f;当你用QQ聊天时&#xff0c;QQ进程怎么与服务器或你好友所在的QQ进程通信&#xff1f;这些都得靠socket&am…

Meta广告资料库使用教程:Facebook、Instagram海外社媒营销统统拿下!

社交媒体现今已成为大部分商家宣传推广方案中的重要工具&#xff0c;尤其是Meta旗下的两个主流社媒平台Facebook和Instagram&#xff0c;活跃用户数量以数十亿计&#xff0c;分布地区也非常广。要运用好自带影响力的社媒平台的传播力量和庞大数据&#xff0c;优化自身的宣传推广…

【Kubernetes】常见面试题汇总(四十二)

目录 96. Kubernetes 体系结构有哪些不同的组成部分&#xff1f; 97.您能否简要介绍一下 Kubernetes 中主节点的工作&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二…

亚马逊 Bedrock 平台也能使用Llama 3.2 模型了

亚马逊 Bedrock 平台推出 Llama 3.2 模型&#xff1a;多模态视觉和轻量级模型 概述 由 Meta 提供的最新 Llama 3.2 模型现已在 Amazon Bedrock 平台上推出。这一新模型系列标志着 Meta 在大型语言模型&#xff08;LLM&#xff09;领域的最新进展&#xff0c;它在多种应用场景…

养猫久了才发现,宠物空气净化器才是真正除猫毛的神器

相信每个打工人都在期待这个国庆小长假吧&#xff0c;终于等到了&#xff01;这次我要把属于我的都夺回来&#xff01;刚好工资到手、小长假我有&#xff0c;只想往家里一躺什么也不想&#xff0c;唯一最想做的就是要在这个节假日里好好的陪一下我家猫咪&#xff0c;还有就是买…

【企业微信】群机器人自动消息配置

0、群聊机器人 内部企微群聊可以添加一个机器人&#xff0c;这个机器人其实是个消息接口&#xff0c;可以外部脚本来自动定时发送消息到群里&#xff0c;打工人最有用的提醒就是每周提醒发周报了。 1、创建机器人 一般公司都没有人使用&#xff0c;我们可以手动创建一个。 …

前端练习总结(1)

前端实习练习题 前端实习笔试题0920 visibility:hidden display:none把鼠标移到按钮并点击时 hover active focus的顺序代码输出结果1代码输出结果2CSS中哪些属性可以继承cookie sessionStorage localstorage区别面向对象基本特征有哪些,请具体说明下列关于v-model的说法,哪项…

统信服务器操作系统进入【单用户模式】

统信服务器操作系统D版、E版、A版进入单用户模式的方式。 文章目录 前言一、问题现象二、问题原因三、解决方案1. D版问题解决方案2. E版及A版问题解决方案前言 D版又称企业版、E版又称欧拉版、A版又称龙蜥版。 单用户模式主要是在 grub2 引导时编辑内核引导,一般用于修改用…

STM32CUBEIDE FreeRTOS操作教程(五):mutex互斥信号量

STM32CUBEIDE FreeRTOS操作教程&#xff08;五&#xff09;&#xff1a;mutex互斥信号量 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件&#xff0c;不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开发板为例&am…

个人网站介绍和部署(开源)

前言&#xff1a; 大家好&#xff0c;我是神的孩子都在歌唱&#xff0c;这是我csdn的博客 , 这是我做的一个神唱网站项目&#xff0c;专门是为了满足自己的需求写的&#xff0c;需要什么就做什么&#xff0c;代码完全开源github&#xff0c;含有安装部署教程&#xff0c;此项目…

Geekbench6使用指南:Linux系统性能测试,如此简单!

在当今计算机性能日益重要的时代&#xff0c;Geekbench 成为了测试 CPU 性能的热门工具。本文将带你深入了解如何使用 Geekbench&#xff0c;让你的电脑性能一目了然。 1. 什么是 Geekbench&#xff1f; Geekbench 是一款跨平台的基准测试工具&#xff0c;能够评估单核和多核…

避免glibc版本而报错,CentOS等Linux安装node.js完美方法

概述 对于Node.js v18.x或更高&#xff0c;Node.js官方默认是在Ubuntu 20.04, Debian 10, RHEL 8,CentOS 8等高版操作系统上编译得到的&#xff0c;高版本操作系统的glibc版本≥2.28。所以&#xff0c;下载Node.js后&#xff0c;也需要glibc版本≥2.28才能使用。 而CentOS 7.x等…

【YOLOv10改进[SPPF]】使用 v9的SPPELAN替换SPPF模块 + 含全部代码和详细修改方式

本文将进行在YOLOv10中使用SPPELAN改进v10 的实践,助力YOLOv10目标检测效果,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 改进前和改进后的参数对比如下: 目录 一 YOLOV9 二 使用SPPELAN改进v10的实践 1 整体修改 ① 添加SPPELAN.py文件

入选ECCV 2024!覆盖5.4w+图像,MIT提出医学图像分割通用模型ScribblePrompt,性能优于SAM

外行看热闹&#xff0c;内行看门道&#xff0c;这句话在医学影像领域可谓是绝对真理。不仅如此&#xff0c;即便身为内行人&#xff0c;要想在复杂的 X 光片、CT 光片或 MRI 等医学影像上准确看出些「门道」来&#xff0c;也并非易事。而医学图像分割则是通过将复杂的医学图像中…

双十一有什么推荐好物?,这些你不能错过的宝藏好物推荐

随着双十一的临近&#xff0c;这场盛大的购物狂欢蓄势待发&#xff01;为了让大家不在琳琅满目的商品中徘徊&#xff0c;琪琪用心归纳了一份购物清单&#xff0c;分享那些我亲自使用过&#xff0c;觉得必须拥有的商品。 这些商品不仅价格公道&#xff0c;而且质量上乘&#xf…

如何在iPad上用Chrome实现无痕浏览

在数字化时代&#xff0c;隐私保护已成为我们日常生活中不可忽视的一部分。特别是在使用移动设备浏览网页时&#xff0c;如何确保个人信息的安全显得尤为重要。本文将详细介绍如何在iPad上使用Chrome浏览器实现无痕浏览&#xff0c;以保护您的在线隐私。 &#xff08;本文由ht…

SpringBoot使用validation进行自参数校验

一&#xff1a;介绍 在 SpringBoot 项目开发中&#xff0c;很多与数据库交互的参数需要校验数据正确性。很多小伙伴会把参数判断写进代码里&#xff0c;但是这种写法往往会有低可读性以及多处使用的时候&#xff0c;需要变更验证规则时&#xff0c;不易于维护等缺点。今天给大家…

数据工程师岗位常见面试问题-1(附回答)

数据工程师已成为科技行业最重要的角色之一&#xff0c;是组织构建数据基础设施的骨干。随着企业越来越依赖数据驱动的决策&#xff0c;对成熟数据工程师的需求会不断上升。如果您正在准备数据工程师面试&#xff0c;那么应该掌握常见的数据工程师面试问题&#xff1a;包括工作…

怎么禁止电脑随意安装软件?

1、使用组策略编辑器&#xff08;适用于Windows专业版及更高版本&#xff09;&#xff1a; 打开运行窗口&#xff08;Win R&#xff09;&#xff0c;输入gpedit.msc并回车&#xff0c;打开组策略编辑器。 导航至“计算机配置” -> “管理模板” -> “Windows组件” -&…