Infrastructure as Code——Kubernetes一键编排实践

简介: 在2017云栖大会·深圳峰会上,来自阿里云的王升功分享了《Infrastructure as Code——Kubernetes一键编排实践》。他首先从开发者角度分析了基础设施在交互上面临的挑战,提出了基础设施即代码的解决方案。

在2017云栖大会·深圳峰会上,来自阿里云的王升功分享了《Infrastructure as Code——Kubernetes一键编排实践》。他首先从开发者角度分析了基础设施在交互上面临的挑战,提出了基础设施即代码的解决方案。然后,它主要分享了资源编排服务——IaC运行平台以及Kubernetes一键编排的具体实践过程。最后通过实际应用场景分享了一键编排实践的效果。

 

以下内容根据直播视频整理而成。

 

从开发者视角看基础设施

15dddebe38020534049fb183cc95861217ca2522

我们经常拿IDC和云计算作对比,以此来衬托云计算的变化。IaaS、PaaS、SaaS都是从交付方面来阐述其所做的事情,IaaS是基础设施作为服务来交付,PaaS是把平台作为服务交付,SaaS是软件直接作为服务交付。对于开发人员来说,我们之前可能有专门的IDC,有专门的运维人员负责基础设施的维护(选IDC、网络、机器)。云计算的出现,尤其是基础设施作为服务的一个交付手段的时候,开发人员有时候也需要直接面对基础设施的维护。这就给我们带来了新的挑战:80%的关键系统或服务的异常中断是由人为原因引起;50%的系统异常是由变更、配置、发布、人工操作导致。解决上述问题的核心理念是,尽量减少人参与运维流程中所做的事情。我们的解决方案是自动化编排:取消手工操作让应用部署流程自动化;降低运维复杂度让系统自动对齐业务需求。

Infrastructure as Code–基础设施即代码

72652b9ca4914ea6dc32b44395b1262182a7854f

从开发人员的角度来说,最熟悉的流程是:写代码、编译、调试、部署、运行,整个流程会使开发人员的安全感比较高。对于基础设施来说,特别是像如今基础设施都是通过服务来交付的情况,而且这些服务都是由像阿里云这样的第三方云服务商交付的情况,我们的安全感可能会缺失。如果让基础设施也像代码一样在开发人员的掌握中,那么缺失的安全感就能够找回。阿里云提供的所有基础设施都提供了Open API方式,所以可以写代码去操作。就像可以写代码申请内存空间一样,我们也可以通过写代码申请一个ECS、SLB。上图中所示的流程也适用于基础设施。

资源编排服务–IaC运行平台

60fc9cacbbcd814d266e051fb49e16cf0e55ce2a

阿里云通过资源编排服务实现上述理念。上图中有三个核心概念:模板,JSON格式的文本文件,它其实对应上述流程中的代码部分,使基础设施变成可以编写的代码,编写时不需要关注资源如何调用Open API等事情;ROS,编排引擎,它本身也通过Open API的方式向外提供服务,它可以通过用户定义的模板创建一系列的资源;资源栈,即阿里云资源集合,未来对资源的管理都可以以资源栈为单位进行集中管理。整个编排过程是一个全自动的过程。

ee0bd7aabc60a1d0ae24b3f3f1a255298ba8797e

如何实施基础设施即服务的过程呢?如上图所示,首先我们需要对我们的系统进行架构设计,比如如果我们的架构是网站则会涉到负载均衡、RDS资源。接着是模板开发,将设计好的架构编程为模板,模板有足够的能力去表达架构,比如包含的资源,资源之间的关系。将创建好的模板提交给ROS,ROS会根据模板创建资源栈,其出口是一堆资源栈的集合,后期对资源的管理都可以基于资源栈来进行,包括更新、升级。

4daecbcefd605efc82afe8da2fba03abf8d3c086

上图是ROS最简单的编排模板,第一行声明了编排模板的版本。Resources部分,定义了名为k8s_master的资源,类型为ECS实例,并且定义了实例的类型、镜像和安全组。当我们把上述代码提交给编排引擎之后,编排引擎就能根据上述代码创建出一台符合我们要求的ECS实例。

通过资源编排在云端交付开源软件

开源软件交付面临的新问题包括:大计算时代的大型分布式系统架构复杂,角色众多,如何部署?需要与云计算服务整合进行全局优化,如何获取和配置资源?敏捷和DevOps,如何应对快速频繁的部署与销毁?资源编排服务的解决方案:通过编排模板定义云资源的需求和配置;通过CloudInit、Chef进行软件部署;通过全自动的编排引擎进行无人值守的系统交付。

