无 IaC 不 DevOps

2024-03-14 18:50
文章标签 devops iac

本文主要是介绍无 IaC 不 DevOps,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随着云计算的发展,这两年DevOps也着实火了一把,IT圈内人士的日常问候语都成了“你们团队DevOps了吗?”。DevOps相关工具、最佳实践层出不穷,甚至有些团队已经把它上升到了文化、战略层面。众所周知DevOps的核心之一是自动化,为了实施DevOps团队引入了各种各样的自动化工具,如下图。

screenshot

这些玲琅满目的工具功能强大甚至相互渗透,导致大批开发人员迷失其中。统计发现好多用户拿一个工具干了所有的事儿,这是不推荐的。一般地,我们按照抽象级别把这些工具分如下几层。

screenshot

云计算时代的DevOps已经远远不只是协同开发、自动构建、持续集成那点儿事儿。可以用Packer创建操作系统、开发环境的镜像,一次打包多次分发;用Terraform搭建云资源基础架构,一键部署、基础设施即代码;基于Docker构建容器集群,让开发者更关注应用本身;AnsibleCloud-Init对集群节点按角色进行配置和管理;用Jenkins等工具做持续集成和部署,减少项目风险,让团队作出快速响应。在不同的场景下,配合使用这些工具会起到事半功倍的效果。

接下来,给大家分享一个Terraform配合Cloud-Init使用的典型案例。

案例分析

screenshot

某开发团队定期在阿里云上搭建集群跑UT测试任务。集群部署在VPC网络环境下。其中Master节点负责任务分发,Worker集群负责执行任务,最后由Master汇总结果并提交回GitHub。

准备工作(基础设施规划)

首先,网络结构我们推荐选择VPC网络类型的云资源,因为VPC网络本身是一个独立隔离环境,同时提供了灵活的网络规划和安全管理方式。用户可以通过规划IP网段、授信专有网络网段访问、配置安全组等策略构建自己的网络环境。

另外,本例VPC中的ECS需要访问公网,目前有三种方式

  • 给每一台ECS都绑定EIP,绑定之后既可以访问公网,也可以被公网访问。
  • 将一台绑定了EIP的ECS配置NAT 策略(配置Iptables),使其成为NAT Instance,VPC内其他的ECS可以通过此NAT Instance访问公网。脚本如下:

    net.ipv4.ip_forward=1
    sysctl -p
  • 创建NatGateway和带宽包,配置SNAT,让同一个IP的不同端口号映射到不同的ECS。

这三种方案各有优缺点。方案一,给每一台ECS都绑定EIP不仅成本高还有一定的安全风险。考虑到每台Worker只需要短暂的外网访问能力,没有必要单独占用网络资源,本例采用方案二。不过在大规模的生产环境,推荐使用高可用的NatGateway产品,它适合对公网带宽需求量较大的企业。

操作步骤

  • 搭建物理资源

    • 创建VPC、ECS、EIP等云资源
    • 搭建VPC环境、配置安全组规则
    • ...
  • 安装依赖环境

    • 安装make
    • 安装make
    • 升级python
    • 安装git
    • ...
  • 运行脚本

    • git clone https://github.com/company/repo-name /workspace
    • export ENVIRONMENT=your_value
    • make test
    • ...
  • 收集结果

手工方式面临的问题

  • 运维成本高

往往部署一套测试环境是非常复杂的,涉及网络的构建、规格的选择、操作系统的选择、中间件的搭建等,这就导致需要更多的运维成本。另外,手动创建基础设施与服务器配置需要很高的时间成本,没有流程化和配置化的工具,整个过程无法追踪,出现问题的时候环境不能快速恢复,可能造成无法挽回的损失。不妨想象一下,当服务器数量在100台以上规模的时候,需要多高的运维成本。

  • 不可复制

通常企业会在不同的Region搭建相同的基础架构,往往会按环境进行部署,还会对云资源进行划分和归类,对基础架构进行协同维护和版本追踪。面对这样的需求想要做到快速复制,手工方式毫无疑问是无能为力的。

