0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于kubernetes托管虚机后续管理设计

454398 来源:oschina 作者:8小时 2020-10-15 16:52 次阅读

基于kubernetes托管虚机有一些现成的方案,不过今天笔者要聊的是在虚机交付后,该如何实现后续的管理,包括如何实现环境和代码的部署与更新,感兴趣的可以一起看看,本篇是设计篇

1. 虚机应用的托管

由于虚机应用交付流程链路的复杂性,我们无法设计一套机制,能cover住100%的异常场景,所以我们专注正常流的交付,后期可以针对异常的案例来进行复盘,不断提高交付成功率,本节主要介绍我们设计的自动化交付流程、以及用到的k8s相关的机制

1.1 面向终态的交付

虚机应用典型的交付流程大概是这样的:申请机器-》部署环境-》部署代码-》绑定监控-》健康检查-》灰度上线,如果要对标容器则创建机器、部署环境、部署代码相当于完成了一个“虚机镜像”的交付,也是我们主要要自动化的流程

1.1.1 核心状态机

在云原生中通常都是基于面向终态的交付方式, 基于目标状态和当前状态由系统自动进行决策,我们根据现状定义了如下的状态机:

这里重点说下就绪状态,就绪状态表示应用的当前的部署环境、代码完成,并且健康检查都通过了即一个节点可以进行灰度引流了

同时如果一个应用的环境变更则会按照对应的安全频率来进行节点环境的变更,只需要变更节点的环境列表,系统会自动发现当前节点需要进行更新,进行状态机的转换;然后自动化系统会发现这个变更则就会进行检查并且自动化的进行环境的安装

1.1.2 故障转移

如果发现某个节点宕机后,则会由系统首先将系统设置为下线状态(IAAS平台还不支持这个事情), 然后会根据策略来进行决策是否自动进行修复,如果需要修复则系统会新创建一个节点然后执行上述流程,否则则会修改对应的副本数量

1.1.3 准入机制

为了保障稳定性我们在自动化的流程中加入准入机制,即在对应的阶段允许引入人工节点来进行决策,将控制权交给应用运维,并且提供相关的数据和策略辅助提高运维决策效率

1.1.4 任务列表

那如果如何确定一个节点处于某个状态下该做哪些任务呢?这里其实取决于两部分当前状态和目标状态,首先我们这里通过系统内部(k8s)里面当前的状态来进行计算以确定节点当前该处于哪个状态,每当进入到一个状态就会同时追加一个任务列表,controller则根据外部状态和任务列表进行自动化操作,并更新内部状态,从而不断的完成不同状态的切换,最终达到目标状态

1.1.5 异常流程

异常流程的处理可能是所有自动化系统里面最头痛的了,在我们的系统里面主要通过两种方式来解决:人工和自动化(好像特么的是废话),

首先来说自动化,当节点某些自动化任务无法进行时系统会通知运维,当前系统遇到无法处理的异常了,这时候运维会根据当前问题来修复某些不满足的条件,比如开通网络策略、部署Agent等等,当完成后只需要变更节点状态,后续就会自动化修复

当遇到无法通过上述自动化短时间来解决的时候,运行运维进行手工修复,并强制更新对应的状态,则系统会根据当前的状态进行后续的操作,比如检测到就绪之后就进行负载挂载等

1.2 kubernetes相关机制

那如何利用k8s的相关机制来实现上述交付流程呢,这里主要通道了webhook、finalizer、annotations几个机制

1.2.1 webhook

首先我们通过webhook再server更新的时候通过admission.Mutation机制来根据当前内部状态进行状态的决策,以确定接下来的自动化任务,在这环节我们实现了从部署环境-》部署代码-》就绪状态的转换

1.2.2 finalizer

在主机进行删除的时候,需要等待负载删除、暂停监控、删除虚机等流程全部结束后才能进行节点对象的删除,从而实现了节点信息的异步清理机制

2. 核心设计

2.1 核心对象设计

考虑到应用的环境操作和部署操作两个操作频率的差异性,我们这里参考k8s声明了两个上层控制器,即通过VMReplicaSet来实现程序运行环境的交付,而将部署操作交由VMDeployment来控制,同时两个控制在操作某个实例的时候都会先进行状态检测,然后在进行资源的锁定才能进行相关的操作,从而保障执行流程的稳定性

