【经验分享】容器云运维的知识点

news2024/12/18 17:40:49

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了
虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的
由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公开出来

欢迎各位大佬指正文章内容

在这里插入图片描述

注意1-5都是容器化部署与k8s没有关系,也就是k8s出现之前的技术

记录更改容器源的方法:【这个源已不能用】

sed -i 's/registry.k8s.io\/pause:3.6/registry.aliyuncs.com\/google_containers\/pause:3.9/g' /etc/containerd/config.toml#更改

systemctl restart containerd   # 重启

1-5题用软件包ERP.tar.gz ,后续题目用软件包CICD-Runner.tar.gz

1,容器化部署 MariaDB

注意:centos_7.9.2009.tarERP.tar.gz

注意docker images查看一下镜像加载后的名字,后面写dockerfileFROM需要替换为自己的镜像名字

docker load -i centos_7.9.2009.tar 

注意我们这里配置的yum源,与以往的不一样

[ERP]
name=ERP
enabled=1
gpgcheck=0
baseurl=file:///root/yum

因为这个yum源是给容器准备的,等会dockerfile运行会将它复制到容器

编写mysql初始化脚本(这个也是要去容器中运行的)

#!/bin/bash
mysql_install_db --user=root
mysqld_safe --user=root &
sleep 8
mysqladmin -u root password 'tshoperp'
mysql -uroot -ptshoperp -e "grant all on *.* to 'root'@'%' identified by 'tshoperp'; flush privileges;"
mysql -uroot -ptshoperp -e "create database jsh_erp;use jsh_erp; source /opt/jsh_erp.sql;"

编写docker_mariadb(以下从字面意思都能读懂,不多解释)
这个是错的

