原副标题:vivo小规模 Kubernetes 软件产业智能化互联网管理工作课堂教学
一、大背景
随著vivo销售业务北迁到k8s的增长,他们须要将k8s布署到数个互联网系统。怎样高工作效率、可信地在互联网系统管理工作数个小规模的k8s软件产业是我们遭遇的关键性考验。kubernetes的结点须要对os、docker、etcd、k8s、cni和互联网应用程序的加装和实用性,保护这些倚赖亲密关系繁杂又难手忙脚乱。
从前软件产业的布署和扩缩容主要就透过ansible选曲任务,死机化操作方式、实用性软件产业的inventory和vars继续执行ansible playbook。软件产业互联网管理工作的主要就十分困难点如下表所示:
须要育苗死机化软件产业互联网管理工作操作方式,存在疏忽和软件产业实用性差别。 布署JAVA辅助工具没具体内容的管理辅助工具,有利于软件产业的升级换代和实用性更改。 布署JAVA上架须要耗费大批的时间校正,没具体内容的单元测试和CI校正。 ansible各项任务没拆分成模组化加装,如果另以。具体内容到k8s、etcd、addons的等配角的模组化管理工作,能原则上继续执行ansible各项任务。 主要就是透过十进制布署,须要自己保护两套软件产业管理工作体系。布署销售业务流程繁杂,工作效率较高。 模块的模块管理工作较为纷乱,透过命令行选定模块。k8s的模块最少有100以上的模块实用性。每一大版的插值都在变动。责任编辑将撷取他们合作开发的Kubernetes-Operator,选用K8s的新闻稿式API结构设计,能让软件产业图书馆员和Kubernetes-Operator的CR天然资源进行可视化,以精简、减少各项任务风险较高,只须要一个软件产业图书馆员就能保护数以千计个k8s结点。
二、软件产业布署课堂教学
1、软件产业布署如是说
主要就如前所述ansible表述的OS、docker、etcd、k8s和addons等软件产业布署各项任务。
主要就销售业务流程如下表所示:
①Bootstrap OS
②Preinstall step
③Install Docker
④Install etcd
⑤Install Kubernetes Master
⑥Install Kubernetes node
⑦Configure network plugin
⑧Install Addons
⑨Postinstall setup
上面是集群一键布署关键性销售业务流程。当在数个互联网系统布署完k8s软件产业后,比如软件产业模块的安全漏洞、新功能的上架、模块的升级换代等对线上软件产业进行更改时,须要小心谨慎地处理。他们做到了另以,对单个模块去处理。避免全量地去执行ansibleJAVA,增加保护的难度。针对如docker、etcd、k8s、network-plugin和addons的模组化管理工作和互联网管理工作,需提供原则上的ansibleJAVA入口,更加精细的互联网管理工作操作方式,覆盖到软件产业大部分的生命周期管理工作。同时kubernetes-operator的api结构设计的时候能方便选择对应操作方式yml去继续执行操作方式。
软件产业布署优化操作方式如下表所示:
1)k8s的模块模块管理工作透过ConmponentConfig提供的API去标识实用性文件
【可保护性】当模块模块超过50个以上时实用性变得难以管理工作。 【可升级换代性】对于升级换代,版化实用性的模块更难管理工作。因为社区一个大版的模块没变动。 【可编程性】能对模块(JSON/YAML)对象的模板进行修补。如果你启用动态kubelet实用性选项,修改模块会自动生效,不须要重启服务。 【可实用性性】许多类型的实用性不能表示为key-value形式。2)计划切换到kubeadm布署
使用kubeadm对k8s软件产业的生命周期管理工作,减少自身保护软件产业的成本。 使用kubeadm的证书管理工作,如证书上传到secret里减少证书在主机拷贝的时间消耗和重新生成证书功能等。 使用kubeadm的kubeconfig生成admin kubeconfig文件。 kubeadm其它功能如image管理工作、实用性中心upload-config、自动给控制结点打标签和污点等。 加装coredns和kube-proxy addons。3)ansible使用规范
使用ansible自带模块处理布署逻辑。 避免使用hostvars。 避免使用delegate_to。 启用–limit 模式。 等等。2、CI 矩阵测试
布署出来的软件产业,须要进行大批的场景测试和模拟,保证线上环境更改的可信性和稳定性。
CI矩阵部分测试案例如下表所示。
1)语法测试
ansible-lint shellcheck yamllint syntax-check pep82)软件产业布署测试
布署软件产业 扩缩容控制节点、计算结点、etcd 升级换代软件产业 etcd、docker、k8s和addons模块更改等3)性能和功能测试
检查kube-apiserver是否正常工作 检查结点之间互联网是否正常 检查计算结点是否正常 k8s e2e测试 k8s conformance 测试 其他测试这里利用了GitLab、gitlab-runner、ansible和kubevirt等开源软件构建了CI销售业务流程。
详细的布署步骤如下表所示:
①在k8s软件产业布署gitlab-runner,并对接GitLab仓库。
②在k8s软件产业布署Containerized-Data-Importer (CDI)模块,用于创建pvc的存储虚拟机的映像文件。
③在k8s软件产业布署kubevirt,用于创建虚拟机。
④在代码仓库编写gitlab-ci.yaml, 规划软件产业测试矩阵。
如上图所示,当合作开发人员在GitLab提交PR时会触发一系列操作方式。这里主要就展示了创建虚拟机和软件产业布署。其实在他们的软件产业还布署了语法检查和性能测试gitlab-runner,透过这些gitlab-runner创建CI的job去继续执行CI流程。
具体内容CI销售业务流程如下表所示:
①合作开发人员提交PR。
②触发CI自动进行ansible语法检查。
③继续执行ansibleJAVA去创建namespace,pvc和kubevirt的虚拟机模板,最终虚拟机在k8s上运行。这里主要就用到ansible的k8s模块去管理工作这些天然资源的创建和销毁。
④调用ansibleJAVA去布署k8s软件产业。
⑤软件产业布署完进行功能校正和性能测试等。
⑥销毁kubevirt、pvc等天然资源,即删除虚拟机,释放天然资源。
如上图所示,当合作开发人员提交数个PR时,会在k8s软件产业中创建数个job,每一job都会继续执行上述的CI测试,互相不会产生影响。这种主要就使用kubevirt的能力,实现了k8s on k8s的架构。
kubevirt主要就能力如下表所示:
提供标准的K8s API,透过ansible的k8s模块就能管理工作这些天然资源的生命周期。 复用了k8s的调度能力,对天然资源进行了管控。 复用了k8s的互联网能力,以namespace隔离,每一软件产业互联网互相不影响。三、Kubernetes-Operator 课堂教学
1、Operator 如是说
Operator是一种用于特定应用的控制器,能扩展 K8s API的功能,来代表k8s的用户创建、实用性和管理工作复杂应用的实例。如前所述k8s的天然资源和控制器概念构建,又涵盖了特定领域或应用本身的知识,用于实现其所管理工作的应用生命周期的智能化。
总结 Operator功能如下表所示:
1)kubernetes controller
2)布署或者管理工作一个应用,如数据库、etcd等
3)用户自表述的应用生命周期管理工作
布署 升级换代 扩缩容 备份 自我修复 等等2、Kubernetes-Operator CR 如是说
kubernetes-operator使用很多自表述的CR天然资源和控制器,这里简单地如是说功能和作用。
【ClusterDeployment】:图书馆员实用性的唯一的CR,其中MachineSet、Machine和Cluster它的子天然资源或者关联天然资源。ClusterDeployment是所有的实用性模块入口,表述了如etcd、k8s、lb、软件产业版、网路和addons等所有实用性。
【MachineSet】:软件产业配角的集合包括控制结点、计算结点和etcd的实用性和继续执行状态。
【Machine】:每台机器的具体内容信息,包括所属的配角、结点本身信息和继续执行的状态。
【Cluster】:和ClusterDeployment对应,它的status表述为subresource,减少clusterDeployment的触发压力。主要就用于存储ansible继续执行器继续执行JAVA的状态。
【ansible继续执行器】:主要就包括k8s自身的job、configMap、Secret和自研的job控制器。其中job主要就用来继续执行ansible的JAVA,因为k8s的job的状态有成功和失败,这样job 控制器很好观察到ansible继续执行的成功或者失败,同时也能透过job对应pod日志去查看ansible的继续执行详细销售业务流程。configmap主要就用于存储ansible继续执行时倚赖的inventory和变量,挂到job上。secret主要就存储登陆主机的密钥,也是挂载到job上。
【扩展控制器】:主要就用于扩展软件产业管理工作的功能的附加控制器,在布署kubernetes-operator他们做了定制,能选择自己须要的扩展控制器。比如addons控制器主要就负责addon应用程序的加装和管理工作。clusterinstall主要就生成ansible继续执行器。remoteMachineSet用于多软件产业管理工作,同步元数据软件产业和销售业务集群的machine状态。还有其它的如对接公有云、dns、lb等控制器。
3、Kubernetes-Operator 架构
vivo的应用分布在互联网系统的数个k8s软件产业上,提供了具有集中式多云管理工作、统一调度、高可用性、故障恢复等关键性特性。主要就搭建了一个元数据软件产业的pass平台去管理工作数个销售业务k8s软件产业。在众多关键性模块中,其中kubernetes-operator就布署在元数据软件产业中,同时原则上运行了machine控制器去管理工作物理天然资源。
下面举例部分场景如下表所示:
场景一:
当大批应用北迁到kubernets上,图书馆员评估须要扩容软件产业。首先须要审批物理天然资源并透过pass平台生成对应machine的CR天然资源,此时的物理机处于备机池里,machine CR的状态为空闲状态。当图书馆员创建ClusterDeploment时所属的MachineSet会去关联空闲状态的machine,拿到空闲的machine天然资源,他们就可以观测到当前须要操作方式机器的IP地址生成对应的inventory和变量,并创建configmap并挂载给job。继续执行扩容的ansibleJAVA,如果job成功继续执行完会去更新machine的状态为deployed。同时跨软件产业同步node的控制器会检查当前的扩容的node是否为ready,如果为ready,会更新当前的machine为Ready状态,才完成整个扩容销售业务流程。
场景二:
当其中一个销售业务软件产业出现故障,无法提供服务,触发故障恢复销售业务流程,走统一天然资源调度。同时销售业务的策略是分配在数个销售业务软件产业,同时实用性了一个备用软件产业,并没在备用软件产业上分配实例,备用软件产业并不实际存在。
有如下表所示2种情况:
其它的销售业务软件产业能承载故障软件产业的销售业务,kubernetes-operator不须要继续执行任何操作方式。 如果其他销售业务软件产业不能承载故障软件产业的销售业务。容器平台开始预估天然资源,调用kubernetes-operator创建软件产业,即创建clusterDeployment从备机池里选择物理机器,观测到当前须要操作方式机器的IP地址生成对应的inventory和变量,创建configmap并挂载给job。继续执行软件产业加装的ansibleJAVA, 软件产业正常布署完成后开始销售业务的北迁。4、Kubernetes-Operator 继续执行销售业务流程
1)软件产业图书馆员或者容器平台触发创建ClusterDeployment的CR,去表述当前软件产业的操作方式。
2)ClusterDeployment控制器感知到变动进入控制器。
3)开始创建machineSet和关联machine天然资源。
4)ClusterInstall控制器感知ClusterDeployment和Machineset的变动,开始统计machine天然资源,创建configmap和job,模块选定操作方式的ansible yml入口,继续执行扩缩容、升级换代和加装等操作方式。
5)调度器感知到job创建的pod天然资源,进行调度。
6)调度器调用k8s客户端更新pod的binding天然资源。
7)kubelet感知到pod的调度结果,创建pod开始继续执行ansible playbook。
8)job controller感知job的继续执行状态,更新ClusterDeployment状态。一般策略下job controller会去清理configmap和job天然资源。
9)NodeHealthy感知k8s的node是否为ready,并同步machine的状态。
10)addons控制器感知软件产业是否ready,如果为ready去继续执行相关的addons应用程序的加装和升级换代。
四、总结
vivo小规模的K8s软件产业互联网管理工作课堂教学中,从底层的软件产业布署辅助工具的优化,到大量的CI矩阵测试,保证了他们线上软件产业互联网管理工作的安全和稳定性。选用了K8s托管K8s的方式来智能化管理工作软件产业(K8s as a service),operator检测当前的软件产业状态,判断是否与目标一致,当出现不一致时,operator会发起具体内容的操作方式销售业务流程,驱动整个软件产业达到目标状态。
当前vivo的应用主要就分布在自建的互联网系统的数个K8s软件产业中,随著应用的不断的增长和复杂的销售业务场景,须要提供跨自建机房和云的多个K8s软件产业去运行原云生的应用程序,就须要Kubernetes-Operator提供对接公有云基础设施、apiserver的负载均衡、互联网、dns和Cloud Provider 等,同时也须要后续不断完善,减少K8s软件产业的互联网管理工作难度。
作者丨vivo互联网服务器团队-Zhang Rong
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:[email protected]
关于他们
dbaplus社群是围绕Database、BigData、AIOps的企业级专业社群。资深大咖、技术干货,每天精品原创文章推送,每周线上技术撷取,每月线下技术沙龙,每季度Gdevops&DAMS行业大会。