Ansible-在云原生K8S环境中有多大用处?(翻译)

简介: 翻译稿:在云原生K8S环境中Ansible有多大用处? 本文主要讲了Ansible在容器构建,多集群管理,和应用生命周期管理方面的用处

-- 原文出处:https://www.ansible.com/blog/how-useful-is-ansible-in-a-cloud-native-kubernetes-environment

-- 译者注:这其实也是我自己曾经的困惑,在K8S的环境中是否还需要Ansible来辅助运维,这篇文章正好解答了这个问题。译者水平有限的套话也要说一下,因为确实如此,不是谦虚。

前言

最近经常被问到这么一个问题:在K8S项目中你为啥还在用Ansible呢?下一个问题往往是:既然你已经开始用K8S,为啥还要写《Ansible for Kubernetes》这么一本书呢?

我花了点时间思考了下这些问题,以及问题背后的原因,就决定为此写篇博客。因为看起来有很多人可能对K8S是什么和Ansible能干什么有些困惑,有必要解释一下为什么Ansible在当前越来越多的业务往云原生的技术栈做迁移的时候仍然是很有用的一项技术。

我先从我的书中引用一段说明:
-- 虽然Ansible技术上几乎可以做任何事情,但它不一定是最适合某个具体的IT基础设施的自动化框架。可能有其他的工具能更好的契合你的应用的开发流程,或者能从vendor那里获得更多更好的支持。

首先我们需要避免黄金大锤谬论(Goldend Hammer Fallacy)。没有一种基础工具(甚至是最好的K8S-AAS platform)能完全满足一整套完整的IT自动化操作流程。实际上Ansible能融入云原生架构的管理流程的很多领域,这里我着重讲主要的3点,也就是Container Builds(容器构建), Cluster Management(集群管理), 和 Application Lifecycles(应用生命周期管理)。

在此我想给那些一头扎进K8S但没有采用更广泛的自动化策略的团队提个醒,K8S不会管理你的应用的整个生命周期,也不负责自启动,你不应该满足于通过手工的方式构建和管理K8S集群,那样是非常危险的,尤其是有多个集群需要管理的情况,实际上K8S的最佳实践就是要有多个集群(至少要有staging+production两个集群,或者内部私有集群+公共对外集群)。

容器构建(Container Build)

在过去十数年来,服务器管理和应用部署已经越来越自动化了。自动化技术变得越来越直观,可维护性越来越好,尤其是在引入一些优秀的配置管理和编排工具后,譬如CFEngine, Puppet, Chef, 和Ansible等工具。

但是,没有一种单一的工具能满足不同应用的部署自动化要求。不同类型的应用的部署技术差异很大,Java有war包和VM虚拟机,Python有自己的虚拟环境,PHP有自己的脚本和多个执行引擎,Ruby也有它自己的执行环境。希望高效的管理5个,10个或更多开发栈的服务和部署是极具挑战的,这还不算一个开发栈可能有多个版本的情况,譬如Java可能有Java7,Java8,Java11等多个版本呢。

幸运的是,容器技术能很好的解决这个问题。开发工程师可以直接交付一个在当前大多数系统服务器环境上都能运行的container, 代替交付源代码和在不同环境上部署的错综复杂的操作指令。

但在某些方面,容器构建领域的自动化有点停滞不前。容器构建的Dockerfile, 通过DSL语言和inline command组成的脚本还是很晦涩难懂但仍被大量使用。这里Ansible可以做得更好!Ansible也支持用Dockerfile构建容器,但与Ansible的容器构建工具ansible-bender整合的轻量的开源工具Buildah能够用更加可描述的和可维护性更好的Ansible Playbooks来构建容器,甚至可以不用安装Docker!

虽然还有其他一些工具能辅助构建容器,但实际上,还是有很多开发工程师和系统运维人员仍在使用原始的Dockfile构建关键性的基础架构组件的容器,而没有采用像Ansible这样的描述性更好,可维护性更好,更通用的工具,我对此深感痛惜!

集群管理(Cluster Management)

K8S集群不是凭空产生的,它们需要做升级和集成的管理工作,具体因不同的集群类型而异。集群管理是比较容易引发问题的,尤其是同时管理多个集群的情况。实际上大部分组织恰恰都是这种情况,可以有多个生产集群,可能有QA集群和staging集群,等等。

