目 录CONTENT

文章目录

k8s集群部署nacos

JamKing
2025-12-24 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

1、部署mysql

1.1 Mysql密码加密

#your_password改为实际的密码,并复制生成的base值粘贴到1.2小节的data.pass
echo -n 'your_password' | base64

#创建nfs挂载数据目录
mkdir -p /data/nfs-data/mysql-data

image-uCux.png

1.2 mysql部署文件

#建立命名空间
apiVersion: v1
kind: Namespace
metadata:
 name: nacos

---
#mysql-pv
apiVersion: v1
kind: PersistentVolume
metadata: 
  name: nacos-mysql-pv
  labels:
   type: nfs
  namespace: nacos
spec:
  storageClassName: nfs
  nfs:
    server: 172.16.10.135
    path: "/data/nfs-data/mysql-data"
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain

---
#mysql-pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: nacos
spec:
  accessModes:
    - ReadWriteMany
  resources:
   requests:
     storage: 10Gi
  storageClassName: nfs

---
#mysql-secret
apiVersion: v1
data:
  pass: RGV2b3Rpb24jMDYwNg==
kind: Secret
metadata:
  annotations:
  name: nacos-mysql
  namespace: nacos
type: Opaque

---
#mysql-svc
apiVersion: v1
kind: Service
metadata: 
  name: mysql-svc
  namespace: nacos
spec:
  type: ClusterIP
  ports:
    - port: 3306
      #nodePort: 30006
      targetPort: 3306
  selector:
    app: nacos-mysql

---
#mysql-sts
kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: nacos-mysql
  labels:
    app: mysql
  namespace: nacos
spec:
  replicas: 1
  serviceName: mysql-svc
  selector:
    matchLabels:
      app: nacos-mysql
  template:
    metadata:
      labels:
        app: nacos-mysql
    spec:
      volumes:
        - name: data-time
          hostPath:
            path: /etc/localtime
            type: ''
        - name: data
          persistentVolumeClaim:
           claimName: mysql-pvc
      containers:
        - args:
          - --character-set-server=utf8mb4
          - --collation-server=utf8mb4_unicode_ci
          - --lower_case_table_names=1
          name: mysql
          image: registry.cn-hangzhou.aliyuncs.com/testpm-k8s/mysql:5.7
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: nacos-mysql
                  key: pass
          resources:
            limits:
              cpu: '2'
              memory: 4Gi
            requests:
              cpu: 100m
              memory: 100Mi
          volumeMounts:
            - name: data-time
              mountPath: /etc/localtime
            - name: data
              mountPath: /var/lib/mysql

image-rKrT.png

1.3 验证Mysql

kubectl -n nacos get pod

image-OlJa.png

kubectl -n nacos exec -it nacos-mysql-0 -- mysql -uroot -p'your_password'

image-FdBT.png

1.4 创建nacos数据库并初始化数据

create database nacos;
user nacos;
/*
 * 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.
 */

