Kubernetes 中部署 Nacos(单机版和集群版)

Kubernetes 中部署 Nacos(单机版和集群版)

一、概览

  1. Nacos是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  2. Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
  3. Nacos是阿里开放的一款中间件,它主要提供三种功能:持久化节点注册,非持久化节点注册和配置管理。
  4. 版本选择

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 的 Mysql 数据库

在相关数据库下执行脚本,数据库名可自定义。

执行完脚本后,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');

五、单机版 Nacos 部署

防止不同的dobbu服务注册到不同nacos实例中,所以单机版实例个数设置为1(replicas: 1)

Nacos工作负载环境变量

---
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

六、集群版Nacos部署

1、创建实例间发现服务

Headless Service为每个pod(nacos实例)生成一个DNS地址,用作NACOS_SERVERS配置。
特殊配置说明:

keyvalue解释
metadata.namenacos-headlessnacos工作负载名称
metadata.labels.appctos-nacos生成pod的前缀域名
spec.selector.appctos-nacosnacos工作负载名称
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

2、部署Nacos集群

集群版nacos我们需要创建有状态负载(kind: StatefulSet),由于当前集群就两个节点,所以实例个数和nacos副本数设置为2个

特殊配置说明:

keyvalue解释
kindStatefulSet有状态负载
metadata.serviceNamenacos-headless实例间发现服务名称
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.labelSelector.matchExpressions.valuesnacos-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访问

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

八、Nacos工作负载环境变量

keyvalue解释
NACOS_REPLICAS2nacos副本数
MODEstandalone或cluster单机版或集群版
SPRING_DATASOURCE_PLATFORMmysql持久化类型
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

有些参数为个人理解,存在不足之处请指出,谢谢!

  • 44
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在K8s集群部署nacos单机版,您可以按照以下步骤进行操作: 1. 在K8s集群选择一台机器,并获取该机器的IP地址。 2. 使用浏览器访问该机器的IP地址以及对外暴露的端口 "/nacos",例如:http://<机器IP地址>:<端口号>/nacos。 3. 在访问页面输入账号和密码,账号为"nacos",密码也为"nacos"。 4. 运行Docker命令来进行nacos的单机部署。以下是一个示例的Docker命令: ``` docker run \ --name nacos \ -d \ -p 8848:8848 \ --restart=always \ -e JVM_XMS=256m \ -e JVM_XMX=256m \ -v /home/nacos/logs:/home/nacos/logs \ -/home/nacos/conf/application.properties:/home/nacos/init.d/application.properties \ -e MODE=standalone \ nacos/nacos-server ``` 请将上述命令的"/home/nacos/logs"和"/home/nacos/conf/application.properties"替换为您希望存储日志和配置文件的路径。 5. 运行上述Docker命令后,nacos将以单机模式在K8s集群部署成功。 希望这些步骤对您有所帮助。如果您有任何其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [K8s---【KubeSphere部署nacos单机模式和集群模式】](https://blog.csdn.net/weixin_44988127/article/details/130074377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值