kubenetes/kubesphere搭建报错
一、prometheus问题
1.kubesphere 安装 prometheus-k8s 报以下错误:
MountVolume.SetUp failed for volume "secret-kube-etcd-client-certs" : secret "kube-etcd-client-certs" not found
原因是:kube-etcd-client-certs 这个证书没有找到。
解决方法:
kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs \--from-file=etcd-client-ca.crt=/etc/kubernetes/pki/etcd/ca.crt \--from-file=etcd-client.crt=/etc/kubernetes/pki/etcd/healthcheck-client.crt \--from-file=etcd-client.key=/etc/kubernetes/pki/etcd/healthcheck-client.key
二、解决k8s集群中opensearch服务的各种问题
1. 前言
我使用的k8s版本是1.23.6,前面安装了Kubesphere可视化组件,然后开始的时候没有启用日志模块,而是在安装Kubesphere后启用日志系统(参考在安装后启用日志系统),安装一切正常,但是安装后验证,就出现opensearch-cluster-master-x和opensearch-cluster-data-x这些pod都是CrashLoopBackOff的状态,以下是一系列问题及解决。
2. 问题及解决
2.1. 虚拟内存的问题
看日志,发现:
ERROR: [1] bootstrap checks failed[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]ERROR: OpenSearch did not exit normally - check the logs at /usr/share/opensearch/logs/opensearch-cluster.log
目测是虚拟内存的问题,vm.max_map_count
是一个 Linux 内核参数,它控制着一个进程可以拥有的虚拟内存区域的数量,通常用于限制系统中的内存映射数量。这个参数的值表示允许的最大内存映射数量。
宿主机编辑/etc/sysctl.conf文件,增加以下配置:
vm.max_map_count = 262144
然后刷新内存里的配置:
sysctl -w vm.max_map_count=262144
重启docker服务:
systemctl restart docker
2.2. 服务频繁重启的问题
这个是因为服务还没起来,探针超时,然后将服务重启,最后形成死循环,这个需要修改探针配置。
受影响的pod都是由有状态服务(statefulset)启动的,分别为:
- opensearch-cluster-data
- opensearch-cluster-master
使用Kubesphere或者命令进行编辑:
kubectl edit sts opensearch-cluster-data -n kubesphere-logging-system
将startupProbe的initialDelaySeconds改为30。
同样对opensearch-cluster-master也进行同样的操作,然后重新创建就可以了。
2.3. OpenSearch Security not initialized
这个是安全配置未初始化,进入opensearch-cluster-master所在的pod譬如我的是opensearch-cluster-master-0,然后进入/usr/share/opensearch/plugins/opensearch-security/tools 目录,执行以下命令:
./securityadmin.sh -cd ../../../config/opensearch-security/ -rev -cacert ../../../config/root-ca.pem -cert ../../../config/kirk.pem -key ../../../config/kirk-key.pem
如果有步骤超时,则再执行一次试试。
注意,不同版本文件的位置可能不一样,其他的版本可以参考[3]和[4]中的教程。
3. 参考
[1] Elasticsearch: Max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[3] OpenSearch Security not initialized
[4] Applying changes to configuration files
三、k8s ingress 配置后访问返回502的问题
1. 问题
如上图所示,我在K8S集群中,创建了一个Ingress-nginx,用来反向代理service,另外,因为我在安装Ingress的时候,设置了hostNetwork: true和dnsPolicy: ClusterFirstWithHostNet,因此是可以直接通过配置hosts,然后通过域名去访问的,配置如下
192.168.1.100 k8s.api.myapp.cn
然而,遇到了一个诡异的情况,我在其他linux主机上,是可以直接通过域名去访问到服务的。
但是,在我的Windows主机就出问题了,直接返回502,而且看Ingress的日志是直接没到Ingress服务的。另外,我在主机的Wsl中,却可以正常访问。
2. 问题解决
根据上面的现象,可以猜测请求在主机端就已经给转发到别的地方去了,最大的可能是因为你开了代理,因此可以先关闭掉代理再尝试一下,我就是遇到了这个问题。
解决方法也很简单,打开代理软件,配置系统代理绕过的域名/IP网段,以Clash为例,这个配置在“设置-系统代理-系统代理绕过的域名/IP网段”,然后只要将你的域名配置上去即可。
如果不是代理的问题,则需要使用抓包工具进行抓包并分析了。
四、安装 SonarQube后sonarqube-sonarqube无法启动的问题解决
1. 前言
我的环境:k8s集群(version 1.23.6),安装了Kubesphere(version v3.4)作为可视化界面,最近想要推动团队走CICD,于是在Kubesphere中启用了devops组件,参考:https://kubesphere.io/zh/docs/v3.4/pluggable-components/devops/ 。
组件安装完成后,需要将Sonarqube集成到流水线中,于是又安装了Sonarqube,参考:https://kubesphere.io/zh/docs/v3.4/devops-user-guide/how-to-integrate/sonarqube/ 。
按照步骤走完之后,不出意外的话意外又发生了,有两个工作负载没起来,分别是:
- sonarqube-sonarqube
- sonarqube-postgresql
通过查看Kubesphere观察,发现sonarqube-sonarqube一直在重启,于是我把存活探针与就绪探针暂时都去掉了。最后在日志发现报错如:
2020.11.27 09:55:47 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://sonarqube-postgresql:5432/sonarDB
2020.11.27 09:55:47 ERROR web[][o.s.s.p.PlatformImpl] Web server startup failed
java.lang.IllegalStateException: Fail to connect to database
可以定位到时Postgresql有问题导致的,于是查看Postgresql服务的日志,发现:
Kubesphere sonarqube postgresql DETAIL: Role "sonarUser" does not exist
如果分析sonarqube-sonarqube和sonarqube-postgresql这两个工作负载配置文件可以发现,这个用户是sonarqube-postgresql在启动的时候创建的用户名,sonarqube-sonarqube也使用这个用户名去连接sonarqube-postgresql,密码存放在保密字典sonarqube-postgresql中。
通过上面的现象,可以分析出根本原因是sonarqube-postgresql在启动的时候根本没有创建sonarUser这个用户(可以通过sonarqube-postgresql的终端去验证)。
但是为什么sonarqube-postgresql没有成功创建出这个用户呢?
2. 原因分析
首先我把sonarqube-postgresql的两个探针都去掉了,重启,还是报同样的错误。
然后我把env中的POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB这三个值都改成新的值,重启,进入终端,发现还是无法创建用户。
这就很难办,最后通过查询,获得一个关键的信息(参考[1]):
Warning: the Docker specific variables will only have an effect if you start the container with a data directory that is empty; any pre-existing database will be left untouched on container startup.
也就是说,之前第一次启动的时候,sonarqube-postgresql还没有初始化完,就给就绪探针给干掉了,导致只做了部分初始化而没有创建用户,重启的时候由于绑定的pv已经存在数据库了,于是又无法创建用户,整个过程如下:
3. 解决
要解决上面创建用户失败的问题,首先需要延长探针的时间initialDelaySeconds或者直接把探针先去掉,等创建完用户之后,再重新加进去,同时需要先删除已有的数据库,也就是说删除pv,于是必须先删除绑定的pvc,然后要删除pvc也必须先删除绑定的pod,由于statefulset的重启策略无法设定为Never,因此无法通过停止pod来删除pvc。套娃套到这里,就只能先保存sonarqube-postgresql的配置(如Postgresql.yaml),然后把这个statefulset先删除了,然后删除pvc和pv(pv对应的nfs路径下的数据也可以删除)。
# 删除Postgresql statefulset
kubectl delete statefulsets sonarqube-postgresql -n kubesphere-devops-system
# 删除pvc
kubectl delete pvc data-sonarqube-postgresql-0 -n kubesphere-devops-system
# 获取pv
PV=$(kubectl get pv -n kubesphere-devops-system | awk '$6 ~ /data-sonarqube-postgresql/ {print $1}')
# 查看pv对于的nfs路径
kubectl describe pv $PV | grep Path
# 删除pv
kubectl delete pv $PV
# (可选)登录nfs server所在主机,删除刚才获取的nfs路径
也可以通过Kubesphere进行操作。
然后删除Postgresql.yaml中的两个探针,重新创建statefulset,可以看到初始化过程还是很久的,在我的测试集群上差不多用了6分钟,日志如下:
postgresql 06:38:52.24 postgresql 06:38:52.24 Welcome to the Bitnami postgresql containerpostgresql 06:38:52.25 Subscribe to project updates by watching https://github.com/bitnami/bitnami-docker-postgresqlpostgresql 06:38:52.25 Submit issues and feature requests at https://github.com/bitnami/bitnami-docker-postgresql/issuespostgresql 06:38:52.25 Send us your feedback at containers@bitnami.compostgresql 06:38:52.25 postgresql 06:38:52.26 INFO ==> ** Starting PostgreSQL setup **postgresql 06:38:52.34 INFO ==> Validating settings in POSTGRESQL_* env vars..postgresql 06:38:52.35 INFO ==> Loading custom pre-init scripts...postgresql 06:38:52.36 INFO ==> Initializing PostgreSQL database...postgresql 06:38:52.50 INFO ==> postgresql.conf file not detected. Generating it...postgresql 06:38:52.51 INFO ==> pg_hba.conf file not detected. Generating it...postgresql 06:38:52.51 INFO ==> Generating local authentication configurationpostgresql 06:43:21.36 INFO ==> Starting PostgreSQL in background...postgresql 06:44:38.05 INFO ==> Creating user sonarUserpostgresql 06:44:38.14 INFO ==> Grating access to "sonarUser" to the database "sonarDB"postgresql 06:44:38.23 INFO ==> Configuring replication parameterspostgresql 06:44:38.28 INFO ==> Configuring fsyncpostgresql 06:44:38.41 INFO ==> Loading custom scripts...postgresql 06:44:38.42 INFO ==> Enabling remote connectionspostgresql 06:44:38.44 INFO ==> Stopping PostgreSQL...postgresql 06:44:41.46 INFO ==> ** PostgreSQL setup finished! **postgresql 06:44:41.54 INFO ==> ** Starting PostgreSQL **
回到sonarqube-sonarqube服务,发现已经可以连接上了,并开始了初始化进程,观察日志:
2023.09.27 07:16:21 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://sonarqube-postgresql:5432/sonarDB2023.09.27 07:16:21 INFO web[][o.s.s.p.ServerFileSystemImpl] SonarQube home: /opt/sonarqube2023.09.27 07:16:21 INFO web[][o.s.s.u.SystemPasscodeImpl] System authentication by passcode is disabled2023.09.27 07:16:21 WARN web[][o.s.s.p.DatabaseServerCompatibility] The database must be manually upgraded. Please backup the database and browse /setup. For more information: https://docs.sonarqube.org/latest/setup/upgrading2023.09.27 07:16:21 WARN app[][startup] ################################################################################2023.09.27 07:16:21 WARN app[][startup] The database must be manually upgraded. Please backup the database and browse /setup. For more information: https://docs.sonarqube.org/latest/setup/upgrading2023.09.27 07:16:21 WARN app[][startup] ################################################################################
连是连上了,但是要升级数据库,沃得法克……
查了一下Sonarqube支持的Postgresql版本,发现并不需要升级,参考:https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/release-upgrade-notes/ 。
看前面的日志,Sonarqube运行一半又给探针干掉了……
于是我先删除Postgresql statefulset,删除pvc和pv,并清理了pv对应的nfs下面的路径。
然后重新创建Postgresql statefulset,等待初始化完成。
最后删除Sonarqube的两个探针并应用配置,最终终于输出:
2023.09.27 09:35:18 INFO ce[][o.s.ce.app.CeServer] Compute Engine is operational
2023.09.27 09:35:18 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up
2023.09.27 09:35:18 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
抬头一看,一天又过去了。
4. 参考
[1] SonarQube Community Edition on k8s Role “sonarUser” does not exist
五、Kubesphere安装DevOps时Jenkins报Readiness probe failed
1. 问题
安装Kubesphere官方文档,启用DevOps组件,然后等待安装完后,发现devops-jenkins-xxxx-xxxx的pod一直起不来,describe一下,发现报错:
Readiness probe failed: Get "http://10.244.36.83:8080/login": dial tcp 10.244.36.83:8080: connect: connection refused
2. 解决
这种情况非常典型,就是就绪探针检测到服务没起来,一定次数之后,就把服务干掉了。然后服务重启,在服务又没起来的时候又把服务干掉了……然后陷入死循环。
原因是Jenkins在第一次启动的时候会去下载一些插件,导致时间很长,因此建议先把就绪探针和存活探针都删掉,重启服务,等第一次启动完成后,再重新启动,观察从开始启动到完全启动完成的时间,我是按照输出下面信息来判断是否完成:
2023-09-26 09:32:49.747+0000 [id=24] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running
然后根据这个时间去设置两个探针的initialDelaySeconds值。
相关文章:
kubenetes/kubesphere搭建报错
一、prometheus问题 1.kubesphere 安装 prometheus-k8s 报以下错误: MountVolume.SetUp failed for volume "secret-kube-etcd-client-certs" : secret "kube-etcd-client-certs" not found 原因是:kube-etcd-client-certs 这个证…...
分享几个办公类常用的AI工具
办公类 WPS AI讯飞智文iSlideProcessOn亿图脑图ChatPPT WPS AI 金山办公推出的协同办公 AI 应用,具有文本生成、多轮对话、润色改写等多种功能,可以辅助用户进行文档编辑、表格处理、演示文稿制作等办公操作。 https://ai.wps.cn/ 讯飞智文 科大讯飞推…...
Vue入门示例
今天滴学习目标!!! 示例简介HTML内容主体区域输入框列表区域统计和清空 JS引入Vue.js库定义Vue实例el选项data选项methods选项 示例简介 HTML内容 本次实例讲解的是v-for、v-on、v-model来写这小小的实例,下面是实例的效果图&am…...
鸿蒙开发:实现全局异常捕获和异常查看
前言 开发中的异常信息,我们很容易排查,直接可以在控制台中就可以查看,但是,提交给测试同学或者上线后的异常信息,我们如何获取呢?这里我们很容易想起,三方sdk,比如常见的腾讯Bugly…...
Git和GitHub Desktop(Git客户端工具)下载安装教程
不说废话,直接开始。下载网址:https://git-scm.com/ 一.GIT下载 1.点击downloads 2.自己选择自己需要配置的版本 我是windows,所以选择的windows版本的安装 3.根据自己电脑的系统下载软件 我的是64位,选择64位安装 ps :下载很慢…...
Linux经常使用命令汇总和总结
Linux经常使用命令汇总和总结 文章目录 Linux经常使用命令汇总和总结一、基本命令二、目录操作命令三、文件操作命令四、压缩文件操作五、查找命令六、su、sudo七、系统服务八、网络管理九、定时任务指令crontab 配置十、其他命令 一、基本命令 1.1 关机和重启 关机 shutdown …...
three.js 灯光
环境光探针(AmbientLightProbe) 光照探针是一种在3D场景中添加光源的另一种方法。 AmbientLightProbe 是场景中单个环境光的光照估算数据。 有关光照探针的更多信息,请转到 LightProbe 。 构造函数 AmbientLightProbe( color : Color, int…...
ELK日志收集
目前,各个微服务系统的日志都保存在各自指定的目录中,如果这些微服务部署在不同的服务器上,那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题,我们可以借助ELK来收集各个微服务系统的日志并集中展…...
常见docker命令
1、查询已安装docker中某个image依赖包 docker run -it --rm --name my-python-container 【python37:v001】 /bin/bash 【】改成自己环境名字 docker run -it --name lane python37_test:v006 /bin/bash lane是容器名字,python37_test:v006 是镜像名 开启容器 do…...
测试新人刚入行,该如何规划以后的发展路径?
作为一个刚入行的测试新人,应该如何规划自己的职业发展路径?如何规划自己的技术路线?软件测试的段位都有哪些?他们之间的薪资差异如何? 听说这些问题,是目前想要入行软件测试的同学们最关心的。那么我们今…...
Boosting Object Detection with Zero-Shot Day-Night Domain Adaptation
摘要:低亮度场景检测是一个小众且重要的方向,首先在于数据集和过往的研究都集中在光照充足的环境下,其次如果使用传统的训练方法的话由于训练难度大,模型效果也不会很好,有幸的是,现在关于低亮度的研究已经…...
Chromium html<lable>c++接口定义
HTML <label> 元素(标签)表示用户界面中某个元素的说明。 1、<label> 在html_tag_names.json5中接口定义: (third_party\blink\renderer\core\html\html_tag_names.json5) {name: "label",inte…...
QT中中文显示乱码问题
在VS2013中用QT开发GUI应用程序,Qt中显示中文乱码 一: //解决QT中中文显示乱码问题 #pragma execution_character_set("utf-8") 二:在main函数中添加以下代码: #include <QTextCodec>void main() {QTextCod…...
[面试常见]Javascript基础知识
#1024程序员节|征文# Object.assign 和对象扩展运算符有什么区别?是深拷贝还是浅拷贝? 都进行浅拷贝,只赋值对象的第一层属性,而不会递归复制整个对象结构 **const mergedObj Object.assign({},obj1,obj2) JavaScript 中 Map 和 Object 的区别是什么?…...
使用注解@ExcelIgnoreUnannotated实现了在导出 Excel 时忽略没有被标注的字段
ExcelIgnoreUnannotated 注解用于在使用 Apache POI 或其他 Excel 处理库时,指示在导出 Excel 时忽略没有被标注的字段。这意味着只有被特定注解(如 ExcelProperty)标注的字段会被处理和导出。 作用 简化导出过程:只导出需要的字…...
线程的同步
目录 引入 认识条件变量 快速认识接口编辑 认识条件变量编辑 测试代码编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步:在保证数据安全的前提下,让线程…...
【启明智显分享】ZX7981PG/ZX7981PM融入官方OpenWrt,启明智显SDK/官方OpenWrt任由选择!
好消息!好消息!启明智显ZX7981PG和ZX7981PM正式融入官方 OpenWrt 的大家庭啦!现在开发者不仅可以基于启明智显的SDK进行二次开发,还可以直接应用官方OpenWrt以及我们的开源资料进行开发! 借助OpenWrt的强大生态&…...
如何用java发送包含表格形式的邮件
问题: 如何用java发送包含表格形式的邮件? 方法: 发用freemaker工具来替换html的表格变量,从而动态生成了html。然后再发送这个html格式(不能用纯文本)文本即可。 优化流程: 1、准备模板&#x…...
讲个故事:关于一次接口性能优化的心里路程
这是一个程序猿写的第一个故事,请各位懂行的客官静下心来,慢慢品读。就知道我为什么要单独写一个文章来记录这次过程了,因为实在是太坎坷了...... 背景介绍 近期项目投产时遇到一个问题,投产后在验证时发现大部分用户系统登…...
Centos7升级到openssh9.9
openssh9.9 是2024.9.20出的最新版ssh。因为客户扫描出一大堆centos7的漏洞,全是这个openssh的,好多补丁,所以索性升级到最新版。 需要自己制作rpm包,这个我是不懂,照这个来: Linux服务器升级openssh9.9最…...
使用 STM32F407 串口实现 485 通信
准备工作 了解485通信基本概念与原理:RS485通信详解_485通讯de接什么口-CSDN博客 安装编译软件:keil uVision 5.6 软件资料:STM32CubeF4 固件包,正点原子RS485通信例程 参考视频:第26讲 基础篇-新建H…...
基于NERF技术重建学习笔记
NeRF(Neural Radiance Fields)是一种用于3D场景重建的神经网络模型,能够从2D图像生成逼真的3D渲染效果。它将场景表征为一个连续的5D函数,利用了体积渲染和神经网络的结合,通过学习光线穿过空间时的颜色和密度来重建场…...
webView 支持全屏播放
webView 支持全屏播放 直接上代码 public class CustomFullScreenWebViewClient extends WebChromeClient {WebView webView;Context context;/*** 视频全屏参数*/protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS new FrameLayout.LayoutParams(ViewG…...
QGIS之三十二DEM地形导出三维模型gltf
效果 1、准备数据 (1)dem.tif (2)dom.tif 2、qgis加载dem和dom数据 3、安装插件 插件步骤可以参考这篇文章 QGIS之二十四安装插件 安装了Qgis2threejs插件,结果...
【python爬虫】携程旅行景点游客数据分析与可视化
一.选题背景 随着旅游业的快速发展,越来越多的人选择通过互联网平台预订旅行产品,其中携程网作为国内领先的在线旅行服务提供商,拥有大量的旅游产品和用户数据。利用爬虫技术可以获取携程网上各个景点的游客数据,包括游客数量、游…...
python实现onvif协议下控制摄像头变焦,以及融合人形识别与跟踪控制
#1024程序员节 | 征文# 这两天才因为项目需要,对网络摄像头的视频采集以及实现人形识别与跟踪技术。对于onvif协议自然起先也没有任何的了解。但是购买的摄像头是SONY网络头是用在其他地方的。因为前期支持探究项目解决方案,就直接拿来做demo测试使用。 …...
【Vue】Vue3.0(十四)接口,泛型和自定义类型的概念及使用
上篇文章: 【Vue】Vue3.0(十三)中标签属性ref(加在普通标签上、加在组件标签上)、局部样式 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间&…...
【C++】红黑树万字详解(一文彻底搞懂红黑树的底层逻辑)
目录 00.引入 01.红黑树的性质 02.红黑树的定义 03.红黑树的插入 1.按照二叉搜索树的规则插入新节点 2.检测新节点插入后,是否满足红黑树的性质 1.uncle节点存在且为红色 2.uncle节点不存在 3.uncle节点存在且为黑色 04.验证红黑树 00.引入 和AVL树一样&am…...
开源FluentFTP实操,操控FTP文件
概述:通过FluentFTP库,轻松在.NET中实现FTP功能。支持判断、创建、删除文件夹,判断文件是否存在,实现上传、下载和删除文件。简便而强大的FTP操作,提升文件传输效率。 在.NET中,使用FluentFTP库可以方便地…...
论文解读 | ECCV2024 AutoEval-Video:一个用于评估大型视觉-语言模型在开放式视频问答中的自动基准测试...
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 陈修元,上海交通大学清源研究院硕士生 概述 总结来说,我们提出了一个新颖且具有挑战性的基准测试AutoEvalVideo,用于全…...
武汉服装seo整站优化方案/收录优美的图片app
4.3 调整基类成员在派生类中的访问属性的其他方法4.3.1 同名函数 在定义派生类的时候,C语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成员。如果在派生类中定义了与基类成员同名的 成员…...
免费头像生成制作网站/网址缩短
参考博文: DeepNLP的核心关键/NLP词的表示方法类型/NLP语言模型 /词的分布式表示/word embedding/word2vec 深度学习——NLP中词的表示方法&word embedding&word2vec...
广州网站建设推广服务/长春百度推广公司
今天给大家介绍一位Python Web开发大牛,「涛哥聊Python」的公众号主理人彭涛,Python全栈工程师,技术负责人,项目经理,有着丰富的Python开发经验。涛哥虽然没有名校光环,甚至上大学之前完全不懂编程是什么&a…...
wordpress百度cdn/it培训学校it培训机构
https://tool.lu/crontab/转载于:https://www.cnblogs.com/zhaoxueru/p/11002167.html...
网站首页怎么做全屏swf/济宁网站建设
当一个类有多个实例,但是在实例之间有着相互的关联关系,此时,不建议在实例中新增一个成员属性来描述这种关联关系 据一个实际场景来帮助理解:People类有两个实例:AA和BB,AA是男的,BB 是女的&…...