**PCM arm环境部署流程总结**

10月12日：
现场环境为银河麒麟V10(GFB)
预先准备的安装文档依赖底层环境为X86架构的centos操作系统，所有很多工作都需要重新整理

我们尝试在阿里云服务器 创建一台按需计费的arm64 ubuntu系统虚拟机来模拟现场环境
首先需要安装K8S集群，参考sealos官方的文档可以提供arm版本的二进制工具，所以沿用sealos进行二进制安装的方式

sealos安装集群要求原操作系统没有docker环境，现场有三台机器，但是有两台已安装docker并不能调整，所以使用另外一台没有安装docker的机器进行实验

10月14日：
mysql现场本地有安装包可以提供安装包，但是后期现场直接提供了mysql环境，实施过程中仅用脚本导入了数据即可，结合此次经验，可以考虑将数据库也放到容器环境中，但是要做好pvc部分的处理

sealos启动k8s集群的过程中，出现了can't get ip address of node kylin-pc,error:no default route found in "/proc/net/route" or "/proc/net/ipv6_route" node="kylin-pc"，检查了一下服务器的名称为kyin-PC,这里查询后发现**k8s不支持机器名称为大写**，调整虚拟机名称为kylin-pc之后此报错依旧存在，此时经过网络搜索排查初步怀疑是机器的路由配置存在问题，但问题没有解决

10月15日：
重新调整思路开始排查docker 进程，发现apiserver和cm和scheduler启动的日志报错都是提示
exec /pause:permission denied，此时怀疑是镜像打包的系统版本和现场环境的版本差异导致镜像应用不兼容， 找舒总帮忙协调找一个同样版本的系统镜像搭建模拟环境，然后给舒总看了相关的报错之后，舒总提示在麒麟的系统重有一个安全相关的设置要关闭，通过执行**sudo setstatus softmode -p关闭系统安全限制**（后续验证其实就是将系统界面设置里面的防火墙关闭即可），不然在镜像中会提示二进制无法执行。然后sealos安装集群正常往下走。

10月16日：
发现sealos安装流程可以正常走完，apiserver、cs和schedule但是在执行网络插件cilium安装的过程中出现报错"Envoy; Binary "cilium-enovy" cannot be executed" error="signal: aborted(core dumped)" subsys=envoy-manager，此时咨询舒总，推测是**应用版本和系统内核不兼容**，这个问题在长沙办公室同版本镜像装在PC机器上可以重现出来。

然后尝试将k8s版本降低，同时网络插件从cilium换成了calico，中途还是会出现coredns容器起不来的情况，中间过程尝试用gfb镜像在阿里云操作发现经常会死机所以放弃使用。

10月17日：
联系舒总看是否可以联系到麒麟云的同事提供一个容器云的安装包来部署K8S集群，中途发现需要使用rpm命令来安装工具包，而现场环境不支持rpm命令所以放弃。

因为K8S集群还存在问题无法搭建，所以中途考虑使用纯docker的方案也把容器暂时跑起来运行了。但是结合业务场景提供不了太多支持。

10月18日：
长沙办公室GFB系统安装完成，在上文提到的关闭防火墙操作执行之后，1.25版本的集群安装没有出现问题。然后在这个系统中的所有素材打包发往现场。用这个包在安装之后，发现所有的pod都能够启动，状态为running，网络插件中的calico-node的pod可用数一直为0，查看calico-node一直报错kubelet Readiness probe failed calico/node is not ready: BIRD is not ready:Error querying BIRD:ubable to connect to BIRDv4 socket:dial unix /var/run/calico/bird.ctl:  connection refused或者是二进制文件找不到，总之是网络相关的配置有问题，然后发现calico-server的镜像没有，pod也没有起来，以为是打的包有问题，所以又重新怀疑到网络问题，调整dns发现没有效果。

10月19日：
找到阳哥帮忙来查看一下，起初以为是因为calico没有识别到网卡，需要在calico的cm中去配置网卡识别规则来重新识别，改动cm之后没有效果，所有其他pod的报错日志都是Error from server: no preferred addresses found; known addresses: []，然后查看kubelet日志，其中报错can't get ip address of node error:no default routes，阳哥提醒再检查一下路由，发现果然没有配置默认路由，然后**配置了一个同网段不存在的地址作为默认网关**，此时所有的pod都正常启动可以运行了。

后续pcm服务的部署过程相对比较顺利，其中一个点事pcm-kubernetes的配置文件中服务名的配置需要和集群名称一一对应，这个配置规则当时没有注意到，后续需要把规则调整，一个服务要可以代理多个集群，**服务的名称不应该和集群名称相关联**。

至此所有的服务也业务部署流程基本完成，PCM平台在arm64的麒麟系统中部署基本形成一套完整的素材。过程中遇到了很多问题，总结起来可以提高效率的地方：

 **1. 在得知现场环境的版本之后，如果有条件第一时间搭建对应的模拟环境，方便后续的问题复现以及排查
 2. 目前团队对于网络方面的储备略有不足，需要多加学习
 3. 有些安装繁琐或者对系统版本要求多但是可以通过容器化的东西，可以考虑转到容器中运行，例如mysql等**

