[软件部署]在kubernetes集群部署nacos集群
说明
参考文档https://nacos.io/docs/latest/quickstart/quick-start-kubernetes/?spm=5238cd80.5687ac34.0.0.74f0215fmrId3r
适配当前最新版本nacos server v3.1 ,实现在k8s集群部署nacos 集群。
部署可联网,可离线。
解释:因个人不喜欢helm这样类似exe双击安装的方式,所以采用yaml文件单独管理方法配置。
创建namespace
kubectl create namespace nacos
创建MySQL数据库
单独创建一个MySQL数据库,准备好MySQL的主机域名或者ip,端口号,账户,密码,提前创建一个数据库名字是nacos,编码utf8mb4,倒入mysql-schema.sql文件 ,根据个人喜好,可使用命令,也可使用navicat等工具,具体方法可直接求助AI。
可使用自己的MySQL配置部署,也可参考下述配置,mysql.yaml配置如下,
---
apiVersion: v1
kind: Namespace
metadata:
name: nacos
---
# ... Secret ...
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
namespace: nacos
type: Opaque
stringData:
ROOT_PASSWORD: "ComplexPassword123!"
---
# ... ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
namespace: nacos
data:
my.cnf: |
[mysqld]
default-authentication-plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-name-resolve
max_connections=4000
open_files_limit=65535
init.sql: |
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'ComplexPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
---
# ... Service
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: nacos
spec:
ports:
- port: 3306
clusterIP: None
selector:
app: mysql
---
apiVersion: v1
kind: Service
metadata:
name: mysql-external
namespace: nacos
spec:
type: NodePort
selector:
app: mysql
ports:
- port: 3306
targetPort: 3306
---
# ... StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: nacos
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql"
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: ROOT_PASSWORD
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "4Gi"
cpu: "2"
volumeMounts:
- name: data
mountPath: /var/lib/mysql
- name: config
mountPath: /etc/mysql/conf.d
- name: init-script
mountPath: /docker-entrypoint-initdb.d
volumes:
- name: config
configMap:
name: mysql-config
items:
- key: my.cnf
path: my.cnf
- name: init-script
configMap:
name: mysql-config
items:
- key: init.sql
path: init.sql
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
部署MySQL
kubectl apply -f mysql.yaml -n nacos
mysql-schema.sql 可使用navicat等工具倒入到数据库。重要文件,必须创建。
/*
* 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 since 2.5.0 */
/******************************************/
CREATE TABLE `config_info_gray` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`src_user` text COMMENT 'src_user',
`src_ip` varchar(100) DEFAULT NULL COMMENT 'src_ip',
`gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',
`gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`gray_name` varchar(128) NOT NULL COMMENT 'gray_name',
`gray_rule` text NOT NULL COMMENT 'gray_rule',
`encrypted_data_key` varchar(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (`data_id`,`group_id`,`tenant_id`,`gray_name`),
KEY `idx_dataid_gmt_modified` (`data_id`,`gmt_modified`),
KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='config_info_gray';
/******************************************/
/* 表名称 = 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 '密钥',
`publish_type` varchar(50) DEFAULT 'formal' COMMENT 'publish type gray or formal',
`gray_name` varchar(50) DEFAULT NULL COMMENT 'gray name',
`ext_info` longtext DEFAULT NULL COMMENT 'ext info',
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
);
若不想单独操作创建数据库及导入数据,可参考以下MySQL部署配置自动处理,mysql.yaml
apiVersion: v1
kind: Namespace
metadata:
name: nacos
---
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
namespace: nacos
type: Opaque
stringData:
ROOT_PASSWORD: "ComplexPassword123!"
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-init-config
namespace: nacos
data:
my.cnf: |
[mysqld]
default-authentication-plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-name-resolve
max_connections=4000
open_files_limit=65535
init.sql: |
-- 自动创建nacos数据库
CREATE DATABASE IF NOT EXISTS nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户并授权
CREATE USER IF NOT EXISTS 'nacos'@'%' IDENTIFIED BY 'ComplexPassword123!';
GRANT ALL PRIVILEGES ON nacos.* TO 'nacos'@'%';
FLUSH PRIVILEGES;
-- 保留root用户用于管理
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'ComplexPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
import-schema.sh: |
#!/bin/bash
echo "等待MySQL启动..."
sleep 10
echo "检查nacos数据库是否存在..."
if mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "USE nacos" 2>/dev/null; then
echo "检查数据库中是否有表..."
table_count=$(mysql -u root -p"$MYSQL_ROOT_PASSWORD" -sN -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'nacos'")
if [ "$table_count" -eq 0 ]; then
echo "导入SQL文件..."
if [ -f /docker-entrypoint-initdb.d/mysql-schema.sql ]; then
mysql -u root -p"$MYSQL_ROOT_PASSWORD" nacos < /docker-entrypoint-initdb.d/mysql-schema.sql
if [ $? -eq 0 ]; then
echo "SQL文件导入成功!"
else
echo "SQL文件导入失败!"
fi
else
echo "找不到mysql-schema.sql文件"
fi
else
echo "nacos数据库中已有$table_count个表,跳过导入"
fi
else
echo "nacos数据库不存在,将自动创建并导入..."
mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "CREATE DATABASE nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
mysql -u root -p"$MYSQL_ROOT_PASSWORD" nacos < /docker-entrypoint-initdb.d/mysql-schema.sql
fi
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-schema
namespace: nacos
annotations:
# 可以添加SHA256校验,确保文件变更时触发更新
kubectl.kubernetes.io/last-applied-configuration: ""
data:
# 这里放置mysql-schema.sql文件的内容
# 或者从外部文件挂载
mysql-schema.sql: |
-- 这里应该是您的nacos数据库schema
-- CREATE TABLE IF NOT EXISTS config_info (
-- id bigint(20) NOT NULL AUTO_INCREMENT,
-- data_id varchar(255) NOT NULL,
-- group_id varchar(128) NOT NULL,
-- 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,
-- app_name varchar(128) DEFAULT NULL,
-- tenant_id varchar(128) DEFAULT '',
-- 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,
-- PRIMARY KEY (id),
-- UNIQUE KEY uk_configinfo_datagrouptenant (data_id,group_id,tenant_id)
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- 其他nacos表结构...
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: nacos
spec:
ports:
- port: 3306
clusterIP: None
selector:
app: mysql
---
apiVersion: v1
kind: Service
metadata:
name: mysql-external
namespace: nacos
spec:
type: NodePort
selector:
app: mysql
ports:
- port: 3306
targetPort: 3306
# 可以指定nodePort,如果需要固定端口的话
# nodePort: 30306
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: nacos
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql"
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
initContainers:
- name: init-schema
image: alpine:latest
command: ['sh', '-c', 'cp /tmp/schema/*.sql /docker-entrypoint-initdb.d/']
volumeMounts:
- name: init-script
mountPath: /docker-entrypoint-initdb.d
- name: schema
mountPath: /tmp/schema
containers:
- name: mysql
image: mysql:8.0
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: ROOT_PASSWORD
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "4Gi"
cpu: "2"
livenessProbe:
exec:
command: ["mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD}"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
exec:
command: ["mysql", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD", "-e", "SELECT 1"]
initialDelaySeconds: 5
periodSeconds: 2
timeoutSeconds: 1
volumeMounts:
- name: data
mountPath: /var/lib/mysql
- name: config
mountPath: /etc/mysql/conf.d
- name: init-script
mountPath: /docker-entrypoint-initdb.d
- name: schema
mountPath: /tmp/schema
volumes:
- name: config
configMap:
name: mysql-init-config
items:
- key: my.cnf
path: my.cnf
- name: init-script
configMap:
name: mysql-init-config
items:
- key: import-schema.sh
path: import-schema.sh
mode: 0755
- name: schema
configMap:
name: mysql-schema
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
storageClassName: "standard" # 根据您的存储类调整
修改nacos的yaml文件
nacos-k8s-v1.yaml的nacos-cm部分,mysql配置改为真实MySQL配置。
例如文中的部署结果如下,
主机名:mysql.nacos.svc.cluster.local
端口:3306
用户名:root
密码:ComplexPassword123!
如果k8s集群资源太少,就修改副本数为1。StatefulSet的replicas: 3 改为1。常规3副本足够,若想配置更多副本,需修改NACOS_SERVERS部分,追加配置更多的同格式服务名字,例如nacos-3.nacos-headless.nacos.svc.cluster.local:8848。
配置文件里的nacos.auth.token使用命令生成,可以直接用默认值,
openssl rand -base64 48
默认联网部署,离线部署时,将镜像导入本地环境,imagePullPolicy改为IfNotPresent。
容器镜像拉取问题,可参考1ms.run做配置。
nacos.yaml配置如下,
---
apiVersion: v1
kind: Service
metadata:
name: nacos-headless
namespace: nacos
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
- port: 7848
name: old-raft-rpc
targetPort: 7848
- port: 8080
name: console
targetPort: 8080
selector:
app: nacos
---
apiVersion: v1
kind: Service
metadata:
name: nacos-nodeport
namespace: nacos
labels:
app: nacos-nodeport
spec:
type: NodePort
ports:
- port: 8848
name: server
targetPort: 8848
nodePort: 0
- port: 9848
name: client-rpc
targetPort: 9848
nodePort: 0
- port: 9849
name: raft-rpc
targetPort: 9849
nodePort: 0
- port: 7848
name: old-raft-rpc
targetPort: 7848
nodePort: 0
- port: 8080
name: console
targetPort: 8080
nodePort: 0
selector:
app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
namespace: nacos
data:
mysql.host: "192.168.100.33"
mysql.db.name: "nacos"
mysql.port: "3306"
mysql.user: "ruichuang"
mysql.password: "ON7q6Qp9@qKR@I"
nacos.auth.token: "VGhpc0lzQVNlY3JldEtleUZvck5hY29zQXV0aFRva2VuSXNNb3JlVGhhbjMyQnl0ZXMK"
nacos.auth.identity.key: "serverIdentity"
nacos.auth.identity.value: "VGhpc0lzQUlkVmFsdWVGb3JOYWNvc0lkZW50aXR5VmVyaWZpY2F0aW9u"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos
namespace: 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: nacos
imagePullPolicy: Always
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
- containerPort: 8080
name: console
env:
- name: NACOS_REPLICAS
value: "3"
- name: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.host
- 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: SPRING_DATASOURCE_PLATFORM
value: "mysql"
- 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.nacos.svc.cluster.local:8848 nacos-1.nacos-headless.nacos.svc.cluster.local:8848 nacos-2.nacos-headless.nacos.svc.cluster.local:8848"
- name: NACOS_AUTH_TOKEN
valueFrom:
configMapKeyRef:
name: nacos-cm
key: nacos.auth.token
- name: NACOS_AUTH_IDENTITY_KEY
valueFrom:
configMapKeyRef:
name: nacos-cm
key: nacos.auth.identity.key
- name: NACOS_AUTH_IDENTITY_VALUE
valueFrom:
configMapKeyRef:
name: nacos-cm
key: nacos.auth.identity.value
selector:
matchLabels:
app: nacos
部署nacos
kubectl apply -f nacos.yaml -n nacos
查询
确认资源已启动
kubectl get all -n nacos

仅启动是不够的,应在pod日志确认启动成功
kubectl logs -n nacos pods/nacos-0

更多推荐
所有评论(0)