【龙芯有云第三话】龙芯平台Kuberentes适配最新进展

自主创新的 龙芯中科 前天


Kubernetes是什么



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更快发展。

访问龙芯开源社区,可点击“阅读原文”!



龙芯有云系列文章」

龙芯有云第二话】龙芯平台Docker适配最新进展

龙芯有云第一话】面向容器生态,构建云端未来,龙芯平台CNCF生态适配最新进展