赞
踩
nacos 选择 nacos/nacos-server:v2.2.0(镜像) ,持久化数据库选择 MySQL 8.0.25(版本无特别要求)
有考虑用postgreSQL作为持久化,但是和当前nacos版本不适配。下面主要分单机版和集群版两大部分。
用于dobbu服务注册使用
--- apiVersion: v1 kind: Service metadata: # ---------***--------- # 设置服务名称 name: ctos-nacos-service # namespace: ctos spec: selector: # 绑定的工作负载 # ---------***--------- app: ctos-nacos version: v1 ports: - name: service-port1 protocol: TCP port: 8848 targetPort: 8848 - name: service-port2 protocol: TCP port: 9848 targetPort: 9848 - name: service-port3 protocol: TCP # ---------***--------- # port:服务端口 targetPort:容器端口 nodePort:节点端口 port: 9849 targetPort: 9849 # 暂时NodePort和ClusterIP选择 type: ClusterIP
用于前端页面访问使用,访问地址:节点弹性IP+节点端口/nacos
--- apiVersion: v1 kind: Service metadata: # ---------***--------- # 设置服务名称 name: ctos-nacos-ui # namespace: ctos spec: selector: # 绑定的工作负载 # ---------***--------- app: ctos-nacos version: v1 ports: - name: service-port protocol: TCP port: 8848 targetPort: 8848 nodePort: 30848 type: NodePort
在相关数据库下执行脚本,数据库名可自定义。
执行完脚本后,nacos默认用户为nacos,默认密码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. */ /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = 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(255) DEFAULT NULL, `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, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', `c_desc` varchar(256) DEFAULT NULL, `c_use` varchar(64) DEFAULT NULL, `effect` varchar(64) DEFAULT NULL, `type` varchar(64) DEFAULT NULL, `c_schema` text, `encrypted_data_key` text NOT NULL 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'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = 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(255) 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, `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='增加租户字段'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = 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` text NOT NULL 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'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = 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'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = 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, 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'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = 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容量信息表'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = his_config_info */ /******************************************/ CREATE TABLE `his_config_info` ( `id` bigint(20) unsigned NOT NULL, `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `data_id` varchar(255) NOT NULL, `group_id` varchar(128) NOT NULL, `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtext NOT NULL, `md5` varchar(32) DEFAULT NULL, `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `src_user` text, `src_ip` varchar(50) DEFAULT NULL, `op_type` char(10) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', `encrypted_data_key` text NOT NULL 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='多租户改造'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = 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, `password` varchar(500) NOT NULL, `enabled` boolean NOT NULL ); CREATE TABLE `roles` ( `username` varchar(50) NOT NULL, `role` varchar(50) NOT NULL, UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE ); CREATE TABLE `permissions` ( `role` varchar(50) NOT NULL, `resource` varchar(255) NOT NULL, `action` varchar(8) NOT NULL, UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE ); INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
防止不同的dobbu服务注册到不同nacos实例中,所以单机版实例个数设置为1(replicas: 1)
--- apiVersion: apps/v1 kind: Deployment metadata: # ---------***--------- # 工作负载名称 name: ctos-nacos # 指定命名空间,可不指定,默认为default # namespace: ctos spec: # ---------***--------- # 启动的实例个数 replicas: 1 selector: matchLabels: # ---------***--------- # 工作负载名称 app: ctos-nacos version: v1 template: metadata: labels: # ---------***--------- # 工作负载名称 app: ctos-nacos version: v1 spec: containers: - name: container-nacos # ---------***--------- # 镜像地址: 域名/组织/容器名称:版本 image: *************** # 参数选择Always和IfNotPresent。Always参数开启后工作负载每次重启/升级均会重新拉取镜像,否则只会在节点上不存在同名同版本镜像时拉取镜像 env: - name: MODE value: standalone - name: SPRING_DATASOURCE_PLATFORM value: mysql - name: MYSQL_SERVICE_DB_NAME value: *************** - name: MYSQL_SERVICE_DB_PARAM value: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC - name: MYSQL_DATABASE_NUM value: '1' - name: MYSQL_SERVICE_HOST value: *************** - name: MYSQL_SERVICE_PORT value: '***************' - name: MYSQL_SERVICE_USER value: *************** - name: MYSQL_SERVICE_PASSWORD value: '***************' imagePullPolicy: IfNotPresent
Headless Service为每个pod(nacos实例)生成一个DNS地址,用作NACOS_SERVERS配置。
特殊配置说明:
key | value | 解释 |
---|---|---|
metadata.name | nacos-headless | nacos工作负载名称 |
metadata.labels.app | ctos-nacos | 生成pod的前缀域名 |
spec.selector.app | ctos-nacos | nacos工作负载名称 |
apiVersion: v1 kind: Service metadata: name: nacos-headless labels: app: ctos-nacos version: v1 annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec: ports: - port: 8848 name: server targetPort: 8848 clusterIP: None selector: app: ctos-nacos
访问地址: nacos-headless.default.svc.cluster.local(内部域名),其中default为命名空间。
后续工作负载配置的集群Pod地址为:ctos-nacos-0.nacos-headless.default.svc.cluster.local 或 ctos-nacos-1.nacos-headless.default.svc.cluster.local
如有第三个节点可设置为:ctos-nacos-2.nacos-headless.default.svc.cluster.local
集群版nacos我们需要创建有状态负载(kind: StatefulSet),由于当前集群就两个节点,所以实例个数和nacos副本数设置为2个
特殊配置说明:
key | value | 解释 |
---|---|---|
kind | StatefulSet | 有状态负载 |
metadata.serviceName | nacos-headless | 实例间发现服务名称 |
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.labelSelector.matchExpressions.values | nacos-headless | 实例间发现服务名称 |
Nacos工作负载环境变量 |
--- apiVersion: apps/v1 kind: StatefulSet metadata: # ---------***--------- # 工作负载名称 name: ctos-nacos # 指定命名空间,可不指定,默认为default # namespace: ctos spec: serviceName: nacos-headless # ---------***--------- # 启动的实例个数 replicas: 2 selector: matchLabels: # ---------***--------- # 工作负载名称 app: ctos-nacos version: v1 template: metadata: labels: # ---------***--------- # 工作负载名称 app: ctos-nacos version: v1 annotations: pod.alpha.kubernetes.io/initialized: "true" spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - nacos-headless topologyKey: "kubernetes.io/hostname" containers: - name: container-nacos # ---------***--------- # 镜像地址: 域名/组织/容器名称:版本 image: *************** # 参数选择Always和IfNotPresent。Always参数开启后工作负载每次重启/升级均会重新拉取镜像,否则只会在节点上不存在同名同版本镜像时拉取镜像 env: - name: NACOS_REPLICAS value: "2" - name: MODE value: "cluster" - name: SPRING_DATASOURCE_PLATFORM value: mysql - name: MYSQL_SERVICE_DB_NAME value: *************** - name: MYSQL_SERVICE_DB_PARAM value: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC - name: MYSQL_DATABASE_NUM value: '1' - name: MYSQL_SERVICE_HOST value: *************** - name: MYSQL_SERVICE_PORT value: '***************' - name: MYSQL_SERVICE_USER value: *************** - name: MYSQL_SERVICE_PASSWORD value: '***************' - name: NACOS_SERVER_PORT value: '8848' - name: PREFER_HOST_MODE value: "hostname" - name: NACOS_SERVERS value: "ctos-nacos-0.nacos-headless.default.svc.cluster.local:8848 ctos-nacos-1.nacos-headless.default.svc.cluster.local:8848" # 修改 namespace 名称 imagePullPolicy: IfNotPresent
通过弹性IP+节点端口/nacos访问
key | value | 解释 |
---|---|---|
NACOS_REPLICAS | 2 | nacos副本数 |
MODE | standalone或cluster | 单机版或集群版 |
SPRING_DATASOURCE_PLATFORM | mysql | 持久化类型 |
MYSQL_SERVICE_DB_NAME | 如:nacos_config | 数据库名称 |
MYSQL_SERVICE_HOST | 如:1.1.1.1 | 地址(IP) |
MYSQL_SERVICE_PORT | 如:3306 | 端口 |
MYSQL_SERVICE_USER | 如:root | 用户名 |
MYSQL_SERVICE_PASSWORD | 如:“password” | 密码 |
NACOS_SERVERS | 如:ctos-nacos-0.nacos-headless.default.svc.cluster.local:8848 ctos-nacos-1.nacos-headless.default.svc.cluster.local:8848 | 创建的实例(Pod)地址 |
镜像地址根据不同云环境配置,可以配合如下参数使用
配置使用的密钥
# imagePullSecrets:
# - name: cce-secret
有些参数为个人理解,存在不足之处请指出,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。