当前位置:网站首页>vivo大规模 Kubernetes 集群自动化运维实践
vivo大规模 Kubernetes 集群自动化运维实践
2022-06-13 10:11:00 【InfoQ】
一、背景
- 需要人工黑屏化集群运维操作,存在操作失误和集群配置差异。
- 部署脚本工具没有具体的版本控制,不利于集群的升级和配置变更。
- 部署脚本上线需要花费大量的时间验证,没有具体的测试用例和CI验证。
- ansible任务没有拆分为模块化安装,应该化整为零。具体到K8s、etcd、addons的等角色的模块化管理,可以单独执行ansible任务。
- 主要是通过二进制部署,需要自己维护一套集群管理体系。部署流程繁琐,效率较低。
- 组件的参数管理比较混乱,通过命令行指定参数。K8s的组件最多有100以上的参数配置。每个大版本的迭代都在变化。
二、集群部署实践
2.1 集群部署介绍
- Bootstrap OS
- Preinstall step
- Install Docker
- Install etcd
- Install Kubernetes Master
- Install Kubernetes node
- Configure network plugin
- Install Addons
- Postinstall setup
- 【可维护性】当组件参数超过50个以上时配置变得难以管理。
- 【可升级性】对于升级,版本化配置的参数更容易管理。因为社区一个大版本的参数没有变化。
- 【可编程性】可以对组件(JSON/YAML)对象的模板进行修补。如果你启用动态kubelet配置选项,修改参数会自动生效,不需要重启服务。
- 【可配置性】许多类型的配置不能表示为key-value形式。
- 使用kubeadm对K8s集群的生命周期管理,减少自身维护集群的成本。
- 使用kubeadm的证书管理,如证书上传到secret里减少证书在主机拷贝的时间消耗和重新生成证书功能等。
- 使用kubeadm的kubeconfig生成admin kubeconfig文件。
- kubeadm其它功能如image管理、配置中心upload-config、自动给控制节点打标签和污点等。
- 安装coredns和kube-proxy addons。
- 使用ansible自带模块处理部署逻辑。
- 避免使用hostvars。
- 避免使用delegate_to。
- 启用–limit 模式。
- 等等。
2.2 CI 矩阵测试
- ansible-lint
- shellcheck
- yamllint
- syntax-check
- pep8
- 部署集群
- 扩缩容控制节点、计算节点、etcd
- 升级集群
- etcd、Docker、K8s和addons参数变更等
- 检查kube-apiserver是否正常工作
- 检查节点之间网络是否正常
- 检查计算节点是否正常
- K8s e2e测试
- K8s conformance 测试
- 其他测试
- 在K8s集群部署gitlab-runner,并对接GitLab仓库。
- 在K8s集群部署Containerized-Data-Importer (CDI)[4]组件,用于创建pvc的存储虚拟机的映像文件。
- 在K8s集群部署kubevirt,用于创建虚拟机。
- 在代码仓库编写gitlab-ci.yaml[5], 规划集群测试矩阵。

- 开发人员提交PR。
- 触发CI自动进行ansible语法检查。
- 执行ansible脚本去创建namespace,pvc和kubevirt的虚拟机模板,最终虚拟机在K8s上运行。这里主要用到ansible的K8s模块[6]去管理这些资源的创建和销毁。
- 调用ansible脚本去部署K8s集群。
- 集群部署完进行功能验证和性能测试等。
- 销毁kubevirt、pvc等资源。即删除虚拟机,释放资源。

- 提供标准的K8s API,通过ansible的K8s模块就可以管理这些资源的生命周期。
- 复用了K8s的调度能力,对资源进行了管控。
- 复用了K8s的网络能力,以namespace隔离,每个集群网络互相不影响。
三、Kubernetes-Operator 实践
3.1 Operator 介绍
- kubernetes controller
- 部署或者管理一个应用,如数据库、etcd等
- 用户自定义的应用生命周期管理
- 部署
- 升级
- 扩缩容
- 备份
- 自我修复
- 等等
3.2 Kubernetes-Operator CR 介绍

3.3 Kubernetes-Operator 架构

- 其它的业务集群可以承载故障集群的业务,kubernetes-operator不需要执行任何操作。
- 如果其他业务集群不能承载故障集群的业务。容器平台开始预估资源,调用kubernetes-operator创建集群,即创建clusterDeployment从备机池里选择物理机器,观测到当前需要操作机器的IP地址生成对应的inventory和变量,创建configmap并挂载给job。执行集群安装的ansible脚本, 集群正常部署完成后开始业务的迁移。
3.4 Kubernetes-Operator 执行流程

- 集群管理员或者容器平台触发创建ClusterDeployment的CR,去定义当前集群的操作。
- ClusterDeployment控制器感知到变化进入控制器。
- 开始创建machineSet和关联machine 资源。
- ClusterInstall 控制器感知ClusterDeployment和Machineset的变化,开始统计machine资源,创建configmap和job,参数指定操作的ansible yml入口,执行扩缩容、升级和安装等操作。
- 调度器感知到job创建的pod资源,进行调度。
- 调度器调用K8s客户端更新pod的binding资源。
- kubelet感知到pod的调度结果,创建pod开始执行ansible playbook。
- job controller感知job的执行状态,更新ClusterDeployment状态。一般策略下job controller会去清理configmap和job资源。
- NodeHealthy感知K8s的node是否为ready,并同步machine的状态。
- addons 控制器感知集群是否ready,如果为ready去执行相关的addons插件的安装和升级。
四、总结
边栏推荐
- Webrtc server engineering practice and optimization exploration
- MySQL利用E-R模型的数据库概念设计
- VDD,DVDD,AVDD,VCC,AFVDD,DOVDD,IOVDD
- 【 ssl2 ⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶83
- Information document management and configuration management
- Blue Bridge Cup group 2021a - two way sorting
- go path包
- C language structure
- Tree and binary tree: application of binary tree traversal
- Leetcode (question 15) - sum of three numbers
猜你喜欢

Apple zoom! It's done so well

苹果放大招!这件事干的太漂亮了……

GCC compilation process

ASCII码值是怎么计算的,怎么计算arccos的值

vivo大规模 Kubernetes 集群自动化运维实践

电解电容、钽电容、普通电容

The rise of cloud computing enterprises and the shaking of Oracle database market dominance

Memory management -- Viewing memory space from the perspective of executing programs and processes

Write pytoch model in five minutes
![[Luogu p1403] Research on divisor](/img/c1/b2a91ddad264d5f8283abf27dc8839.jpg)
[Luogu p1403] Research on divisor
随机推荐
[51nod 3062] n queen problem V2 [bit operation DFS]
类文件结构和类加载过程执行引擎简述
Mobile web effects
[Luogu p1090, ssl1040] merged fruit [pile]
[ssl1280] full arrangement
UNIX Environment advanced programming --3-file io---3.10 file sharing
[51nod p3111] xiaoming'ai intercepts [Las]
【工具链系列】 Notepad++
一篇文章读懂:Spark运行模式
【ELM分类】基于粒子群优化卷积神经网络CNN结合极限学习机ELM实现数据分类附matlab代码
聊聊 C# 方法重载的底层玩法
Double carbon in every direction: green demand and competition focus in the calculation from the east to the West
修饰模式和代理模式的异同
[51nod p2527] or and sum [bit operation]
信息文档管理与配置管理
Apple zoom! It's done so well
一文读懂pgstat【这次高斯不是数学家】
Thingsboard tutorial (21): save data after processing using message types and data processing nodes
It was so simple to implement system call
Go path package