Skip to content

面试准备笔记(运维与实施 · 姜龙龙)— 项目一:银行数字人民币智能合约引擎国产化部署 ​

素材来源:本人一手实施文档《智能合约引擎安装部署指南 v2.1》《部署 IP 规划》。 使用方法:第一、二节背熟;第三、四节理解后用自己的话讲;第五节对照知识库「05-八股文」查漏。

一、项目介绍(口述版,约 1.5 分钟) ​

我在这家公司参与的第一个大项目,是某大型银行的数字人民币智能合约引擎平台实施。我们公司是华为的生态合作服务商(渠道商),平台的技术栈和选型由华为统一规划,我们负责部署交付,我作为实施工程师驻场近两年。

背景:数字人民币是央行主导的金融基础设施,银行要开展基于数币的智能合约业务,而且金融行业必须满足信创要求,所以整个平台从硬件到软件全部国产化:4 台华为 TaiShan 2280 鲲鹏服务器(ARM 架构),华为 CE68 系列交换机组网,虚拟化用 FusionCompute 8.3.0 加 DME 管理平台,往上发放了 15 台统信 UOS 和麒麟 V10 的虚拟机,在虚拟机里部署 Kubernetes 集群、华为 BCS 区块链边缘自治系统、海量数据的 Vastbase 数据库一主一备集群,最后是公司自研的数币智能合约管理平台。

我负责三块:一是虚拟化底座的部署,通过 iBMC 远程装 CNA 和 VRM 节点、做 RAID 规划、配集群和分布式交换机、批量发放虚拟机,再用 DME 统一纳管;二是 Kubernetes 集群,先搭单 master,后来业务要求高可用,我在统信 ARM 环境里把它升级成三 master 高可用架构,用负载均衡加 Keepalived VIP 漂移做 apiserver 的统一入口;三是 Vastbase 数据库集群部署验收和整个平台的联调上线。上线后运维与华为原厂协同——我负责一线巡检和告警响应,二线疑难转华为。平台最终通过银行客户验收,支撑数字人民币试点业务运行,我沉淀的部署指南也成为公司同类项目的标准实施文档。

二、架构与规模速记(数字必须张口就来) ​

层级组成规模/版本
硬件TaiShan 2280(鲲鹏 ARM,48×2 核 / 32G×12 / 3.84T SSD)4 台
网络CE6856HI 管理/BMC 交换机 ×2,CE6863 业务交换机 ×24 台
虚拟化FusionCompute 8.3.0:CNA×3 + VRM×1(物理机部署);DME Data 22.0 三节点4 台物理机
虚拟机统信 UOS Server 20(业务)+ 麒麟 V10 SP1(数据库)15 台
容器Kubernetes v1.17.3 + Docker 18.09(aarch64 静态包)3 master + 10 work
高可用haproxy(16443)+Keepalived 或 Nginx(16443)+Keepalived,VIP 漂移VIP ×2(集群入口/升级路径)
数据库Vastbase G100 2.2(OpenGauss 内核,kylin-aarch64-kunpeng 包)+ HAS 高可用 + DCS一主一备 + VIP
区块链华为 BCS 边缘自治版 1.2.6:管理面 3 节点 + 数据面 6 节点https://VIP:30000
应用数币智能合约管理平台 1.0(自研):毕昇 JDK 8u362 + Redis 5.0.3 + Nginx 1.25.1 + 后端 jar中间件 2 台
监控Prometheus 2.33.5 + Node Exporter 1.3.1BCS monitor 命名空间

网络规划要点:每个节点双平面(管理 IP + 业务 IP),管理面、业务面分别互通;数据库集群独立于 K8s 之外部署(未被纳管)。

口述纪律:对面试官只说规模(三台 master、十五台虚拟机、一主一备),不报内网 IP、账号、仓库域名。

三、面试必问(通用题标准答案) ​

1. 这个项目的技术栈为什么是华为全家桶 + 全国产化? ​

先亮角色:我们公司是华为渠道商,选型是华为和银行定的,我负责按版本配套表落地——这一点面试时大方说出来,反而是加分项(诚信 + 知道自己在生态里的位置)。再讲理解:数字人民币是央行负债、国家主权货币数字化,金融行业有信创合规要求,所以芯片(鲲鹏 ARM)、操作系统(统信 / 麒麟)、数据库(Vastbase)、区块链平台(BCS)全链路走华为国产化体系。这也是我做这个项目最大的收获——完整踩了一遍国产化技术栈,并且知道每个配套为什么这么配。

2. 为什么数据库选 Vastbase/OpenGauss 而不是 MySQL? ​