vi docker_mariadb
# 错的错的错的这个是错的
FROM centos:7.9.2009									# 抽取镜像
MAINTAINER troml1788									# 维护者信息
RUN rm -rf /etc/yum.repos.d/*					# 清空自带的源
COPY local.repo /etc/yum.repos.d/			# 复制我们准备的本地仓库
RUN mkdir /root/yum										# 创建本地仓库
COPY yum /root/yum										# 复制离线包到仓库
ENV LC_ALL en_US.UTF-8								# 设置环境变量LC_ALL为en_US.UTF-8,这是为了支持多语言字符集
RUN yum -y install mariadb-server			# 安装数据库
COPY jsh_erp.sql /opt/								# 复制数据库备份文件
COPY mysql_init.sh /opt/							# 复制数据库初始化脚本
RUN bash /opt/mysql_init.sh						# 执行数据库初始化脚本
EXPOSE 3306														# 开放3306端口
CMD ["mysqld_safe","--user=root"]			# 执行mysqld_safe命令,以root用户执行mysql

这个是对的

FROM centos:7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY jsh_erp.sql /opt/
COPY yum /root/yum
COPY mysql_init.sh /opt/
ENV LC_ALL en_US.UTF-8
RUN yum install -y mariadb-server
RUN bash /opt/mysql_init.sh
EXPOSE 3306
CMD ["mysqld_safe","--user=root"]

需要注意的是对应关系,这个docker_mariadb一定要和mysql_init.shyum文件夹、local.repojsh_erp.sql在同一级下

因为要复制他们到使用centos7创建的容器中

docker build \
-t erp-mysql:v1.0 \
-f docker_mariadb .
docker images

总结本题的操作:

加载了centos7镜像到docker中,它将被用来创建镜像,也可直接启动一个容器

为新建的容器编写local.repo仓库源和mysql_init.sh数据库初始化脚本

使用Docker构建一个Docker镜像(基于dockerfile和centos7镜像)

构建了一个erp-mysql:v1.0(名字:版本)镜像

这个镜像将被用来启动出一个容器

2,容器化部署Redis

编写dockerfile
这个是错的

vi docker_redis
# 错的错的错的这个是错的
FROM centos:centos7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN mkdir /root/yum
COPY yum /root/yum
RUN yum install -y redis
# 修改文件内容
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf
RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
EXPOSE 6379
# 启动 Redis并应用修改后的文件
CMD ["/usr/bin/redis-server","/etc/redis.conf"] 

报错点在:

如果没有下面添加的那一行,就没有开启认证服务

那么应用程序来认证,但是这边并不提供认证服务,就会导致现象:

账户密码错误的时候会提示错误,但是账户密码正确时会提示请求错误

FROM centos:centos7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum
RUN yum install -y redis
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf
RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
RUN echo "requirepass tshoperp" >> /etc/redis.conf  # 添加这一行
EXPOSE 6379
CMD ["/usr/bin/redis-server","/etc/redis.conf"]

正确内容

FROM centos:7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum
RUN yum install -y redis
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf
RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
RUN echo "requirepass tshoperp" >> /etc/redis.conf
EXPOSE 6379
CMD ["/usr/bin/redis-server","/etc/redis.conf"]
docker build \
-t erp-redis:v1.0 \
-f docker_redis .
docker images

这里只是定制了一个redis镜像,redis一般是多节点运行的

题目只要求我们构建,并没有要求我们构建redis主从,因此完工

3,容器化部署Nginx

nginx是一个轻量级的HTTP服务器
这个是错的

# 错的错的错的这个是错的
FROM centos:centos7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum
RUN yum install -y nginx
COPY nginx/nginx.conf /etc/nginx/nginx.conf
COPY nginx/app.tar.gz /
RUN tar -zxvf app.tar.gz 
RUN /bin/bash -c 'echo init ok'
EXPOSE 80
CMD ["nginx","-g","daemon off;"]

正确内容

FROM centos:7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum
RUN yum install -y nginx
COPY nginx/nginx.conf /etc/nginx/nginx.conf
COPY nginx/app.tar.gz /
RUN tar -zxvf app.tar.gz
RUN /bin/bash -c 'echo init ok'
EXPOSE 80
CMD ["nginx","-g","daemon off;"]
docker build \
-t erp-nginx:v1.0 \
-f docker_nginx .

4,容器化部署ERP

ERP是企业资源计划,就是工厂里面生产用的系统,作为我们本次练手部署的应用服务
这个是错的

vi docker_erp

FROM centos:7.9.2009
MAINTAINER troml
COPY app.jar /root
RUN mkdir -p /root/yum
COPY yum /root/yum
RUN rm -rfv /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
EXPOSE 9999
# 启动就运行app.jar
CMD java -jar /root/app.jar

正确内容

FROM centos:7.9.2009
MAINTAINER troml1788
COPY app.jar /root
COPY yum /root/yum
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
EXPOSE 9999
CMD java -jar /root/app.jar
docker build \
-t erp-server:v1.0 \
-f docker_erp .

5,编排部署 ERP

注意这里:

编排也就是容器化部署应用服务,k8s做的就是很强大的统一编排功能,这里我们做的是docker编排

编写docker-compose.yaml 文件

就是这里出现了问题。错误保留,正确往下看
这个是错的

version: '3.8'
services:
  mysql:
    image: erp-mysql:v1.0
  redis:
    image: erp-redis:v1.0
  erp:
    image: erp-server:v1.0
  nginx:
    image: erp-nginx:v1.0
    ports:
      - "8888:80"  # 将宿主机的 8888 端口映射到容器的 80 端口

错误点在于:我们之前用的mysql做了资源名称,导致映射成了mysql,而应用程序中写的连接是erp-mysql,这就是连不上数据库的原因

不知道为什么,vi中写yaml总是说没对齐(所以建议用本地VSCode写好后站上去)
正确内容

version: '3.8'
services:
  erp-mysql:
    image: erp-mysql:v1.0
  erp-redis:
    image: erp-redis:v1.0
  erp-server:
    image: erp-server:v1.0
  erp-nginx:
    image: erp-nginx:v1.0
    ports:
      - "8888:80"

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,它使用一个单一的配置文件(通常称为 docker-compose.yaml 文件)来定义整个应用程序

在我们的环境中,他和harbor仓库一起按照

就是说,它会自动寻找docker-compose.yaml ,如果起了其它名字,需要docker-compose -f xxx.yaml up来运行

## 按两下table
[root@k8s-master-node1 ~]# docker-		
docker-compose  docker-init     docker-proxy 

运行yaml文件

Docker 容器中,通常在 docker-compose.yml 文件中声明的各个服务

docker-compose up -d

这时,如果不出意外的话,就可以访问到ERP工厂了,不过我们的app.jar出了点问题【上面已修复】

小总结:

以上完整地容器化部署了一个项目,刚刚启动的这些服务被称为容器

在docker中,容器是最小部署单位

在k8s中,pod是最小部署单位,pod包含多个容器,而且多个pod共享资源(同一台裸机或虚拟机)

完美解决问题:
不是app.jar包的问题,而是我们操作出现了问题

部署redis						# 没开启认证
docker-compose.yaml	# 映射名起错了

展示:

账户admin 密码123456

注意:这样部署的服务重启一下就没了,如果需要他自动重启,那么我们就要按下面写:

[root@k8s-master-node1 ERP]# cat docker-compose.yaml 
version: '3.8'
services:
  erp-mysql:
    image: erp-mysql:v1.0
    restart: always
  erp-redis:
    image: erp-redis:v1.0
    restart: always
  erp-server:
    image: erp-sever:v1.0
    restart: always
  erp-nginx:
    image: erp-nginx:v1.0
    ports:
    - "8888:80"
    restart: always

从这里开始就是将应用服务部署到k8s集群中的

虽然集群4G运存就能跑起来

但是到了图形化界面还是有点慢的

我这里给到了13G运存


注意:下列题目该用CICD-Runner.tar.gz

6,部署 GitLab

加载镜像等步骤就不多说了,题目中有

不过比赛时命令不一样,咱们这是自己下载的包用脚本上传


2024-12-14更正:现在k8s版本比较新,用ctr加载

docker load -i images.tar

记录一个快速编写kubectl模板的方法(kubectl在搭建的知识点里有详细介绍)

kubectl create --help

创建模板再试运行,直接就写入模板了

kubectl create deployment gitlab \
--image=gitlab/gitlab-ce:latest \
--port=80 \
# 试运行,不实际创建资源
--dry-run -oyaml > gitlab.yaml

kubectl create service nodeport gitlab \
--tcp=80:80 \
--dry-run \
-oyaml >> gitlab.yaml

修改成下面这样

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: gitlab
  name: gitlab
  namespace: gitlab-ci # 添加要部署的命名空间,等会记得先创建
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gitlab
  template:
    metadata:
      labels:
        app: gitlab
    spec:
      containers:
      - image: gitlab/gitlab-ce:latest
        imagePullPolicy: IfNotPresent #添加镜像拉取策略,本地有这个镜像就不用再拉了
        name: gitlab-ce
        ports:
        - containerPort: 80
        env:
        - name: GITLAB_ROOT_PASSWORD    # 添加root用户密码
# 注意这里,因为我们用的最新版gitlab镜像,严格要求不能是弱密码
# 所以此处先不按题目的admin@123来,比赛时要填admin@123
          value: QazWsxEdc781 # 设置root用户密码
#下面这几个不指定也可以,本来就是默认的
        - name: GITLAB_HOST # 添加master主机
          value: 192.168.100.10 # 添加IP
        - name: GITLAB_PORT 
          value: "80"
---	# 多个资源之间要用三个横线隔开
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: gitlab
  name: gitlab
  namespace: gitlab-ci
spec:
  ports:
  - name: 80-80
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30880 #添加暴漏端口,不然会随机一个
  selector: # 选择器很重要,它会找这个gitlab然后暴漏它的端口
    app: gitlab
  type: NodePort

回想一下命名空间的作用

kubectl create namespace gitlab-ci
kubectl apply -f gitlab.yaml 
kubectl get pod,svc -n gitlab-ci

等待一会

发现出错了

[root@k8s-master-node1 CIDI-Runner]# kubectl delete pod gitlab-7cb8c45dbc-fvldt -n gitlab-ci
pod "gitlab-7cb8c45dbc-fvldt" deleted


访问

注意:出现这个不要急,因为服务要一个一个启动

出现了,输入我们的admin/QazWsxEdc781

开始上传demo-2048项目

点击新建项目

点击导入项目

有些版本会出现这种情况(常见于新版)

如果有上传按钮跳过蓝色字样的步骤【直接去看第七步】

解决方法

允许上传

继续上传

选择导入

就可以导入了

上传项目

出现404或者下图Error都不要急,等一会刷新就好

20s左右没恢复基本就是出问题了,看虚拟机配置有没有给足

本题完成

后面以图形化操作居多

7,部署 GitLab Runner

首先查看我们的gitlab-runner 和 gitlab镜像版本

然后安装heml(安装过的可以不用做)

获取令牌

为GitLab Runner 创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache ,并将其注册到 GitLab

修改values.yaml(values.yaml在gitab-runner.tar.gz压缩包里,解压后进去修改,改完不用动文件位置)

      [[runners.kubernetes.volumes.host_path]]
        name = "cache"
        mount_path = "/home/gitlab-runner/ci-build-cache"
        host_path = "/opt/cache"
      [[runners.kubernetes.volumes.host_path]]
        name = "docker"
        mount_path = "/var/run/docker.sock"
        read_only = true
        host_path = "/var/run/docker.sock"

helm install --namespace gitlab-ci gitlab-runner \
 --set gitlabUrl=http://192.168.100.10:30880/ \
 --set runnerRegistrationToken=qCcz8c2MSnxdx5_RxbGz \
 --set runners.tags=k8s-runner \
 --set rbac.create=true .

刷新界面就能看到

如果没有,可能是入栈流量没开启(此为刷新后没有runner的步骤)

先删除之前搞的,然后按照步骤重新来

helm uninstall -n gitlab-ci gitlab-runner

本题完成

8,部署 GitLab Agent

将 Kubernetes 集群添加到 GitLab 项目中指定名称和命名空间

我们进圈起来那个

kubectl exec -it -n gitlab-ci gitlab-5d568c5b-g44lz /bin/bash

1,检查组件:

如果没启动,去vi /etc/gitlab/gitlab.rb

修改

# gitlab_rails['gitlab_kas_enabled'] = true

并取消注释,这里我们启动了就不管了

2,修改gitlab.yml

find /opt/* -name gitlab.yml
# 回显下面那个文件,编辑他
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

这里修改为master的节点,也就是harbor仓库和部署gitlab的节点

修改完后重启

不修改等会流水线会报错找不到那个gitlab-xxxxx

ctrl + D 返回master节点

回到项目(准备创建目录)


创建的目录

.gitlab/agents/kubernetes-agent

再创建一个空file,在我们刚刚创建的目录下

输入名字保存

加入集群

helm install gitlab-agent --generate-name \
    --namespace gitlab-ci \
    --set config.token=glagent-z5XMY8gEGxEdFa6AtNJ6SLWv3C2n8z1gapJ-EgswTb6Uz-ncQw \
    --set config.kasAddress=ws://192.168.100.10:30880/-/kubernetes-agent/

此时注意终端所处位

开始执行部署命令

刷新界面(注意这里:有时响应比较慢,等一会就好了,大约30秒)

本题完成

注意:由于2024年阿里云挂了,在之前,我们执行加入集群后会拉去15.1.0

以前是能成功拉起来的,阿里云挂了以后就拉不下来啦

解决方法:给镜像重新打个标签

docker tag registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/agentk:v15.1.0 registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/agentk:v15.0.0

或者修改yaml文件,但是这种方法更简单粗暴

小记一下:

如果遇到pod出现诸如:ImagePullBackOff…这样的错误,可使用下面命令排错

kubectl describe pod XXXX -n gitlab-ci

删除pod重建

kubectl delete pod XXXX -n gitlab-ci

9,构建 CI/CD

本题注意分支,所有操作均在drone分支下操作

进入drone分支,现成的yaml文件

修改demo-2048.yaml(改成harbor地址)

然后配置文件已经写了,现在需要去harbor创建仓库

登陆

创建

完成

下面这个文件已经存在于gitlab的仓库内,切换分支进行修改

修改dockerfile

必做步骤:

向harbor仓库推送镜像

docker login 192.168.100.10
docker tag tomcat:8.5.64-jdk8 192.168.100.10/library/tomcat:8.5.64-jdk8
docker push 192.168.100.10/library/tomcat:8.5.64-jdk8

可能会遇到权限不足的问题

kubectl get clusterroles
为用户 "system:serviceaccount:gitlab-ci:default" 授予 admin 角色:

kubectl create clusterrolebinding gitlab-ci-admin \
--clusterrole=admin \
--serviceaccount=gitlab-ci:default

写一个流水线脚本(这里完全不会写,复制的)

variables:
    MAVEN_OPTS: "-Dmaven.repo.local=/home/gitlab-runner/ci-build-cache/.m2/repository"
    DOCKER_CONFIG: |
        {
        "insecure-registries": [
            "192.168.100.10"
        ]
        }
stages:
    - project_build
    - image_build
    - deploy

project_build:
    stage: project_build
    image: maven:3.6-jdk-8
    tags:
        - k8s-runner
    script:
        - echo 'nameserver 10.10.1.2' >> /etc/resolv.conf
        - echo 'nameserver 114.114.114.114' >> /etc/resolv.conf
# 新增配置阿里源
        - mkdir -p /home/gitlab-runner/ci-build-cache/
        - echo "<settings><mirrors><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><url>https://maven.aliyun.com/repository/central</url></mirror></mirrors></settings>" > /home/gitlab-runner/ci-build-cache/settings.xml
        - mvn package install -B -DskipTests -s /home/gitlab-runner/ci-build-cache/settings.xml
        - ls target
        # 这一步是因为不知道为啥构建出来的是2048.war
        - mv target/2048.war target/demo-2048.war
        - jar -xf target/demo-2048.war
        - cp -rvf target /home/gitlab-runner/ci-build-cache/
        - ls /home/gitlab-runner/ci-build-cache/target/

image_build:
    stage: image_build
    image: docker:18.09.7
    tags:
        - k8s-runner
    variables:
        DOCKER_DRIVER: overlay2
    services:
        - name: docker:18.09.7-dind
          entrypoint: ["dockerd-entrypoint.sh"]
          command: ["--insecure-registry","192.168.100.10"]
    script:
        - mkdir -p /etc/docker
        - mkdir -p /usr/lib/systemd/system/
        - echo ExecStart=/usr/bin/dockerd --insecure-registry=192.168.100.10 > /usr/lib/systemd/system/docker.service
        - cat /usr/lib/systemd/system/docker.service
        - echo "$DOCKER_CONFIG" > /etc/docker/daemon.json
        - cat /etc/docker/daemon.json
        - echo 'Harbor12345' > password.txt
        - cat password.txt | docker login -u admin --password-stdin 192.168.100.10
        - mv Dockerfiles/Dockerfile .
        - ls /home/gitlab-runner/ci-build-cache/
        - cp -rvf /home/gitlab-runner/ci-build-cache/target/2048 .
        - docker build -t demo:latest .
        - docker tag demo:latest 192.168.100.10/demo/demo:latest
        - docker push 192.168.100.10/demo/demo:latest

deploy:
    image: bitnami/kubectl:1.22
    stage: deploy
    tags:
        - k8s-runner
    script:
        - kubectl apply -f template/demo-2048.yaml
        - kubectl apply -f template/service.yaml

保存文件直接开始流水线

如果报错,查看下述文章:

https://www.yuque.com/wangziyang-5wpbr/rx60zg/rbhlexqumu6ralce?singleDoc# 《流水线排错记录》

运行结束

持久化缓存目录也成功了

访问masterIP:8889就可以玩游戏了

排错完毕,特此记录

如果重启后,这个pod错误了,那么删除pod,直接就会自动新建pod

启动后发现有问题

删除后,自动又创建了一个,然后又可以玩了


下面这三题太超纲了,暂时放弃

10 服务网格:创建 VirtualService

实验环境:运行中的 Kubernetes 集群,Istio 已经被正确安装 这个题要确定在搭建过程中istio部署成功,且启用自动注入 Envoy 代理作为 Sidecar

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

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

相关文章

Linux系列之如何更换Centos yum源?

环境 Centos7Xshell7 问题描述 最近安装了一个虚拟机&#xff0c;准备用来学习&#xff0c;不过使用yum命令安装一些软件&#xff0c;不过使用这个命令时候&#xff0c;提示 Cannot find a valid baseurl for repo: base/7/x86_64&#xff0c;Could not retrieve mirrorlis…

RabbitMQ如何构建集群?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ如何构建集群&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ如何构建集群&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;集群&#xff08;Cluster&#x…

负载均衡oj项目:介绍

目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码&#xff0c;oj模块会在所有在线的后端主机中选择一个负载情况最低的主机&#xff0c;将用户的代码提交给该主机&#xff0c;该主机进行编译运行&#xff0c;将结果返回…

第8章 搬移特性

8.1 搬移函数 模块化是优秀软件设计的核心所在&#xff0c;好的模块化能够让我在修改程序时只需理解程序的一小部分。为了设计出高度模块化的程序&#xff0c;我得保证互相关联的软件要素都能集中到一块&#xff0c;并确保块与块之间的联系易于查找、直观易懂。同时&#xff0c…

rust的axux框架开启负载均衡和重启自身的方法-会议签到的调优

开启负载均衡和重启自身 更换axum后台的意外解决的尝试在caddy反代,使用负载均衡,加多一个节点axum主程序 ip映射信息做全局共享axum重启自身刷新全局共享配置 前期刚实现了rust的后台关键业务.结果出现了两类大问题停止服务.在正用着的时候,出现很多意外,真是刺激… 更换axum…

Spring源码分析之BeanFactory接口的解析

前言: 在我们的前两篇文章当中我们看完之后其实我们都会发现当我们进行相关的重要的行为的时候如我们看到的GetBean或者在Register方法的时候会出现BeanFactroy进行调用那么这个时候我们就会产生一个疑惑这个到底是什么为什么这么重要,在我没有说的时候我们从字面上进行一个简单…

【zlm】 webrtc源码讲解三(总结)

目录 setsdp onwrite ​编辑 play 参考 setsdp onwrite play 参考 【zlm】 webrtc源码讲解_zlm webrtc-CSDN博客 【zlm】 webrtc源码讲解&#xff08;二&#xff09;_webrtc 源码-CSDN博客

电子应用设计方案-56:智能书柜系统方案设计

智能书柜系统方案设计 一、引言 随着数字化时代的发展和人们对知识获取的需求增加&#xff0c;智能书柜作为一种创新的图书管理和存储解决方案&#xff0c;能够提供更高效、便捷和个性化的服务。本方案旨在设计一款功能齐全、智能化程度高的智能书柜系统。 二、系统概述 1. 系…

Spring Boot 性能提升的核武器,速度提升 500%!

虚拟线程是 Java 21 引入的一个新特性&#xff0c;用于简化并发编程。它与传统的操作系统线程相比&#xff0c;具有显著的优势&#xff1a; 轻量级&#xff1a;虚拟线程由 JVM 管理&#xff0c;而非操作系统&#xff0c;因此它们的内存占用和创建成本远低于传统线程。理论上&am…

【5G】5G 无线协议 Radio Protocols(一)

长期演进&#xff08;LTE&#xff09;无线电协议主要设计用于通过扁平架构提供PS服务&#xff0c;相比之前的代际&#xff0c;这代表了一个重大改进&#xff0c;它消除了支持电路交换&#xff08;CS&#xff09;服务和复杂架构中固有的复杂性。许多原始的LTE原则自第8版以来一直…

实现按键按下(低电平)检测到下降沿

按照流程进行编程 步骤1&#xff1a; 初始化函数 包括时基工作参数配置 输入通道配置 更新中断使能 使能捕获、捕获中断及计数器 HAL_TIM_IC_Init(&ic_handle) //时基参数配置 HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2) //输…

2024广东省职业技能大赛云计算——私有云(OpenStack)平台搭建

OpenStack搭建 前言 搭建采用双节点安装&#xff0c;即controller控制节点和compute计算节点。 CentOS7 系统选择 2009 版本&#xff1a;CentOS-7-x86_64-DVD-2009.iso 可从阿里镜像站下载&#xff1a;https://mirrors.aliyun.com/centos/7/isos/x86_64/ OpenStack使用竞赛培…

使用ENSP实现NAT(2)

一、NAT的类型 二、静态NAT 1.项目拓扑 2.项目实现 路由器AR1配置&#xff1a; 进入系统视图 sys将路由器命名为AR1 sysname AR1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为192.168.10.254/24 ip address 192.168.10.254 24进…

RNN LSTM Seq2Seq Attention

非端到端&#xff1a; data -》 cleaning -》 feature Engining &#xff08;70%-80%工作 设计特征&#xff09;-》 分类器 -》预测 端到端 End-to-End&#xff1a; data -》 cleaning -》Deep learning&#xff08;表示学习&#xff0c;从数据中学习特征&#xff09; -》…

PHP排序算法:数组内有A~E,A移到C或者C移到B后排序,还按原顺序排序,循环

效果 PHP代码 public function demo($params){function moveNext($arr){$length count($arr);$lastElement $arr[$length - 1];for ($i $length - 1; $i > 0; $i--) {$arr[$i] $arr[$i - 1];}$arr[0] $lastElement;return $arr;}function moveAndReplace($array, $from…

Nginx主要知识点总结

1下载nginx 到nginx官网nginx: download下载nginx&#xff0c;然后解压压缩包 然后双击nginx.exe就可以启动nginx 2启动nginx 然后在浏览器的网址处输入localhost&#xff0c;进入如下页面说明nginx启动成功 3了解nginx的配置文件 4熟悉nginx的基本配置和常用操作 Nginx 常…

如何跟进项目

在跟进项目的过程中&#xff0c;我们需要通过清晰的沟通和高效的执行来确保目标按时达成。简单来说&#xff0c;“如何跟进项目”可归纳为&#xff1a;明确目标和交付物、建立高效沟通机制、持续监控进度与风险、灵活应对变更。尤其是“明确目标和交付物”这一点&#xff1a;当…

获取微信用户openid

附上开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 开发之前,准备事项 一个已认证过的服务号|基本信息配置js域名和网站授权域名配置最后确认当前账号网页授权功能是否开通,没有开通的无法获取到用户授权开发人…

【WRF工具】WRF 模型评估MET(Model Evaluation Tools)

WRF 模型评估MET&#xff08;Model Evaluation Tools&#xff09; METplus 简介WRF 模型评估工具 MET 的安装与使用步骤安装步骤使用步骤 参考 METplus 简介 METplus 是一个增强型的模型评估和验证框架&#xff0c;支持从短期预报&#xff08;如实时警报&#xff09;到长期气候…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

作者&#xff1a;杨兰馨&#xff08;楠瑆&#xff09; 背景 2024 年 10 月 22 日&#xff0c;华为正式发布了原生鸿蒙操作系统&#xff08;HarmonyOS NEXT&#xff09;。原生鸿蒙实现了系统底座全部自研&#xff0c;系统的流畅度、性能、安全特性等方面显著提升&#xff0c;也…