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

本文涉及的产品
资源编排,不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 在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集群》
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
Kubernetes 开发工具 Docker
微服务实践k8s与dapr开发部署实验(2)状态管理
微服务实践k8s与dapr开发部署实验(2)状态管理
89 3
微服务实践k8s与dapr开发部署实验(2)状态管理
|
2月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
247 3
|
16天前
|
存储 Kubernetes Cloud Native
云原生之旅:Kubernetes 集群部署实践
【8月更文挑战第4天】本文将带领读者进入云原生的世界,通过实战演练,深入理解如何在云端构建和部署一个 Kubernetes 集群。我们不仅会探讨理论知识,更会通过代码示例,手把手教你从零开始搭建自己的 Kubernetes 环境。无论你是云原生新手,还是希望加深对 Kubernetes 的理解,这篇文章都将是你的不二选择。
|
3月前
|
存储 运维 监控
Kubernetes 集群监控与日志管理实践
【5月更文挑战第28天】在微服务架构日益普及的当下,容器编排工具如 Kubernetes 已成为运维工作的核心。有效的集群监控和日志管理是确保系统稳定性和服务可靠性的关键。本文将深入探讨 Kubernetes 集群的监控策略,以及如何利用现有的工具进行日志收集、存储和分析,以实现对集群健康状况的实时掌握和问题快速定位。
|
3月前
|
存储 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【5月更文挑战第27天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes已成为现代云原生应用的基石。然而,随着集群规模的不断扩大和复杂性的增加,如何有效监控和管理这些动态变化的服务成为了维护系统稳定性的关键。本文将深入探讨Kubernetes环境下的监控策略和日志管理的最佳实践,旨在为运维人员提供一套系统的解决思路,确保应用性能的最优化和问题的快速定位。
|
1月前
|
JSON Kubernetes Linux
k8s备份恢复实践--velero
使用Velero备份k8资源到minio,阿里云oss,七牛云Kodo
135 7
|
2月前
|
Prometheus 监控 Kubernetes
深入理解Prometheus: Kubernetes环境中的监控实践
Kubernetes简介 在深入Prometheus与Kubernetes的集成之前,首先简要回顾一下Kubernetes的核心概念。Kubernetes是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它提供了高度的可扩展性和灵活性,使得它成为微服务和云原生应用的理想选择。 核心组件 • 控制平面(Control Plane):集群管理相关的组件,如API服务器、调度器等。 • 工作节点(Nodes):运行应用容器的机器。 • Pods:Kubernetes的基本运行单位,可以容纳一个或多个容器。
|
1月前
|
Kubernetes Java Docker
使用Kubernetes部署Spring Boot应用的实践
使用Kubernetes部署Spring Boot应用的实践
|
3月前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的实践
【5月更文挑战第30天】 在当今的快速迭代和持续部署的软件发布环境中,自动化运维的重要性愈发凸显。本文旨在探讨如何利用容器化技术与微服务架构,特别是Docker和Kubernetes,来构建一个高效、可伸缩且自愈的自动化运维体系。通过详细分析容器化的优势及Kubernetes的集群管理机制,文章将提供一个清晰的指南,帮助读者理解并实现现代软件部署的最佳实践。
|
3月前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【5月更文挑战第30天】 在动态且日益复杂的云原生环境中,维持 Kubernetes 集群的高性能运行是一个持续的挑战。本文将探讨一系列针对性能监控、问题定位及优化措施的实践方法,旨在帮助运维专家确保其 Kubernetes 环境能够高效、稳定地服务于不断变化的业务需求。通过深入分析系统瓶颈,我们不仅提供即时的性能提升方案,同时给出长期维护的策略建议,确保集群性能的可持续性。

推荐镜像

更多