Kubernetes中安装部署Nacos集群

news2025/6/30 7:06:26

目录

1、Nacos安装包的准备

1.1 下载安装包

1.2  解压安装包

1.3  修改配置文件 application.properties

1.4 bin目录下创建  docker-startup.sh

1.5 将nacos-server-1.2.1目录打包成nacos-server-1.2.1.tar.gz

2、 nacos镜像制作

2.1 Dockerfile文件编写

2.2 制作镜像并上传

3、部署Nacos集群

3.1 创建命令空间

3.2 编写nacos.yaml文件

3.3 执行命令创建并查看

3.4 访问服务


1、Nacos安装包的准备

1.1 下载安装包

官方下载的nacos-server-1.2.1.zip包需要经过处理下:修改配置、加入docker-startup.sh启动脚本

https://github.com/alibaba/nacos/releases/download/1.2.1/nacos-server-1.2.1.zip

1.2  解压安装包

[K8S@k8s-master nacos-cluster]$ pwd
/home/K8S/k8s-project/nacos-cluster
[K8S@k8s-master nacos-cluster]$ ls
nacos-server-1.2.1.zip
[K8S@k8s-master nacos-cluster]$ mkdir nacos-server-1.2.1
[K8S@k8s-master nacos-cluster]$ unzip nacos-server-1.2.1/ nacos-server-1.2.1.zip 
[K8S@k8s-master nacos-cluster]$ ls
nacos-server-1.2.1 nacos-server-1.2.1.zip

1.3  修改配置文件 application.properties

这里需要对application.properties进行修改:

[K8S@k8s-master conf]$ pwd
/home/K8S/k8s-project/nacos-cluster/nacos-server-1.2.1/nacos/conf

[K8S@k8s-master conf]$ cat application.properties
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_SERVER_PORT:8848}
spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:""}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=${MYSQL_SERVICE_USER}
db.password=${MYSQL_SERVICE_PASSWORD}
### The auth system to use, currently only 'nacos' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}


### The token expiration in seconds:
nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}

### The default token:
nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}

### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}

server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
# default current work dir
server.tomcat.basedir=
## spring security config
### turn off security
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false

nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

1.4 bin目录下创建  docker-startup.sh

