来源:https://www.woniusnail.com/?p=1691
Nacos 具体介绍就不介绍了,详细的官方都有。
本次主要介绍在k8s集群中部署Nacos集群(3节点),数据库使用外置的 mysql ,相比使用官方的在k8s内创建数据库的方案维护更方便,所有nacos配置 全部保存在数据库中,不用担心重启掉线等异常导致配置文件丢失。
Nacos及所有相关服务皆部署在default 命名空间,配置文件中未指定命名空间,如需指定命名空间可在配置文件增加 metadata.namespace 属性,指定命名空间。建议与需要使用的微服务在同一个命名空间下。
部署用到的文件可直接下载使用。
环境介绍:
Mysql 5.7
kubernetes 1.20
第一步:初始化数据库
连接数据库并创建库,执行初始化脚本建表。
#1.创建数据库 CREATE DATABASE `nacos_config` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; #2.执行初始化脚本方式随意,导进去就可以 脚本官方地址: https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql 打不开多试几次。第二步:创建mysql-nacos服务
因为我们是使用外置的mysql服务,所以需要使用k8s的endpoints + service 进行转发,否则无法连接数据库。
#1.创建mysql-nacos-service.yaml vim mysql-nacos-service.yaml kind: Service apiVersion: v1 metadata: name: mysql-nacos #保持与下面endpoint的metadata.name一致 labels: name: mysql-nacos #保持与下面endpoint的metadata.labels.name一致 spec: clusterIP: None ports: - port: 33006 name: mysql-nacos #这名字理论上随意 targetPort: 33006 --- kind: Endpoints apiVersion: v1 metadata: name: mysql-nacos labels: name: mysql-nacos subsets: - addresses: - ip: 192.168.10.21 #这里是数据库的ip地址 ports: - port: 33036 #数据库端口 #2.使用mysql-nacos-service.yaml kubectl create -f mysql-nacos-service.yaml第三步:创建nacos集群
根据官方模板修改,新增及修改部分已经标注。
#1.创建nacos-StatefulSet.yaml vim nacos-StatefulSet.yaml --- apiVersion: v1 kind: Service metadata: name: nacos-headless labels: app: nacos-headless spec: type: ClusterIP clusterIP: None ports: - port: 8848 name: server targetPort: 8848 - port: 9848 name: client-rpc targetPort: 9848 - port: 9849 name: raft-rpc targetPort: 9849 ## 兼容1.4.x版本的选举端口 - port: 7848 name: old-raft-rpc targetPort: 7848 selector: app: nacos --- apiVersion: v1 kind: ConfigMap metadata: name: nacos-cm #这里下面会用到 data: mysql.service.name: "mysql-nacos" #增加数据库地址变量,这里填写第二步创建的service名字. mysql.db.name: "nacos_config" #数据库名字 mysql.port: "33006" #数据库端口 mysql.user: "your user" #数据库用户名 mysql.password: "your password" #数据库密码 --- apiVersion: apps/v1 kind: StatefulSet metadata: name: nacos spec: serviceName: nacos-headless replicas: 3 template: metadata: labels: app: nacos annotations: pod.alpha.kubernetes.io/initialized: "true" spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - nacos topologyKey: "kubernetes.io/hostname" containers: - name: k8snacos image: "nacos/nacos-server:latest" resources: requests: memory: "2Gi" cpu: "500m" ports: - containerPort: 8848 name: client - containerPort: 9848 name: client-rpc - containerPort: 9849 name: raft-rpc - containerPort: 7848 name: old-raft-rpc env: - name: NACOS_REPLICAS value: "3" - name: MYSQL_SERVICE_HOST #添加的数据库地址环境变量,无需修改. valueFrom: configMapKeyRef: name: nacos-cm key: mysql.service.name - name: MYSQL_SERVICE_DB_NAME valueFrom: configMapKeyRef: name: nacos-cm key: mysql.db.name - name: MYSQL_SERVICE_PORT valueFrom: configMapKeyRef: name: nacos-cm key: mysql.port - name: MYSQL_SERVICE_USER valueFrom: configMapKeyRef: name: nacos-cm key: mysql.user - name: MYSQL_SERVICE_PASSWORD valueFrom: configMapKeyRef: name: nacos-cm key: mysql.password - name: NACOS_SERVER_PORT value: "8848" - name: NACOS_APPLICATION_PORT value: "8848" - name: PREFER_HOST_MODE value: "hostname" - name: NACOS_SERVERS value: "nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848" #这里中间的default,需要根据实际的命名空间修改,默认default命名空间 selector: matchLabels: app: nacos #2.创建nacos集群 kubectl create -f nacos-StatefulSet.yaml #4.检查集群状态 kubectl get sts nacos #5.查看日志 kubectl logs -f po/nacos-0 kubectl logs -f po/nacos-1 kubectl logs -f po/nacos-2第四步:访问Nacos集群
使用NodePort方式访问
#1.创建nacos-service.yaml vim nacos-service.yaml --- apiVersion: v1 kind: Service metadata: name: nacos labels: app: nacos spec: selector: app: nacos externalTrafficPolicy: Cluster ports: - name: nacos-service-0 targetPort: 8848 nodePort: 30000 port: 8848 protocol: TCP type: NodePort 访问方式为:NodePort IP:30000 默认用户名密码为 nacos/nacos至此Nacos集群就配置完成了。
附件中包含所有的配置文件,有需要可直接下载使用。
标签:name,service,数据库,Nacos,外置,nacos,mysql,2.0,metadata From: https://www.cnblogs.com/gaoyanbing/p/17715610.html