一、nacos介绍

         Nacos 是阿里开源的一站式微服务基础设施,核心解决服务发现、配置管理和服务治理三大问题。

核心特性

  • 服务发现与注册:支持 HTTP/DNS 双协议,适配多语言服务,能实时感知服务上下线状态。
  • 动态配置管理:集中存储配置信息,支持热更新(无需重启服务),还能实现灰度发布和配置回滚。
  • 服务治理能力:内置负载均衡、健康检查、流量控制功能,无缝兼容 Dubbo、Spring Cloud 等主流微服务生态。

二、挂载nacos配置

        可以通过两种方法完成

1、直接使用已经有的application.properties文件

#使用命令
kubectl create configmap nacos-config -n your_namespace --from-file=application.properties=./application.properties

2、编写nacos-config.yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-config   #这个configmap的名称
  namespace: zhongchuan141
data:
  application.properties: |
    server.servlet.contextPath=/nacos
    server.port=8848
    spring.profiles.active=standalone  # 明确单机模式
    spring.datasource.platform=mysql
    db.num=1
    #连接数据库的部分可以从数据库的IP地址,换成数据库对应的service名称,端口写对集群内暴露的端口号
    db.url.0=jdbc:mysql://zhongchuan141-mysql:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=root
    db.password.0=root123456
    nacos.address-server.enabled=false
    nacos.address-server.url=
    nacos.core.auth.enabled=false
    nacos.istio.mcp.server.enabled=false

编写完成后使用以下命令应用

kubectl apply -f nacos-config.yaml

三、创建nacos对应的deployment.yaml和service.yaml文件

        deployment.yaml文件,用于创建nacos的控制器和对应的pod容器,在文件中指明了控制器deployment的资源大小、标签、创建的容器镜像、启动命令等,后续对容器水平扩容时可对deployment.yaml文件进行修改。

         service.yaml文件,用于负责负载均衡和服务发现,暴露nacos的端口号和访问模式,其中,端口号可分pod容器对service暴露的端口,service对k8s集群暴露的端口,以及访问模式。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zhongchuan141-nacos
  namespace: zhongchuan141
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zhongchuan141-nacos
  template:
    metadata:
      labels:
        app: zhongchuan141-nacos
    spec:
      containers:
      - name: nacos
        image: dockerhub.kubekey.local/tiangang/nacos:2.2.3
        command: ["sh", "-c", "/nacos/bin/startup.sh -m standalone "]
        ports:
          - containerPort: 8848
            name: client
          - containerPort: 9848
            name: client-rpc
          - containerPort: 9849
            name: raft-rpc
          - containerPort: 7848
            name: old-raft-rpc
        volumeMounts:
        - name: nacos-conf-volume
          mountPath: /nacos/conf/application.properties
          subPath: application.properties
        env:
        - name: MODE
          value: "standalone"
        - name: JVM_XMS
          value: "512m"
        - name: JVM_XMX
          value: "512m"
        securityContext:
          runAsUser: 0
        resources:
          requests:
            cpu: "500m"
            memory: "1Gi"
          limits:
            cpu: "1000m"
            memory: "2Gi"
      volumes:
      - name: nacos-conf-volume
        configMap:
          name: nacos-config
---
apiVersion: v1
kind: Service
metadata:
  name: zhongchuan141-nacos
  namespace: zhongchuan141
spec:
  selector:
    app: zhongchuan141-nacos
  ports:
  - port: 8848
    name: server
    targetPort: 8848
  type: NodePort

创建完deployment.yaml文件和service.yaml文件后,使用以下命令应用

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

四、常见报错及处理

        

启动报 "Caused by: java.sql.SQLSyntaxErrorException: Unknown column ‘encrypted_data"错误

出现该报错是由于nacos不同版本之间,对数据库中的字段要求不同,使用以下sql解决

#手动为数据库表 config_info、config_info_beta、his_config_info中需要新增字段 encrypted_data_key
#ALTER TABLE  config_info、config_info_beta、his_config_info ADD COLUMN encrypted_data_key text NOT NULL COMMENT '秘钥'  #将table_name 替换为以上三个表名称


ALTER TABLE  config_info ADD COLUMN encrypted_data_key text NOT NULL COMMENT '秘钥';
ALTER TABLE  config_info_beta ADD COLUMN encrypted_data_key text NOT NULL COMMENT '秘钥';
ALTER TABLE  his_config_info ADD COLUMN encrypted_data_key text NOT NULL COMMENT '秘钥';

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