/******************************************/
/*   表名称 = config_info                  */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) DEFAULT NULL COMMENT 'group_id',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',
  `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',
  `effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述',
  `type` varchar(64) DEFAULT NULL COMMENT '配置的类型',
  `c_schema` text COMMENT '配置的模式',
  `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   表名称 = config_info_aggr             */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   表名称 = config_info_beta             */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   表名称 = config_info_tag              */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   表名称 = config_tags_relation         */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   表名称 = group_capacity               */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   表名称 = his_config_info              */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(20) unsigned NOT NULL COMMENT 'id',
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `op_type` char(10) DEFAULT NULL COMMENT 'operation type',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
   `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   表名称 = tenant_capacity              */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE `users` (
	`username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username',
	`password` varchar(500) NOT NULL COMMENT 'password',
	`enabled` boolean NOT NULL COMMENT 'enabled'
);

CREATE TABLE `roles` (
	`username` varchar(50) NOT NULL COMMENT 'username',
	`role` varchar(50) NOT NULL COMMENT 'role',
	UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);

CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL COMMENT 'role',
    `resource` varchar(128) NOT NULL COMMENT 'resource',
    `action` varchar(8) NOT NULL COMMENT 'action',
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);

image-ZxtQ.png

2、部署nacos

2.1 创建nacos的pv目录

#nfs路径
mkdir -p /data/nfs-data/nacos/{data01,data02,data03}

2.2 nacos部署文件

apiVersion: v1
kind: PersistentVolume
metadata:
 name: nacos-pv-1
 labels:
   app: pv-1
 namespace: nacos
spec:
 nfs:
  path: /data/nfs-data/nacos/data01
  server: 172.16.10.135
 accessModes:
  - ReadWriteMany
 capacity:
  storage: 5Gi
 storageClassName: nfs
 persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
 name: nacos-pv-2
 labels:
   app: pv-2
 namespace: nacos
spec:
 nfs:
  path: /data/nfs-data/nacos/data02
  server: 172.16.10.135
 accessModes:
  - ReadWriteMany
 capacity:
  storage: 5Gi
 storageClassName: nfs
 persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
 name: nacos-pv-3
 labels:
   app: pv-3
 namespace: nacos
spec:
 nfs:
  path: /data/nfs-data/nacos/data03
  server: 172.16.10.135
 accessModes:
  - ReadWriteMany
 capacity:
  storage: 5Gi
 storageClassName: nfs
 persistentVolumeReclaimPolicy: Retain

---
apiVersion: v1
kind: Service
metadata:
  name: nacos-headless 
  namespace: nacos 
  labels: 
    app: nacos 
spec:
  ports: 
  - port: 8848 
  clusterIP: None 
  type: ClusterIP 
  selector: 
    app: nacos

---
apiVersion: v1
kind: Service
metadata:
  name: nacos-nodeport
  namespace: nacos
  labels: 
    app: nacos-svc-nodeport 
spec:
  ports: 
   - port: 8848 
     targetPort: 8848 
     nodePort: 30048 
  type: NodePort 
  selector: 
    app: nacos 
---
apiVersion: v1
data:
  jvm-xmn: 128m
  jvm-xms: 256m
  jvm-xmx: 256m
  mode: cluster
  mysql-database-num: "1"
  mysql-service-db-name: nacos
  mysql-service-db-param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  mysql-service-host: nacos-mysql-0.mysql-svc.nacos.svc.cluster.local
  mysql-service-port: "3306"
  mysql-service-user: root
  nacos-servers: nacos-0.nacos-headless.nacos.svc.cluster.local:8848 nacos-1.nacos-headless.nacos.svc.cluster.local:8848 nacos-2.nacos-headless.nacos.svc.cluster.local:8848
  spring-datasource-platform: mysql
kind: ConfigMap
metadata:
  name: nacos-config
  namespace: nacos
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: nacos
spec:
  serviceName: nacos-headless #指定headless server的名字
  replicas: 3 #指定pod的个数
  selector:
    matchLabels:
      app: nacos
  template:
    metadata:
      labels:
        app: nacos
    spec:
      tolerations: #容忍master节点的污点,允许pod调度到master节点
       - key: node-role.kubernetes.io/master
         effect: NoSchedule
      volumes:
      - name: logdir
        hostPath:
         path: /data/logs/nacos
      containers:
      - name: nacos
        image: docker.1ms.run/nacos/nacos-server:v2.4.1
        imagePullPolicy: IfNotPresent
        env:
        - name: JVM_XMS
          valueFrom:
           configMapKeyRef:
            key: jvm-xms
            name: nacos-config
        - name: JVM_XMN
          valueFrom:
           configMapKeyRef:
            key: jvm-xmn
            name: nacos-config
        - name: JVM_XMX
          valueFrom:
           configMapKeyRef:
            key: jvm-xmx
            name: nacos-config
        - name: SPRING_DATASOURCE_PLATFORM
          valueFrom:
           configMapKeyRef:
            key: spring-datasource-platform
            name: nacos-config
        - name: MYSQL_DATABASE_NUM
          valueFrom:
           configMapKeyRef:
            key: mysql-database-num
            name: nacos-config
        - name: MODE
          valueFrom:
           configMapKeyRef:
            key: mode
            name: nacos-config
        - name: PREFER_HOST_MODE
          value: hostname  #使用主机名标识节点
        - name: NACOS_SERVERS
          valueFrom:
           configMapKeyRef:
            key: nacos-servers
            name: nacos-config 
        - name: MYSQL_SERVICE_HOST
          valueFrom:
           configMapKeyRef:
            key: mysql-service-host
            name: nacos-config
        - name: MYSQL_SERVICE_PORT
          valueFrom:
           configMapKeyRef:
            key: mysql-service-port
            name: nacos-config
        - name: MYSQL_SERVICE_DB_NAME
          valueFrom:
           configMapKeyRef:
            key: mysql-service-db-name
            name: nacos-config
        - name: MYSQL_SERVICE_USER
          valueFrom:
           configMapKeyRef:
            key: mysql-service-user
            name: nacos-config
        - name: MYSQL_SERVICE_DB_PARAM
          valueFrom:
           configMapKeyRef:
            key: mysql-service-db-param
            name: nacos-config
        - name: MYSQL_SERVICE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: nacos-mysql
              key: pass
        - name: NACOS_AUTH_ENABLE   #以下参数是配置开启鉴权,否则没有登陆页面提示输入用户密码
          value: "true"
        - name: NACOS_AUTH_TOKEN
          value: "SecretKeyM1Z2WDc4dnVyZkQ3NmZMZjZ3RHRwZnJjNFROdkJOemEK"
        - name: NACOS_AUTH_IDENTITY_KEY
          value: "nacos"
        - name: NACOS_AUTH_IDENTITY_VALUE
          value: "nacos"
        ports:
        - containerPort: 8848
          name: server
        - containerPort: 7848
          name: raft
        volumeMounts:
        - name: nacos-data
          mountPath: /home/nacos/data
        - name: logdir
          mountPath: /home/nacos/logs 
  volumeClaimTemplates: #定义持久化存储模板,自动于创建好的pv绑定
  - metadata:
      name: nacos-data
    spec:
      accessModes: [ "ReadWriteMany" ]
      storageClassName: "nfs"
      resources:
        requests:
          storage: 5Gi

image-dKHB.png

2.3 验证nacos

image-zSih.png

初次登录需要初始化密码

image-HAhT.png

nacos集群部署成功

image-vYUp.png

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区