2.2 状态转换机制

下面我们会按照几个不同的场景来分别介绍下虚机状态的转换以及对应控制器的控制,我们有两个核心的设计理念:

1.人只负责环境配置的描述,由系统完成相关状态和自动化操作

2.状态的确定依赖于当前现状,同时人的决策高于一切

2.2.1 初始化

当检测副本数量发生变化VMReplicaSet首先会发送申请,确认当前是否要进行机器的创建,同时会创建对应的Server的Package配置,通过计算Package状态设置当前状态为Initializing,并同时创建部署环境的任务,然后等待环境部署的结果,同时会挂载Server的负载信息

等待环境部署完成后,控制器会自动检测状态并设置为Deploying,同时通过部署系统进行代码的部署,并将对象重新入队,直到状态部署完成

代码部署完成后,会进行状态检测,如果系统节点健康检查通过并且监控状态未发现异常,则会将节点设置为Ready状态,同时负载控制器和监控控制器都会对应的配置,至此完成虚机的初始化完成,后续如果环境不变,则代码部署只需要重复当前操作

2.2.2 有状态的下线

虚机通常是有状态的应用,如果要下线通常都是选择指定的节点,并标记为下线状态,同时结合finalizer和控制器完成对应负载和监控的同步操作,当所有的finalizer都释放后,最后进行对应节点的删除

2.2.3 故障转移机制

如果对应的节点宕机,则只需要加一个处理转换逻辑即可,如果是短时间可以恢复就只需要将对应的节点标记为UnKnown,同时监控和负载控制器进行对应的操作,然后等待重启后接收到对应的事件后将节点设置为Initializing, 然后系统会自动进行对应的检测逻辑,自动转换为Ready,监控和负载控制器监控自动执行相关逻辑,即可完成上线

如果节点不可修复只需要将状态设置为下线状态,然后对应的副本控制器检测到节点不足,就会自动调用IAAS系统进行自动创建,然后执行初始化流程即可

3. 未完待续

基于流程驱动的跟基于k8s的控制器在实现流程上其实并没有本质的差别,在云原生里面有很多种玩法,虚机应用的管理本质上就是复杂环境的管理。

如何管理复杂的环境,其实就是让环境可描述,系统自治,尽可能减少人的参与,人只参与影响稳定性的决策,而不参与任何关于流程驱动。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16382

    浏览量

    178312
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27552
  • 负载控制器
    +关注

    关注

    0

    文章

    4

    浏览量

    6423
  • kubernetes
    +关注

    关注

    0

    文章

    225

    浏览量

    8723