还需要在bin目录下添加docker-startup.sh启动脚本
容器里nacos集群模式的启动脚本必须使用docker-startup.sh这个,不能使用startup.sh启动脚本
[K8S@k8s-master bin]$ pwd
/home/K8S/k8s-project/nacos-cluster/nacos-server-1.2.1/nacos/bin
[K8S@k8s-master bin]$ cat docker-startup.sh 
#!/bin/bash
# Copyright 1999-2018 Alibaba Group Holding Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
 
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -x
export DEFAULT_SEARCH_LOCATIONS="classpath:/,classpath:/config/,file:./,file:./config/"
export CUSTOM_SEARCH_LOCATIONS=${DEFAULT_SEARCH_LOCATIONS},file:${BASE_DIR}/conf/,${BASE_DIR}/init.d/
export CUSTOM_SEARCH_NAMES="application,custom"
PLUGINS_DIR="/home/nacos/plugins/peer-finder"
function print_servers(){
   if [[ ! -d "${PLUGINS_DIR}" ]]; then
    echo "" > "$CLUSTER_CONF"
    for server in ${NACOS_SERVERS}; do
            echo "$server" >> "$CLUSTER_CONF"
    done
   else
    bash $PLUGINS_DIR/plugin.sh
   sleep 30
        fi
}
#===========================================================================================
# JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; then
 
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
 
  JAVA_OPT="${JAVA_OPT} -server -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN} -XX:MetaspaceSize=${JVM_MS} -XX:MaxMetaspaceSize=${JVM_MMS}"
  if [[ "${NACOS_DEBUG}" == "y" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
  fi
  JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
  JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
  print_servers
fi
 
#===========================================================================================
# Setting system properties
#===========================================================================================
# set  mode that Nacos Server function of split
if [[ "${FUNCTION_MODE}" == "config" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=config"
elif [[ "${FUNCTION_MODE}" == "naming" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=naming"
fi
# set nacos server ip
if [[ ! -z "${NACOS_SERVER_IP}" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.server.ip=${NACOS_SERVER_IP}"
fi
 
if [[ ! -z "${USE_ONLY_SITE_INTERFACES}" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.inetutils.use-only-site-local-interfaces=${USE_ONLY_SITE_INTERFACES}"
fi
 
if [[ ! -z "${PREFERRED_NETWORKS}" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.inetutils.preferred-networks=${PREFERRED_NETWORKS}"
fi
 
if [[ ! -z "${IGNORED_INTERFACES}" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.inetutils.ignored-interfaces=${IGNORED_INTERFACES}"
fi
 
### If turn on auth system:
if [[ ! -z "${NACOS_AUTH_ENABLE}" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.core.auth.enabled=${NACOS_AUTH_ENABLE}"
fi
 
if [[ "${PREFER_HOST_MODE}" == "hostname" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.preferHostnameOverIp=true"
fi
 
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')
if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then
  JAVA_OPT="${JAVA_OPT} -cp .:${BASE_DIR}/plugins/cmdb/*.jar:${BASE_DIR}/plugins/mysql/*.jar"
  JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400"
else
  JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext:${BASE_DIR}/plugins/health:${BASE_DIR}/plugins/cmdb:${BASE_DIR}/plugins/mysql"
  JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
fi
 
 
 
JAVA_OPT="${JAVA_OPT} -Dnacos.home=${BASE_DIR}"
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/nacos-server.jar"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} --spring.config.location=${CUSTOM_SEARCH_LOCATIONS}"
JAVA_OPT="${JAVA_OPT} --spring.config.name=${CUSTOM_SEARCH_NAMES}"
JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/nacos-logback.xml"
JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288"
 
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"
echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
nohup $JAVA ${JAVA_OPT} > ${BASE_DIR}/logs/start.out 2>&1 < /dev/null[K8S@k8s-master bin]$ 

1.5 将nacos-server-1.2.1目录打包成nacos-server-1.2.1.tar.gz

修改后,再将nacos-server-1.2.1目录打包成nacos-server-1.2.1.tar.gz

[K8S@k8s-master nacos-cluster]$ pwd
/home/K8S/k8s-project/nacos-cluster

[K8S@k8s-master nacos-cluster]$ tar -zvcf nacos-server-1.2.1.tar.gz nacos-server-1.2.1
[K8S@k8s-master nacos-cluster]$ ls
nacos-server-1.2.1  nacos-server-1.2.1.tar.gz  nacos-server-1.2.1.zip


 

2、 Nacos镜像制作

2.1 Dockerfile文件编写

[K8S@k8s-master nacos-cluster]$ pwd
/home/K8S/k8s-project/nacos-cluster
[K8S@k8s-master nacos-cluster]$ cat Dockerfile 
FROM devopsibs/jdk1.8
RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
 
ENV LANG en_US.UTF-8


ENV MODE cluster
ENV PREFER_HOST_MODE ip
ENV BASE_DIR /home/nacos
ENV CLASSPATH .:/home/nacos/conf:
ENV CLUSTER_CONF /home/nacos/conf/cluster.conf
ENV FUNCTION_MODE all
ENV JAVA_HOME /opt/jdk1.8.0_181
ENV NACOS_USER nacos
ENV JAVA /opt/jdk1.8.0_181/bin/java
ENV JVM_XMS 2g
ENV JVM_XMX 2g
ENV JVM_XMN 1g
ENV JVM_MS 128m
ENV JVM_MMS 320m
ENV NACOS_DEBUG n
ENV TOMCAT_ACCESSLOG_ENABLED false
 
WORKDIR /home/nacos
ADD nacos-server-1.2.1.tar.gz /home
RUN set -x && mv /home/nacos-server-1.2.1/nacos/* /home/nacos/ && rm -rf /home/nacos-server-1.2.1
 
RUN mkdir -p logs && cd logs && touch start.out && ln -sf /dev/stdout start.out && ln -sf /dev/stderr start.out
RUN chmod 755 bin/docker-startup.sh
 
EXPOSE 8848

2.2 制作镜像并上传

[K8S@k8s-master nacos-cluster]$ pwd
/home/K8S/k8s-project/nacos-cluster
[K8S@k8s-master nacos-cluster]$ docker build -t core.harbor.eastcom.com:30710/nacos/nacos-cluster:v1.2.1 .
[K8S@k8s-master nacos-cluster]$ docker push core.harbor.eastcom.com:30710/nacos/nacos-cluster:v1.2.1 

3、部署Nacos集群

这里采用了configmap存储卷,将mysql配置信息存到了configmap中
注意:需要提前在mysql数据库中创建一个nacos库名!然后将上面nacos-server-1.2.1.tar.gz包中的conf/nacos-mysql.sql文件里的sql语句在mysql的nacos库下执行(source nacos-mysql.sql )导入语句。

3.1 创建命令空间

[K8S@k8s-master nacos-cluster]$ kubectl create nacos-cluster

3.2 编写nacos.yaml文件

根据自身情况按需修改,mysql数据库配置需根据自身实际数据库进行配置

[K8S@k8s-master nacos-cluster]$ pwd
/home/K8S/k8s-project/nacos-cluster
[K8S@k8s-master nacos-cluster]$ cat nacos-cluster.yml 
---
apiVersion: v1
kind: Service
metadata:
  namespace: nacos-cluster
  name: nacos-cluster
  labels:
    app: nacos-cluster
spec:
  type: NodePort
  ports:
    - port: 8848
      name: server
      targetPort: 8848
      nodePort: 30149  #根据自己需要暴露的端口号
  #clusterIP: None
  selector:
    app: nacos-cluster
---
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: nacos-cluster
  name: nacos-cluster-cm
data:
  mysql.host: "svc-mysql.default"   # mysql的配置,我这里在default命名空间有个servce为svc-mysql的数据库,根据自身数据库配置修改
  mysql.db.name: "nacos"
  mysql.port: "3306"
  mysql.user: "nacos"
  mysql.password: "nacos"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: nacos-cluster
  name: nacos-cluster
spec:
  serviceName: nacos-cluster
  replicas: 3
  template:
    metadata:
      labels:
        app: nacos-cluster
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      # 反亲和性策略
      #affinity:
      #  podAntiAffinity:
      #    requiredDuringSchedulingIgnoredDuringExecution:
      #      - labelSelector:
      #          matchExpressions:
      #            - key: "app"
      #              operator: In
      #              values:
      #                - nacos-cluster
      #        topologyKey: "kubernetes.io/hostname"
      containers:
        - name: k8snacos
          imagePullPolicy: Always
          image: core.harbor.eastcom.com:30710/nacos/nacos-cluster:v1.2.1
          resources:
            requests:
              memory: 2048Mi
              cpu: 1000m
            limits:
              memory: 2048Mi
              cpu: 1000m
          ports:
            - containerPort: 8848
              name: client
          env:
            - name: NACOS_REPLICAS
              value: "3"
            - name: MYSQL_SERVICE_HOST
              valueFrom:
                configMapKeyRef:
                  name: nacos-cluster-cm
                  key: mysql.host
            - name: MYSQL_SERVICE_DB_NAME
              valueFrom:
                configMapKeyRef:
                  name: nacos-cluster-cm
                  key: mysql.db.name
            - name: MYSQL_SERVICE_PORT
              valueFrom:
                configMapKeyRef:
                  name: nacos-cluster-cm
                  key: mysql.port
            - name: MYSQL_SERVICE_USER
              valueFrom:
                configMapKeyRef:
                  name: nacos-cluster-cm
                  key: mysql.user
            - name: MYSQL_SERVICE_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: nacos-cluster-cm
                  key: mysql.password
            - name: NACOS_SERVER_PORT
              value: "8848"
            - name: PREFER_HOST_MODE
              value: "hostname"
            - name: NACOS_SERVERS
              value: "nacos-cluster-0.nacos-cluster.nacos-cluster.svc.cluster.local:8848 nacos-cluster-1.nacos-cluster.nacos-cluster.svc.cluster.local:8848 nacos-cluster-2.nacos-cluster.nacos-cluster.svc.cluster.local:8848"
  selector:
    matchLabels:
      app: nacos-cluster

3.3 执行命令创建并查看

[K8S@k8s-master nacos-cluster]$ kubectl apply -f nacos-cluster.yml 
[K8S@k8s-master nacos-cluster]$ kubectl get all -n nacos-cluster -o wide
NAME                  READY   STATUS    RESTARTS   AGE    IP             NODE        NOMINATED NODE   READINESS GATES
pod/nacos-cluster-0   1/1     Running   0          149m   10.244.1.55    k8s-node1   <none>           <none>
pod/nacos-cluster-1   1/1     Running   0          149m   10.244.2.106   k8s-node2   <none>           <none>
pod/nacos-cluster-2   1/1     Running   0          149m   10.244.1.56    k8s-node1   <none>           <none>

NAME                    TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE    SELECTOR
service/nacos-cluster   NodePort   10.1.4.125   <none>        8848:30149/TCP   149m   app=nacos-cluster

NAME                             READY   AGE    CONTAINERS   IMAGES
statefulset.apps/nacos-cluster   3/3     149m   k8snacos     core.harbor.eastcom.com:30710/nacos/nacos-cluster:v1.2.1

3.4 访问服务

http://xxx.xxx.xxx30149/nacos   nacos/nacos

参考:K8S部署Nacos集群 - 部署笔记 - 知乎

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

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

相关文章

单片机入门还能从51开始吗?

选择从51单片机开始入门还是直接学习基于ARM核或RISC核的单片机&#xff0c;取决于学习目标、项目需求以及个人兴趣。每种单片机都有其特定的优势和应用场景&#xff0c;了解它们的特点可以帮助你做出更合适的选择。 首先&#xff0c;我们说一下51单片机的优势&#xff1a; 成熟…

外包干了17天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四年的功能…

【石上星光】context,go的上下文存储并发控制之道

目录 1 引言2 What&#xff1f;3 How&#xff1f; 3.1 用法一、上下文数据存储3.2 用法二、并发控制 3.2.1 场景1 主动取消3.2.2 场景2 超时取消 3.3 用法三、创建一个空Context&#xff08;emptyCtx&#xff09; 4 Why&#xff1f; 4.1 go中的上下文思想 4.1.1 上下文是什么…

技术小课堂:100%CC防护是怎么实现的?

大家好&#xff0c;今天我们深入探讨的是如何有效地实现CC攻击的100%防护&#xff0c;以及传统防护手段存在的局限性和我们的定制化解决方案的优势。 传统的CC防护措施通常依赖于全局性的访问频率控制或在防火墙级别设置固定的访问次数限制。这种方式看似简单直接&#xff0c;…

安全大脑与盲人摸象

21世纪是数字科技和数字经济爆发的时代&#xff0c;互联网正从网状结构向类脑模型进行进化&#xff0c;出现了结构和覆盖范围庞大&#xff0c;能够适应不同技术环境、经济场景&#xff0c;跨地域、跨行业的类脑复杂巨型系统。如腾讯、Facebook等社交网络具备的神经网络特征&…

[方案实操|数据技术]数据要素十大创新模式(1):基于区块链的多模态数据交易服务平台

“ 区块链以其公开共享、去中心化、不可篡改、可追溯和不可抵赖等优势&#xff0c;吸引了包括金融业、医疗业和政府部门等众多利益相关方的极大兴趣&#xff0c;被认为是解决数据安全交换问题的合适方案。” 武汉东湖大数据科技股份有限公司凭借基于区块链的多模态数据交易服务…

交换机的基本原理与配置_实验案例一:交换机的初始配置

1、实验环境 实验用具包括一台Cisco交换机&#xff0c;一台PC&#xff0c;一根Console 线缆。 2、需求描述 如图5.17所示&#xff0c;实验案例一的配置需求如下。 通过PC连接并配置一台Cisco交换机。在交换机的各个配置模式之间切换。将交换机主机的名称改为BDON 3、推荐步…

OpenHarmony应用编译 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境&#xff1a;Windows 11 编译环境&#xff1a;Ubuntu 22.04 开发板型号&#xff1a;DAYU 200&#xff08;RK3568&#xff09; 系统版本&#xff1a;OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…

C语言—每日选择题—Day68

第一题 1、运行以下C语言代码&#xff0c;输出的结果是&#xff08;&#xff09; #include <stdio.h> int main() {char *str[3] {"stra", "strb", "strc"};char *p str[0];int i 0;while(i < 3){printf("%s ",p);i;} retur…

Path Aggregation Network for Instance Segmentation

PANet 摘要1. 引言2.相关工作3.框架 PANet 最初是为 proposal-based 实例分割框架提出来的&#xff0c;mask 是实例的掩码&#xff0c;覆盖了物体包含的所有像素&#xff0c;proposal 在目标检测领域是可能存在目标的区域。在实例分割中&#xff0c;首先利用RPN(Region Proposa…

【并发】第四篇 原子操作系列-AtomicInteger原子操作类详解

导航 一. 简介二. 源码分析三. 原子操作原理三. 实际用途1. 标志位2. 唯一标识生成器3. 计数器一. 简介 AtomicInteger是Java中提供的一种线程安全的原子操作类,用来实现对整数类型的原子操作。它可以在多线程环境下保证对整数的原子性操作,而不需要使用synchronized关键字或…

小样本计数网络FamNet(Learning To Count Everything)

小样本计数网络FamNet(Learning To Count Everything) 大多数计数方法都仅仅针对一类特定的物体&#xff0c;如人群计数、汽车计数、动物计数等。一些方法可以进行多类物体的计数&#xff0c;但是training set中的类别和test set中的类别必须是相同的。 为了增加计数方法的可拓…

CloudCompare——win11配置CloudComPy

CloudComPy配置 1 基本环境介绍2 安装Anaconda2.1 下载anaconda2.2 安装anaconda2.3 配置镜像源2.4 更改虚拟环境的默认创建位置2.5 其他问题2.5.1 激活自己创建的环境提示&#xff1a;系统找不到指定的路径2.5.2 InvalidVersionSpecError: Invalid version spec: 2.72.5.3 卸载…

Hibernate框架的搭建

Hibernate框架的搭建 分层体系结构与持久化 三层体系结构 分层体系结构 指的是将系统的组件分隔到不同的层中&#xff0c;每一层中的组件应保持内聚性&#xff1b; 每一层都应与它下面的各层保持松散耦合。 层与层之间存在自上而下的依赖关系&#xff0c;即上层组件会访问下…

【一学就会】(一)C++编译工具链——基于VSCode的CMake、make与g++简单理解与应用示例

目录 一、CMake、make与g 1、名词辨析 2、孰优孰劣 二、应用示例 1、工具类安装与配置 1&#xff09;VSCode安装与配置 2&#xff09;CMake下载与安装 3&#xff09;MinGW-W64下载与安装 A、科学上网法 B、无需科学上网法 4&#xff09;VSCode推荐插件 A、c/c编译环…

nandgame中的Tokenize(标记化)

题目说明&#xff1a; "Tokenize" "标记化"标记器预先配置为识别数字和符号 。请配置标记器以额外识别符号减号 - 和括号 ( 和 )。您可以编辑源代码区域中的代码以测试它的标记化。level help 我们将构建一种高级编程语言。 高级语言具有更加人性化和灵…

K8s-Ingress Nginx-Day 08

1. 什么是Ingress 官方文档&#xff1a;https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/#what-is-ingress Ingress 是 kubernetes API 中的标准资源类型之一&#xff0c;主要是k8s官方在维护。 2. Ingress的作用 Ingress 提供从集群外部到集群内服务…

NAT转换是怎么工作的?

前言 对象: 服务器S&#xff0c;NAT设备&#xff0c;用户设备C1&#xff0c;用户设备C2 用户C1向服务器S发起一个HTTP请求&#xff0c;经过NAT转化&#xff0c;服务器收到并作出响应&#xff0c;用户C1收到响应。 问题来了&#xff0c;NAT是怎么知道这个响应是给用户C1而不是…

配电室实现智能化用电管理平台的搭建构思

&#xff11; 宝安区水务现状 河流基本情况:宝安区共有66条河涌&#xff0c;66条河涌分属茅洲河及珠江口沿海河涌两大水系&#xff0c;总长254km&#xff0c;流域总面积532km2。全区水环境状况有以下几个特点:一是水质污染严重&#xff0c;主要污染物为氨氮、总磷和阴离子表面…

利用虚拟机建ITtools

网上给的虚拟机多数都是VMX格式的封包&#xff0c;而我这次用的是ovf 我先把虚拟机在导出为ovf 生成了三个文件 去服务器上创建虚拟机&#xff0c;选择从OVF或OVA文件部署虚拟机&#xff0c;点下一页 给虚拟机起个名字 把相应的文件扡到里面去&#xff08;这里生成的四个文件中…