Kubernetes(k8s)

Kubernetes(k8s)的灵感来自于Google Borg,Borg这个系统在Google是做数据中心层面的管理,类似于阿里云的伏羲。而Kubernetes其目的是做容器化应用的自动部署、扩展和管理,社区成员包括Google、IBM、微软、VMWare、Docker等多家公司。如何通过阿里云的资源部署一个最简单的Kubernetes集群?

Kubernetes部署规划

b1ece1fb522a062e7f92d89b4e3e2df7867963e8

上图是一个非常简单的集群,有三个角色:一个Kubernetes Master,两个Node节点。它们跑在三个ECS上,属于一个独立的VPC网络,只有一个子网VSwitch。

29556d7f35dd992154e263702ddd8e2e1f549da1

首先我们要规划我们的网络,所有的资源都放在VPC网络下面,VPC网络在安全性和可扩展性方面都比传统网络要好。最上方通过模板定义了一个VPC模板,类型为阿里云ECS VPC,设置了网段、名字。然后创建VSwitch,环境复杂时可以创建多个子网。最后创建SecurityGroup来管理网络规则。从上述流程可以看出,通过模板来创建VPC网络环境,会使问题变得简单、清晰。

1ab4d5261ffa0cb952de7b259ab609fcc1bb77c7

紧接着,我们为K8sMaster创建ECS,类型为ECS实例,ImageId可以参数化,给一个子网地址,并指定系统盘类型是SSD。

0ca287783e5f64addcd7bce37696308a7eb2c2f8

我们需要在实例中部署Kubernetes的组件,最上方为创建实例时用户指定的数据。中间框中的脚本内容详细展示了部署的过程。

75dbac757ab80eb4e8766140bca412aa36c648aa

Node角色的创建如上图所示。Node的数量是不确定的,我们需要有一种方式能创建多台Node。ECS InstanceGroup的作用是通过MaxAmount和MinAmount两个值控制实例的个数,当需要确定数量资源的时候可以将这两个值设为一致。其余属性和创建Master时是基本一致的。

7ae140513f8b7d6edf797d59dd95fa0ac3318126

上图是Node节点上部署的脚本,作用是在Node节点启动后,在其上部署Node节点所需要的kubelet、docker,以及进行基础环境的配置。

执行编排

0f81fb84de731ad4d098b59a207dbca158b61f21

上文构建的模板已经实现了我们系统方方面面所需要的东西。上图是输入模板的页面,模板源除了直接输入之外还可以指定url文件。这样我们的模板开发完之后就可以放到一个OSS的地址上,其他人也可以通过这个地址创建、部署同样的系统。

4bf828f468d60cbca1aa82c6db64ac677bdbdcbf

前一个页面点击创建之后,就可以进入事件列表页面。通过模板部署应用的过程中,因为涉及到很多的资源,所以存在有很多事件。对于观察者来说,更希望看到过程中的一些细节,从事件列表就可以实时监控到每一步正在进行的事件是什么,并且可以获知其状态。

03296dfb98499feb27ae70e0bae5559a124bfc7d

当所有的编排动作完成之后,可以进入到资源列表页面。这个页面可以看到整个应用被创建出来的资源细节。

e7419179ae251e0702477ebd305da5b396fc9efa

上图是阿里云官方提供的一些样例模板,通过这些模板,我们可以部署Jenkins、docker_ddc等更复杂、更有用的系统。

应用场景:运行环境复制

8699aa173b7bc17722c8e0f9087fed0bb8ae3b34

模板除了有创建资源的用途、运维的用途、软件交互的用途,还可以用于其他场景。比如,当我们实施DevOps的时候,希望有很多靠谱的环境(开发环境、集成测试环境、线上生产环境)。为了让其保证一致,通过手工方式很难做到,但通过模板达到上述目的却比较简单。

类似的场景还有:在模板里定义很复杂的VPC子网结构,做子网规划;做DevOps流程实施;通过编排做资源的创建、删除、规划,做到系统自动扩容、缩容;以模板的形式向客户交付可部署的应用模板。

 

本文介绍的部署Kubernetes集群的编排模板和一个快捷的部署方法已经整理成云栖社区的文章,供参考:《10分钟自动部署Kubernetes1.6.1集群》
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
10月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
399 2
|
5月前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
6月前
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
6月前
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
|
10月前
|
Kubernetes 持续交付 开发者
探索并实践Kubernetes集群管理与自动化部署
探索并实践Kubernetes集群管理与自动化部署
358 93
|
7月前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
7月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
7月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
9月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
9月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
465 24

推荐镜像

更多