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自动化方面的灵活性和易用性,也可以成为云原生编排相关的理想的辅助工具。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
134 2
|
11天前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
27天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
130 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
2月前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
64 3
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
2月前
|
Kubernetes 负载均衡 Cloud Native
探索Kubernetes:云原生应用的基石
探索Kubernetes:云原生应用的基石
|
2月前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
81 1
|
2月前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####