选型是华为 BCS 配套体系定的,我的价值是理解并落地:一是信创目录要求,金融场景必须国产数据库;二是 Vastbase 是 openGauss 生态的商业发行版,对鲲鹏 ARM 有原生适配(安装包就是 aarch64_kunpeng 专用包);三是 BCS 平台的配套认证。它是 PostgreSQL 系,vsql、DataStudio 工具链与 PG 兼容。面试官如果追问 MySQL 和 PG 的区别,再往存储引擎、MVCC 实现差异上引——那是八股题,反而好答。

3. K8s 为什么用 1.17.3 这么老的版本? ​

这是 2023 年项目启动时华为 BCS 边缘自治版 1.2.6 的配套版本约束——BCS 对纳管的 Kubernetes 版本有严格的兼容矩阵,生产环境必须严格按版本配套表来,不能自己随意升级。这个经历让我养成了一个习惯:生产环境版本选择先查配套关系,再谈技术新旧。(加分句:这也解释了为什么我后面移动云项目用的是 v1.28.2——不同项目不同约束。)

4. ARM 架构装 K8s 和 x86 有什么区别? ​

主要有四点,都是我实际踩过的:

  • 软件源要用 aarch64 专用源(yum 源是 kubernetes-el7-aarch64);
  • Docker 用 aarch64 静态二进制包(docker-18.09.8.tgz)解压安装,不是默认仓库的 x86 包;
  • 所有镜像必须是 arm64 版本,海外镜像拉不下来就 docker load 离线导入——我给数据面节点写了一个循环加载脚本,除 edge-manager 外全部 cat xxx.tar.gz | docker load;
  • 内核参数和 SELinux/防火墙的处理和 x86 一致,但编译类软件(Redis、Nginx)要确认 ARM 依赖库齐全。

5. 单 master 怎么升级成多 master 高可用的?(核心题,必背) ​

完整流程六步:

  1. 所有节点 hosts 互信、装好负载均衡(Nginx 或 haproxy,监听 16443——因为和 master 复用一台机器,不能再占 6443);
  2. 导出集群配置:kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml;
  3. 在 apiserver 下追加 certSANs(新 VIP、三台 master 主机名和 IP)——原证书没有这些 SAN,不更新证书用 VIP 连集群会报证书不合法;
  4. 重新签发证书:先 mv /etc/kubernetes/pki/apiserver.{crt,key} ~(不移走 kubeadm 不会重建),再 kubeadm init phase certs apiserver --config kubeadm.yaml,然后杀掉 apiserver 容器让 kubelet 自动拉起新证书的实例,openssl x509 -in apiserver.crt -text 验证 SAN 列表;
  5. 配置回写:kubectl -n kube-system edit configmap kubeadm-config 同步 certSANs;
  6. master02/03 加入:从 master01 scp 证书(ca、sa、front-proxy-ca、etcd/ca 和 admin.conf),拿 join 命令加 --control-plane 参数加入;然后配置 Keepalived——主节点 priority 100、备 90,vrrp_script 挂一个 check 脚本检测 16443 端口(ss -antp | grep 16443,0 个进程 exit 1 触发 VIP 漂移),主节点关机实测 VIP 漂移、curl -k https://VIP:16443/version 验证集群正常。

6. FusionCompute 里 CNA 和 VRM 是什么?怎么装的? ​