自动化部署方案

我们希望从云基础架构搭建到整个应用程序的部署过程,能够做到全部自动化,来加快初始部署和持续集成的速度。本案的特点是属于短周期类的任务,云基础设施的架构比较复杂,应用部署相对简单。Terraform+Cloud-Init是一个不错的选择。

Terraform

Terraform 是来自HashiCorp家族开源的编排工具,目前支持阿里云、AWS、Azure、GoogleCloud、DigitalOcean等诸多云厂商。Terraform社区活跃,在GitHub上的Fork数将近3000,每周都会有大概200的Commit,代码贡献者达到了750人。另外,其官方提供完备的说明文档以及培训支持服务,解决企业的后顾之忧。

Terrraform还支持预览,它可以生成一个执行计划,帮助我们了解本次构建将会对资源进行哪些更新,以及资源之间的创建顺序。这会使编写模板变得简单和有趣。

对运维人员来说,Terraform是个很实用的工具。公司的需求一直会变,云服务的价格和服务也在变。阿里云的服务更实惠,那么就在阿里云一键部署一套,不再被AWS牵着鼻子走。前段时间S3故障了几个小时,中招的同学请举手

Cloud-Init

有的时候我们希望在server启动的时候能够自动对其做些配置,比如配置网络,写入文件,下载一些包并安装等等,阿里云ECS中提供了支持,就是Cloud-Init和User-Data。

这里首先要说一下Meta-Data API, 所谓Meta-Data就是关于虚拟机的元数据,提供这个API主要是为了能够获取机器自身的原生信息。如 hostname、网络配置信息、资源 InstanceId 等,其主要的形式为键值对。在阿里云主机上可以通过下面的地址查询 Meta-Data信息

curl http://100.100.100.200/latest/meta-data
curl http://100.100.100.200/latest/meta-data/private-ipv4

Cloud-Init 是一个在云主机启动时操作和定制云主机环境的包。它可以在云主机启动时自动执行,Cloud-Init 实现这些功能的基础是 User-Data,它提供给用户传入配置文件和脚本的能力。在阿里云主机上可以通过下面的地址查询 User-Data 信息

curl http://100.100.100.200/latest/user-data

简单的说,Cloud-Init可以在server启动的时候拿到主机信息(Meta-data)去执行用户脚本(User-Data)。不过,当前阿里云ECS执行User-Data还有一些限制,需要VPC类型的IO优化实例,具体请以官方文档为准。

实施部署

依据前面的基础架构规划编写模板,详细的编写说明请参考官方帮助文档,模板片段如下:

resource "alicloud_instance" "master" {image_id = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"instance_type = "ecs.n1.small"security_groups = ["${alicloud_security_group.group.id}"]vswitch_id = "${alicloud_vswitch.main.id}"instance_name = "master"io_optimized = "optimized"system_disk_category = "cloud_efficiency"password= "Test123456"depends_on = ["alicloud_instance.worker"]user_data = "${data.template_file.shell.rendered}"
}

如上描述了ECS的详细配置,VPC类型系列二1核2G的IO优化实例,实例在启动的时候会执行我们的user_data脚本,片段如下:

#!/bin/shPostRouting=${vswitch_cidr}
SourceRouting=`ifconfig eth0|grep inet|awk '{print $2}'|tr -d 'addr:'`
echo ${worker_private_ip}>> /etc/sysctl.conf
echo 'net.ipv4.ip_forward=1'>> /etc/sysctl.conf
sysctl -p
iptables -t nat -I POSTROUTING -s $PostRouting -j SNAT --to-source $SourceRouting
iptables -t nat -I PREROUTING -d $SourceRouting -p tcp --dport 80 -j DNAT --to ${worker_private_ip}

您可以直接在我们官方仓库下载完整模板,然后切换到alicloud-ecs-nat目录执行命令terraform apply来体验一键搭建的顺滑感,如果遇到任何问题可以直接给我们提Issue。下图是根据模板生成的资源依赖关系图,是不是有种hold住全场的感觉?

