k8s部署nacos服务
·
一、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 '秘钥';
更多推荐





所有评论(0)