说明

参考文档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.yamlnacos-cm部分,mysql配置改为真实MySQL配置。
例如文中的部署结果如下,

主机名:mysql.nacos.svc.cluster.local
端口:3306
用户名:root
密码:ComplexPassword123!

如果k8s集群资源太少,就修改副本数为1。StatefulSetreplicas: 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

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