如果你在使用私有云或者裸的物理机服务器,你需要一个方式来安装K8S和管理集群里的各个机器。Ansible已经证明了能很好的编排管理多服务器应用,而K8S本身就是一个多服务器应用(它又能通过容器技术管理一个到成百上千个其他的多服务器应用)。Kubespray等项目已经在使用Ansible进行K8S集群的定制化构建,已经被使用在很多基于K8S的基础架构上。

假如你在使用托管的K8S,譬如AKS, EKS, 和GKE等等,Ansible有专门的针对性的module(譬如azure_rm_aks, aws_eks_cluster, gcp_container_cluster等)来辅助管理集群,当然还有成百上千的其他Ansible module可以用来简化集群管理,及标准化不同云服务提供商的集群管理。

即使你不需要管理有多重云的集群,Ansible也提供了一些很有用的工具,譬如可以用cloudformation module来管理AWS上的CloudFormation模板部署,可以用terraform module做Terraform的部署。

极少有应用是完全独立的在K8S集群内运行而不需要和一些外部的资源(譬如网络设备,存储,数据库服务等)打交道的。如果幸运的话,可能有现成的K8S Operator可以用来和这些外部资源集成,但是很多时候你会发现并没有这样的K8S Operator。这时Ansible就能派上用场了,Ansible可以通过和云原生通用的YAML语言编辑Playbooks来管理K8S集群和外部资源。

我想重复一下上面说过的话:你不应该满足于通过手工的方式构建和管理K8S集群,尤其是有多个集群需要管理的情况。

应用生命周期管理(Application Lifecycles)

最后一个Ansible能发挥重要价值的领域是管理K8S上应用的生命周期。你可以使用Ansible基于Operator SDK构建operator, 对应用的生命周期管理进行编码,包括部署,升级,备份等等,然后应用到各个K8S集群。光是这一项Ansible的作用就够大的了。

相比于开发和运维人员不得不学习Go语言或其他专门的语言来维护operator, 采用YAML/Ansible可能是一个更好的选择。基于Operator SDK的现状,在一些高级的使用场景可能不得不回退到使用Go语言来开发opertor,Ansible还是会有很多能发挥作用的场景。

结语

如果团队已经在使用Ansible, 显然可以把现有的Ansible的积累,roles/modules/Playbooks等迁移到K8S管理的Playbooks和基于Ansible的Operator。如果是还没有使用Ansible的团队,Ansible因为其出色的IT自动化方面的灵活性和易用性,也可以成为云原生编排相关的理想的辅助工具。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
25天前
|
JSON Kubernetes Linux
Linux环境签发CA证书和K8s需要的证书
Linux环境签发CA证书和K8s需要的证书
25 0
|
3月前
|
Kubernetes Cloud Native 调度
云原生技术专题 | 云原生容器编排问题盘点,总结分享年度使用Kubernetes的坑和陷阱
随着云原生的兴起,越来越多的应用选择基于Kubernetes进行部署,可以说Kubernetes 是最流行的容器编排和部署平台。它的强大功能特性,可以保障在生产中可靠地运行容器化应用程序,相关的DevOps等工具也应运而生,下面就是小编简单化了一个Kubernetes的逻辑架构图。
327 9
云原生技术专题 | 云原生容器编排问题盘点,总结分享年度使用Kubernetes的坑和陷阱
|
10天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
15 4
|
29天前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
218 0
|
1月前
|
Kubernetes Cloud Native Devops
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
51 1
|
1月前
|
弹性计算 运维 Kubernetes
云原生K8S场景自动化响应ECS系统事件
客户云原生K8S场景下,通过社区开源NPD+Draino+Autoscaler零开发,对接响应ECS主动运维事件,通过自动响应事件减少非预期宕机。
|
2月前
|
IDE Cloud Native 开发工具
云原生之在Docker环境下部署Atheos云IDE平台
【2月更文挑战第3天】云原生之在Docker环境下部署Atheos云IDE平台
364 2
|
3月前
|
Kubernetes Cloud Native 网络协议
【云原生】Kubernetes介绍
【云原生】Kubernetes介绍
38 1
|
3月前
|
人工智能 Cloud Native PyTorch
阿里云 ACK 云原生 AI 套件中的分布式弹性训练实践
阿里云 ACK 云原生 AI 套件中的分布式弹性训练实践
148654 4
|
3月前
|
人工智能 Cloud Native 调度
为大模型工程提效,基于阿里云 ACK 的云原生 AI 工程化实践
本文主要介绍了解析云原生 AI 所遇到的技术挑战和应对方案,随后介绍云原生 AI 领域的关键技术与架构细节,最后分享我们在 ACK 的相关经验及工程实践。

推荐镜像

更多