CNA 是计算代理节点(装在每台物理机上,承载虚拟机运行),VRM 是虚拟化管理节点(管理 CNA 集群)。安装流程:先做 RAID(TaiShan 2280 不带 RAID 卡,用软 RAID;系统盘 RAID1、数据盘 RAID5),然后通过 iBMC 远程控制台挂载 ISO(CNA 一个镜像、VRM 一个镜像),配置硬盘、管理网 IP、主机名、时区、root 和 grub 密码,装完执行 cnaInit/vrmInit 初始化。然后在 VRM 的 Web 管理页面(https://VRM-IP:8443)创建集群、添加 CNA 主机、配分布式交换机和端口组(VLAN)。有个小坑:iBMC 虚拟控制台默认英文键盘会导致方向键失灵,要切日语键盘布局。

7. DME 是干什么的?和 FusionCompute 什么关系? ​

DME 是华为的数据管理引擎,在这个项目里做虚拟化资源的统一运维管理面。它通过接入 VRM 自动注册并纳管 FC 上的虚拟化资源,对接后 FC 侧的告警通过 SNMP 管理站上报给 DME,两侧告警能同步说明对接成功。注意两个细节:DME 每 30 分钟对 FC 做一次全量资源同步,所以 FC 上的变更最多 30 分钟后才在 DME 呈现;三节点部署接入 VRM 之后就不要再改 DME 管理浮动 IP,否则 VRM 同步会失败。部署方式是用 SmartKit 的"数据中心虚拟化解决方案部署"向导,选 ARM + EulerOS,三个节点各 1T 磁盘。

8. Vastbase 一主一备怎么部署和验收的? ​

部署用海量侧提供的自动化脚本:两节点上传安装包和 has自动部署2.0.zip,配置 install.conf(安装目录、IP),两节点同时执行 sh vbcluster_install.sh install.conf,执行误差不能超过 10 秒;装完 systemctl enable has dcs。验收四步:查 DCS 状态、查 HAS 状态、查数据库集群状态、vsql 建用户授权用 DataStudio 远程连。性能上我们调过两个参数:max_connections 从 100 改到 10000,开线程池(enable_thread_pool=on)。踩过的坑:安装目录权限——脚本用 vastbase 用户安装,目录不在 /home/vastbase 前缀下会因无读写权限失败。license 是自带 3 个月免费期,到期前申请正式 license 替换 vastbase.yml 里的路径再重启 has(先重启一个节点,就绪后再重启另一个,避免双主)。

9. 高可用怎么验证的? ​

三个层面:K8s 层面,关掉一台 master,VIP 漂移到备节点,kubectl 正常返回;数据库层面,HAS 集群状态里主备角色正常、模拟主节点故障观察切换;平台层面,BCS 管理平台 https://VIP:30000 持续可访问,业务平面 Pod 全部 Running。

四、项目深挖问题(印象深刻的故障/场景题) ​

Q1:项目里印象最深的问题? ​

证书 SAN 导致的集群访问失败。单 master 升级多 master 后,用 VIP 连 apiserver 报证书错误。定位过程:curl -k 能通但 kubectl 报 x509,说明不是网络问题而是证书校验;openssl x509 -text 查看 apiserver 证书,发现 SAN 列表里没有新 VIP 和 master02/03 的主机名。解决就是标准的三步:改 kubeadm.yaml 加 certSANs → 移走旧证书重新 kubeadm init phase certs apiserver → 杀 apiserver 容器让 kubelet 拉起新证书。教训:改集群入口地址必须先想证书,kubeadm 的证书只包含初始化时 certSANs 里的名字。

Q2:数据面节点加入 BCS 时镜像怎么处理的? ​

内网环境拉不了海外镜像,我写了一个批量加载脚本:遍历目录下所有 tar.gz,排除 edge-manager 开头的管理面镜像(那是管理面节点加载的),其余全部 cat $f | docker load,所有数据面节点统一执行。BCS 纳管数据面用的是 Token 认证:edgetool create-sa 创建 edge-admin 的 ServiceAccount,apply 后从关联 secret 里把 token base64 解出来,填到 BCS 管理平台"纳管集群"页面。

Q3:haproxy 和 Nginx 两个方案都用过?区别? ​

都做过 apiserver 前面的四层负载。haproxy 方案:frontend bind 16443,backend roundrobin 挂三台 master 的 6443,带 check 健康检查,还有 1080 的 stats 页面;Nginx 方案:stream 模块 upstream + listen 16443 proxy_pass。区别不大,都是四层 TCP 转发,选型看现场运维习惯——银行客户侧对 Nginx 更熟,后期标准化到 Nginx + Keepalived。共同要点:监听端口必须避开 6443(与本地 apiserver 冲突)、后端健康检查摘除故障 master、Keepalived 用 track_script 检测负载均衡端口。

Q4:Keepalived 脑裂怎么防范? ​

脑裂场景是主备都认为自己是 MASTER,VIP 冲突。我的做法:一是 vrrp_script 检测脚本要检测真实服务端口(16443 有没有进程监听)而不是只检测 Keepalived 自己,服务挂了主动降权让 VIP 漂走;二是主备 priority 拉开差距(100/90), advert_int 1 秒保证快速感知;三是 VRRP 报文走的管理平面交换机要保证组播/单播畅通。验证方式就是实操:主节点直接关机,看 VIP 是否漂移、集群是否正常。

Q5:数币智能合约管理平台的部署链路? ​

这是公司自研 Java 平台,完整链路我做过多次:① 装毕昇 JDK 8u362(ARM 版)配环境变量;② 在 Vastbase 里建库执行初始化 SQL 导数;③ 编译安装 Redis 5.0.3(源码 make,bind 0.0.0.0、daemonize yes);④ 部署后端 jar 包,改 application yml 里的数据库和 Redis 连接,导入 BCS 管理员证书并用 openssl 把 crt/key 转成 p12(BCS 的 TLS 证书给 Java 服务用要转格式),jps -l 验证进程;⑤ Nginx 1.25.1 源码编译(--with-http_ssl_module --with-http_stub_status_module),80 端口 301 重定向到 443,443 挂证书服务前端静态页,/prod-api/ 反向代理到本地 8080 后端。有个前端经典问题:登录后刷新 404,是因为路由是前端路由,要用 try_files $uri $uri/ /index.html 兜底。

Q6:数字人民币和智能合约的业务知识?(金融客户项目必问) ​

背下这段:数字人民币是央行发行的数字形式法定货币,定位 M0(流通中现金),是央行负债、具有无限法偿性;运营体系是"双层运营"——央行对商业银行,商业银行对公众,商业银行需 100% 准备金兑换;技术上支持双离线支付,通过加载智能合约实现可编程性,在不影响货币功能的前提下按交易各方约定条件自动执行支付。要点:数币+智能合约 ≠ 区块链——智能合约在数币体系里是可信执行机制,不是必须上链。智能合约平台支撑的场景比如预付资金监管(教培、租房):资金按履约条件分次释放,防止商家挪用跑路。

Q7:验收交付你做了什么? ​

标准实施交付流程:环境验收(K8s 全组件 Running、etcd 健康、数据库主备正常、平台功能冒烟)→ 文档交付(安装部署指南、IP 规划表、验收报告)→ 客户培训(平台使用、日常巡检要点)→ 驻场保障到业务上线稳定。我输出的部署指南后来成为公司同类项目的标准文档。

Q8:如果平台用户反馈"无法登录",你怎么排查?(银行现场高频) ​

我的排查顺序:① 用户侧网络能不能通到平台 VIP(ping / telnet 443);② Nginx 是否存活、443 证书是否过期;③ 后端进程在不在(jps 看 jar、8080 端口);④ 后端日志里数据库/Redis 连接是否报错;⑤ Vastbase 主备是否发生过切换、连接串指向的 VIP 是否正常;⑥ BCS 中间件证书是否到期(p12 是有有效期的)。这套顺序是从入口往里、从网络到应用,基本 5 分钟内能定位到层。

五、分层八股自测清单(对照知识库「05-八股文」) ​

  • Linux+网络:常用 10 命令、755/644、七天内日志删除、CPU 高定位(top → P 排序 → top -Hp 看线程)、swap 作用、TCP 三次握手、VLAN 划分。
  • 三剑客+Shell:$@ $# $* $? 含义、awk 取列统计 Nginx 日志、crontab 定时备份脚本。
  • 中间件 Nginx:三种负载策略、root 和 alias 区别、调优两项(worker 进程/连接数、limit_req 限流)、负载均衡配置五步、4 层 stream 和 7 层 http 的区别(本项目 apiserver 代理是 4 层)。
  • DBA:主从原理(本项目是 Vastbase 主备,要能对比讲 MySQL 主从 binlog 复制)、mysqldump/XtraBackup 备份、慢查询 EXPLAIN。
  • Docker/K8s:两大节点七组件、四大控制器、Pod 创建/销毁流程、四种 Service、五种 Volume、证书体系(本项目重点:certSANs、kubeadm certs renew all)。
  • 监控:Prometheus 架构六大组件、静态配置采集(static_configs)。

六、注意事项与口径 ​

  1. 脱敏红线:不报内网 IP、BCS 访问地址、仓库账号、任何密码。被追问细节就说"客户内网信息,签了保密协议"——这句话本身在金融行业是加分项。
  2. 数字口径:4 台 TaiShan、15 台虚拟机、3 master + 10 work、一主一备,全部有据可查,大胆说。
  3. 角色口径(重要):公司是华为渠道商/生态服务商——选型决策在华为,我负责部署交付;上线后运维一线在我、二线转华为原厂。面试被问"为什么这么选型"就答:"华为配套体系定的,我负责落地,但配套的原因我能讲清楚"——把决策归原厂、把理解归自己,既真实又不会被华为内部细节问穿。
  4. 版本配套意识是本项目的差异化标签,多提"生产环境严格按配套表"这句话。
  5. 一句话人设:我不是设计这套体系的人,我是把它在银行生产环境一次装通、装稳、装到能交付的人——"会装会修还能讲明白为什么",对 3 年经验这个定位刚好。

七、人事问题与反问(速记) ​

  • 离职原因:三年合同到期 + 公司业务从银行产品转外包、项目模板化,希望到技术挑战更丰富的环境继续深入云原生和 AI 方向。
  • 出差/驻场:有近两年银行驻场经验,适应驻场和 7×24 应急。
  • 反问:团队规模和分工?我入职后负责的方向是集群运维还是交付实施?团队现在的技术栈演进方向(K8s 版本、是否有 AI 落地规划)?