【龙芯有云第三话】龙芯平台kuberentes适配最新进展
kubernetes 是 google 于 2014 年 6 月基于其内部使用的 borg 系统开源出来的容器编排调度引擎,google 将其作为初始和核心项目贡献给 cncf(云原生计算基金会),近年来逐渐发展出了云原生生态。kubernetes 作为云原生应用的基石,相当于一个云操作系统。
在paas资源编排层面,kubernetes已经成为了业界公认的事实标准,领先优势非常明显,正呈现出跨领域融合发展趋势。以kubernetes中心的技术、生态日臻成熟和完善。根据云原生产业联盟的2020年调查数据显示,kubernetes在受访人群的采纳率高达63%,在容器编排领域扮演非常重要的角色。kubernetes的编排对象持续丰富不断扩展,以容器为基础编排对象逐渐延展至虚拟机、函数等,理论上所有可编程、有api、可抽象成资源的对象,都在成为kubernetes的编排对象。
应用侧围绕kubernetes生态加速演进,以kubernetes为核心的的云原声技术栈将推广到更多的应用场景。在大数据领域,spark和kubernetes的集成已经非常普遍;在机器、深度学习方面,kubernetes和tensorflow等框架深度集成,用kubernetes去编排机器、深度学习的工作流已取得业界的广泛共识。
kubernetes介绍以及在龙芯平台移植
简介
kubernetes借鉴了borg的设计理念,比如pod、service、label和单pod单ip等。kubernetes的整体架构跟borg非常像,如下图所示:
kubernetes主要由以下几个核心组件组成:
1、etcd保存了整个集群的状态;
2、apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、api注册和发现等机制;
3、controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
4、scheduler负责资源的调度,按照预定的调度策略将pod调度到相应的机器上;
5、kubelet负责维护容器的生命周期,同时也负责volume(csi)和网络(cni)的管理;
6、container runtime负责镜像管理以及pod和容器的真正运行(cri);
7、kube-proxy负责为service提供cluster内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的插件,其中有的已经成为cncf中的托管项目:
coredns负责为整个集群提供dns服务
ingresscontroller为服务提供外网入口
prometheus提供资源监控
dashboard提供gui
federation提供跨可用区的集群
龙芯平台kubernetes
kubernetes 官方目前支持众多 cpu 架构诸如 x86, arm/arm64, ppc64le, s390x 等。然而目前还不支持 mips 架构,始终是一个遗憾。随着云原生技术的广泛应用,mips 架构下的用户始终对 kubernetes on mips 有着迫切的需求,故龙芯云计算团队积极投入kubernetes社区,自主研发移植kubernetes,成功完成了kubernetes以及相关组件的迁移适配,搭建出了高可用的mips集群,同时完成了kubernetes源代码单元测试,集成测试,e2e测试以及e2e node测试,并完成修复相关bug修复,已达到x86水平。
紧跟社区节奏,目前已经移植kubernetes1.15.9和kubernetes1.18.3,并将1.18.3作为lts版本。
迁移适配完成的主要工作内容:
1、对mips64le系统架构的支持
2、golang系统调用syscall兼容性
3、sysacall.stat_t 32位与64位类型转换
4、epollevent修正位缺失
5、制作k8s.gcr.io仓库基础镜像
6、完成源代码相关的测试和bug修复
相关镜像以及二进制、相关发布信息详见龙芯社区 (loongnix.org)
http://www.loongnix.org/index.php/kubernetes
龙芯平台kubernetes周边项目
在完成kubernetes迁移之后,龙芯团队也围绕kuberntes完成周边项目:容器网络(calico,flannel),分布式存储ceph,监控平台prometheus granafa,服务暴露ingress,日志方案loki granafa等项目也迁移至龙芯平台,功能进行了验证。相关镜像可通过dockerhub仓库loongnixk8s获取。
龙芯平台kubernetes实践
基于龙芯平台搭建的kubernetes集群
使用kubeadm calico进行部署,部署后所有服务和pod均运行正常,如下图所示。
环境使用的龙芯服务器搭建,目前集群运行良好。
详情查看:http://doc.loongnix.org/web/#/71?page_id=232
基于龙芯平台kubernetes搭建的loki日志系统
架构图如下所示:
通过loki查询相关日志:
详细查看:http://doc.loongnix.org/web/#/74?page_id=248
基于龙芯平台kubernetes搭建的监控系统
监控系统架构:
搭建好的监控查看prometheus数据:
详情查看:http://doc.loongnix.org/web/#/76?page_id=231
基于龙芯平台kubernetes搭建的ingress服务暴露
服务访问流程:
创建ingress对象以及通过ingress访问nginx服务:
如下访问到nginx的页面表示部署成功。
详情查看:http://doc.loongnix.org/web/#/72?page_id=233
基于龙芯平台kubernetes搭建的微服务治理方案istio
istio架构图:
在龙芯平台搭建好的istio组件服务:
目前相关部署文档正在整理中,后续会发布到龙芯社区,详情可查看龙芯社区相关介绍。
龙芯平台kubernetes未来规划
在完成迁移kubernetes以及周边项目之后,极大的增强了我们对于推进kubernetes支持龙芯平台架构的信心,后续我们一方面将对kubernetes做更高质量的要求,完成性能摸底和分析,完成性能与x86的对齐,另一方面积极地向社区贡献我们的工作经验以及成果,提交pr以及相关patch,希望能够有更多来自社区的力量加入进来,共同推进kubernetes for loongnix更快发展。