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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 翻译稿:在云原生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自动化方面的灵活性和易用性,也可以成为云原生编排相关的理想的辅助工具。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
30 11
|
2天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
2天前
|
Kubernetes 负载均衡 监控
深入云原生技术:Kubernetes集群部署与管理
【9月更文挑战第17天】在数字化转型的浪潮中,云原生技术以其灵活性和可扩展性成为企业新宠。本文将引导读者探索云原生的核心组件——Kubernetes,通过实际案例分析其部署与管理流程,旨在帮助技术从业者和企业决策者理解如何利用Kubernetes提升应用的可用性和性能。从基础概念到操作实践,我们将一同见证云原生技术的变革力量。
|
13天前
|
Kubernetes 监控 Cloud Native
云原生入门:Kubernetes 集群部署与管理
【8月更文挑战第38天】在数字化浪潮中,云原生技术如同翱翔的雄鹰,引领着企业飞向灵活高效的未来。本文将带你一探究竟,从Kubernetes的基础概念到实际操作,深入浅出地介绍如何在云端构建和管理你的容器化应用。我们将一步步搭建起一个小型的Kubernetes集群,并通过代码示例和图解,让你轻松掌握云原生世界的钥匙。让我们一起开启这趟技术之旅,探索云原生的秘密花园,找到那把打开创新之门的金钥匙。
|
17天前
|
弹性计算 Kubernetes Cloud Native
云原生时代的航标:Kubernetes的灯塔作用
在数字化浪潮中,云原生技术如同海上的灯塔,指引着企业航行。本文将深入探讨Kubernetes如何成为云原生技术的领航者,揭示其在容器编排、自动化部署等方面的优势,并分享实践案例,为读者提供实用的操作建议和未来趋势的展望。
|
1天前
|
Kubernetes Cloud Native Java
探索未来编程新纪元:Quarkus带你秒建高性能Kubernetes原生Java应用,云原生时代的技术狂欢!
Quarkus 是专为 Kubernetes 设计的全栈云原生 Java 框架,凭借其轻量级、快速启动及高效执行特性,在 Java 社区脱颖而出。通过编译时优化与原生镜像支持,Quarkus 提升了应用性能,同时保持了 Java 的熟悉度与灵活性。本文将指导你从创建项目、编写 REST 控制器到构建与部署 Kubernetes 原生镜像的全过程,让你快速上手 Quarkus,体验高效开发与部署的乐趣。
8 0
|
19天前
|
Kubernetes Linux Docker
在centos7上搭建k8s环境
在centos7上搭建k8s环境
|
20天前
|
Kubernetes Cloud Native 开发者
探索云原生技术:从Docker到Kubernetes的旅程
【8月更文挑战第31天】云原生技术正在改变软件开发、部署和运维的方式。本文将带你了解云原生的核心概念,并通过实际代码示例,展示如何使用Docker容器化应用,并进一步通过Kubernetes进行集群管理。我们将一起构建一个简单的微服务架构,体验云原生带来的高效与便捷。
|
20天前
|
运维 Kubernetes 监控
自动化运维:使用Python脚本实现系统监控云原生技术实践:Kubernetes在现代应用部署中的角色
【8月更文挑战第31天】在现代IT运维管理中,自动化已成为提高效率和准确性的关键。本文将通过一个Python脚本示例,展示如何实现对服务器的自动监控,包括CPU使用率、内存占用以及磁盘空间的实时监测。这不仅帮助运维人员快速定位问题,也减轻了日常监控工作的负担。文章以通俗易懂的语言,逐步引导读者理解并实践自动化监控的设置过程。 【8月更文挑战第31天】本文旨在探索云原生技术的核心—Kubernetes,如何革新现代应用的开发与部署。通过浅显易懂的语言和实例,我们将一窥Kubernetes的强大功能及其对DevOps文化的影响。你将学会如何利用Kubernetes进行容器编排,以及它如何帮助你的
|
20天前
|
Kubernetes 监控 Cloud Native
云原生入门:Kubernetes 集群部署与管理
【8月更文挑战第31天】 在数字化浪潮中,云原生技术如同翱翔的雄鹰,引领着企业飞向灵活高效的未来。本文将带你一探究竟,从Kubernetes的基础概念到实际操作,深入浅出地介绍如何在云端构建和管理你的容器化应用。我们将一步步搭建起一个小型的Kubernetes集群,并通过代码示例和图解,让你轻松掌握云原生世界的钥匙。让我们一起开启这趟技术之旅,探索云原生的秘密花园,找到那把打开创新之门的金钥匙。