收藏 人收藏

    评论

    相关推荐

    艾体宝与Kubernetes原生数据平台AppsCode达成合作

    虹科姐妹公司艾体宝宣布与Kubernetes 原生数据平台 AppsCode达成正式合作,致力于将其核心产品KubeDB引入中国市场,为企业提供专业、高效的云原生数据库管理解决方案。
    的头像 发表于 12-16 15:07 249次阅读

    AI模型托管原理分析

    AI模型托管是指将训练好的AI模型部署在云端或边缘服务器上,由第三方平台提供模型运行、管理和优化等服务。以下,AI部落小编将对AI模型托管的原理进行详细分析。
    的头像 发表于 11-07 09:33 179次阅读

    大冲能源签订能源费用托管型合同能源管理项目

    近日,大冲能源与徐州星晨妇儿医院正式签订了能源费用托管型合同能源管理项目,标志着双方在医疗设施能源优化与管理方面迈出了重要一步。此次合作不仅体现了大冲能源在综合能源托管领域的专业实力,
    的头像 发表于 11-05 14:46 316次阅读

    大带宽服务器托管选择建议

    大带宽服务器托管是指将具有高速网络连接传输速率的服务器,放置在专业的数据中心内进行管理和维护。主机推荐小编为您整理发布大带宽服务器托管的一些关键信息及选择建议。
    的头像 发表于 10-29 11:44 148次阅读

    机房托管费用贵吗?机房托管要考虑哪些因素?

     机房托管费用受多种因素影响,包括地理位置、设备规模、服务水平、安全性要求等。不同配置和服务质量的托管价格差异较大,一般1U服务器托管费用一年在2000到5000元之间。Rak部落为您整理发布机房
    的头像 发表于 08-16 11:34 525次阅读

    机房托管的好处

    机房托管提供的专业级服务和便利性,是其受到企业青睐的重要原因。下面将详细探讨机房托管的多重优势,并了解这种服务模式如何帮助企业提升运营效率和安全保障。Rak部落为您整理发布机房托管的好处。
    的头像 发表于 08-08 10:08 231次阅读

    机房托管服务器说明

    机房托管服务器是指将企业或个人的服务器放置到专业数据中心(IDC机房)进行管理和维护,由数据中心提供稳定、安全的运行环境以及网络连接等基础设施支持。rak小编为您整理发布机房托管服务器说明详细内容。
    的头像 发表于 08-07 13:34 258次阅读

    使用Velero备份Kubernetes集群

    Velero 是 heptio 团队(被 VMWare 收购)开源的 Kubernetes 集群备份、迁移工具。
    的头像 发表于 08-05 15:43 370次阅读
    使用Velero备份<b class='flag-5'>Kubernetes</b>集群

    主机托管的类型和优势

    主机托管是一种将企业或个人的服务器放置到第三方专业机构(通常为数据中心)进行管理和维护的服务。在当今数字化时代,随着数据量的激增和网络信息技术的飞速发展,越来越多的企业开始重视信息系统的稳定性、安全性及扩展性,下面rak部落为您整理发布具体介绍主机
    的头像 发表于 08-02 10:55 261次阅读

    如何使用Kubeadm命令在PetaExpress Ubuntu系统上安装Kubernetes集群

    Kubernetes,通常缩写为K8s,是一个开源的容器编排平台,旨在自动化容器化应用的部署、扩展和管理。有了Kubernetes,您可以轻松地部署、更新和扩展应用,而无需担心底层基础设施。
    的头像 发表于 07-15 13:31 878次阅读
    如何使用Kubeadm命令在PetaExpress Ubuntu系统上安装<b class='flag-5'>Kubernetes</b>集群

    Jtti:Docker会替代调

    Docker是计算虚拟化的一种方式,和使用虚拟进行虚拟化是类似的。由于近几年Docker技术的流行和发展。所以单独介绍一下Docker。首先先回答下面一个问题。 1.Docker会替代调
    的头像 发表于 07-12 14:38 334次阅读
    Jtti:Docker会替代调<b class='flag-5'>虚</b><b class='flag-5'>机</b>吗

    与网关不通的问题处理

    客户反馈实例化过程中的网络问题:第三方VNF实例化完成之后,从Ping网关发现有的网口Ping不通,如下所示。[root@td-b52-vtas4-uircp-0001
    的头像 发表于 05-22 08:05 155次阅读
    <b class='flag-5'>虚</b><b class='flag-5'>机</b>与网关不通的问题处理

    Akamai推出全新GPU

    在云计算领域,Akamai再次展现出其前瞻性的技术视野。近日,公司正式推出了全新的GPU,该配备了英伟达先进的RTX 4000 Ada显卡,为用户提供了卓越的图形处理能力。
    的头像 发表于 05-13 09:21 483次阅读

    如何理解运放电路中的短和断?

    在模拟电路中,短和断是两个重要的概念,它们通常与运放电路有关。这两个术语描述了运放电路中的一些重要现象,认识它们对于电子工程师和电路设计师来说至关重要。本文将深入探讨短和断的含
    的头像 发表于 01-26 08:20 1700次阅读
    如何理解运放电路中的<b class='flag-5'>虚</b>短和<b class='flag-5'>虚</b>断?

    Kubernetes Gateway API攻略教程

    Kubernetes Gateway API 刚刚 GA,旨在改进将集群服务暴露给外部的过程。这其中包括一套更标准、更强大的 API资源,用于管理已暴露的服务。在这篇文章中,我将介绍 Gateway
    的头像 发表于 01-12 11:32 902次阅读
    <b class='flag-5'>Kubernetes</b> Gateway API攻略教程