screenshot

最后

当然,对于更复杂的应用场景,需要综合运用Packer、Ansible、Jenkins等工具来协同作业,后续我们会逐一分享。另外,如果您对DevOps、CI/CD、IaC、虚拟化技术等感兴趣可以关注我们的GitHub。

这不是广告

如果您对云计算、开源、DevOps、Docker、虚拟化技术有专长,欢迎加入我们!

您可以Github找到我们,也可以通过这个链接投递简历

这篇关于无 IaC 不 DevOps的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/809383

相关文章

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上

文章目录 1. 添加树莓派到 Agent Pool1.1 添加pool1.2 添加agent 2. 将树莓派添加到 Deployment Pool2.1 添加pool2.2 添加target 3. 添加编译流水线3.1 添加编译命令3.2 配置触发器 4. 添加发布流水线4.1 添加命令行4.2 配置artifact和触发器 5. 完成 1. 添加树莓派到 Agent Pool

k8s集群本地搭建,使用gitlab、harbor、jenkens、cicd来实现devops自动化构建

k8s集群本地搭建 准备:一台windows即可我windows内存是32gb的,6核,每核2线程全程使用终端 ssh命令操作.我是直接用的mac点操作windows,然后windows连接虚拟机即可.虚拟机记得改网卡,这样才能保证以后ip不变.介绍:k8s集群本地搭建(1master、2node)k8x运用devops来自动化构建服务(gitlab、harbor、jenkens、cicd)简介

k8s上搭建devops环境

一、gitlab 1.安装gitlab # 下载安装包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.9.1-ce.0.el7.x86_64.rpm # 安装 rpm -i gitlab-ce-15.9.1-ce.0.el7.x86_64.rpm # 编辑 vi /etc/gitlab/

828华为云征文|华为云Flexus X实例docker部署jdk21最新版jenkins搭建自己的devops服务器

828华为云征文|华为云Flexus X实例docker部署jdk21最新版jenkins搭建自己的devops服务器 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实

经验笔记:DevOps

DevOps经验笔记 DevOps(Development and Operations)是一种旨在通过加强开发(Development)与运维(Operations)之间合作的文化理念、实践方法和工具集合。DevOps的目标是在软件开发生命周期中实现更高的效率、更快的交付速度和更好的产品质量。以下是一份综合性的DevOps经验笔记,涵盖了DevOps的核心理念、实践方法以及一些关键技术和工具。

Ubuntu 20 上安装 GitLab,配置 HTTPS,使用 DevOps

文章目录 在 Ubuntu 20 上安装 GitLab,并配置 HTTPS,开启容器镜像库,使用 GitLab DevOps 自动编译和部署 Java 服务到 CentOS 7 服务器1. 在 Ubuntu 20 上安装 GitLab2. 配置 HTTPS3. 开启容器镜像库4. 使用 GitLab CI/CD 自动编译和部署 Java 服务4.1 配置 CentOS 7 服务器 (10.0

DevOps使用教程 华为云(12)功能测试 接口测试 性能测试

一、功能测试 需要人工填写测试用例,人工记录 二、接口测试 可以自动化执行,但是需要提供能够被在线访问的接口,意思就是,你的代码需要部署到云服务器中 三、性能测试 测试性能的,也是需要编写脚本

DevOps使用教程 华为云(4)工作项 新建Bug 缺陷管理 开发管理 进度管理

在华为云的DevOps里,一切工作都可以称为“工作项” 1. 工作项 在”规划-思维导图"中新建的Epic-Feature-Story-task,都可以看到 2. 新建Bug 可以设置优先级、负责人等 3. 点击查看详情 4. 可以拖动以修改工作项的状态 如果本教程对你有用,请点个赞,关注一下哇🤩

DevOps使用教程 华为云(2)添加项目成员

1. 进入项目 2. 添加项目成员 下图中方式1用来邀请之前已建立联系的用户,方式2用来邀请之前未建立联系的用户 如果本教程对你有用,请点个赞,关注一下哇🤩