P60 Packer introduction
在这节课中,我将向你们解释如何与Packer一起使用Terraform。
Packer是一种构建AMls的工具。记得在我们的实例中提供软件,我们以前使用terrform和shell命令,Terraform和Chef,但有一个替代方案,替代方案是Packer。
Packer是一个可以基于模板构建AWS AMls的命令行工具。
与在启动实例后安装软件不同,您可以创建一个带有所有必要软件的AMl。
这可以加快实例的启动时间。您可以使用AMI上安装的所有软件启动AMl,而不是启动一个默认映像。
因此,首先构建一个定制的AMI,然后引导它.
当你运行水平伸缩的应用层或某个东西的集群时,一种常见的方法。假设您运行控制台集群。
可以引导控制台AMls,运行一个需要横向伸缩的应用程序。
您可以用该应用程序构建一个自定义AMI,如果您需要水平扩展(这意味着添加更多实例),只需多次启动相同的AMI,这在AWS中很容易做到。
这里的替代方法是启动一个默认的AMl,然后安装软件,但这需要更长的时间。
如果你想要一个非常低的启动时间,那么你就要看看这些与Packer的自定义构建。
我认为如果你想要减少时间,构建自定义AMl是非常好的。
这也是一种偏好。
我建议您尝试这两种方法,看看哪一种最适合您的用例。
然后在上面启动码头工人的图像。如果你对docker感兴趣,可以去上另一门涉及到docker的课程,但是你可以看看附加课程,在那里你可以找到这门课程的参考资料。
很简单,你有凭证的变量。如果您使用AWS凭据,那么将使用这些凭据。
在本例中,我们使用“amazon-ebs”,我们将从EBS卷创建一个AMI。因此,我们将用EBS卷启动一个实例。
然后,我们将它保存为自定义图像。
我们要在一个特定的区域,用一个特定的ami源,它可以是像这里这样的Ubuntu图片。也可以是使用源AMI的任何其他操作系统。
正如我说的,用户名是“ubuntu”。然后,您可以给出一个AMI和名称。
供给者,这是定制的核心。这里我们正在执行shell脚本。因此,当这个默认AMI被引导时。
然后我们要在里面安装软件。然后,你将把它打包成一个定制的AMI。
所以,在这个安装软件中,你可以把“apt-get install”之类的东西放在你的软件中。你甚至可以把你的应用放在那里。
如果你正在构建一个应用服务器,那么Packer会构建这个。它将打包在AMI中,然后下一步是启动这些。在下一个演示中,我将详细说明如何做到这一点。
P61 Demo Packer with terraform
在这一小时,向您展示如何使用地形与Packer。
我要在Packer 的演示中使用资金。
首先,我在理论中给你们展示的Packer就在这里。
我所做的唯一改变是我在“eu-west-1”区域,而我要使用的源是“us-west-1”区域。第二个不同之处是“实例”。我指的是var在我的var. ami_id和这个AMI ID,我将把这个变量放在一个单独的文件,这个文件是由我的“构建和启动”shell脚本创建的。
我将使用这个shell脚本首先构建AMI,然后我将提取AMI_ID。
这个AMI_ID,我要把它作为变量放到我的amivar。tf中。
然后我要运行我的terraform apply然后我会使用我的var来启动这个实例。
在构建AMl时,我要运行的脚本是“apt-get update”apt-get install-y mginx docker。io vim lvm2”。
然后,之后,我将登录,看看这些是否安装。我们用terraform apply。我会运行build-and-launch。sh,我会暂停一下视频。
当您执行这个“sh build-and-launch.sh”时,您将看到最后一位。它会在执行的时候出现。
然后我们有我们的定制AMI在这里
您应该能够在ubuntu的框架中使用自定义AMI进行“ssh”操作。它们也是一样的。
然后我们应该安装docker。
你应该能够使用curl进入localhost,并看到“Welcome to nginx”。。
这是一个定制ami。每次我们启动AMI,都会安装docker,运行nginx,安装LVM2。
不管你是想使用这个还是使用默认的AMI然后提供docker和图像,
或使用Chef, Ansible, Puppet修改软件。这取决于你。你可以使用多种策略。
您必须选择最适合您的用例的方法。这是另一个好处,你可以看到实际上更容易维护这些图像,因为这更接近于不可变的基础设施。帕克的演示到此结束。如果你有兴趣了解更多关于帕克的信息,你可以在他们的网站上找到很多信息。
P62 Terraform with Packer and Jenkins
Terraform非常适合DevOps组织。像terraform和Packer这样的工具可以在软件开发生命周期中使用。如果您已经跟随我的DevOps课程,您将会认识这个图表。
一方面是开发人员、用户的版本控制,比如Git,他的代码需要构建、测试,然后发布。在操作方面,您需要确保准备实例,部署代码,然后为客户启动应用程序,客户可以是内部的,可以是网站访问者,可以是应用程序的任何使用方式。
Terraform适合发布、供应和部署部分。
因此,您需要确保Terraform与Packer将是构建和测试后的下一步。
对于构建和测试,经常使用持续集成工具,比如Jenkins、Bamboo。
我将在下一个演示中向你们展示如何使用Jenkins,它也可以用于构建,供应和测试,在AWS实例上进行供应和部署。所以,这整个流程,这整个管道可以被集成,并在开发人员推出新功能时执行,或者准备发布,或者任何测试的可能性。因此,我们得到了这种持续集成,持续部署周期,这是DevOps组织的核心。
**因此,我们将使用Packer构建Amazon映像,然后使用Terraform启动实例。另一种工作流可以是Git与Jenkins、Terraform和docker编排。
我们还可以使用docker映像而不是Amazon映像,因此Amazon映像是EMS,但Amazon也支持docker。
你也可以用docker做同样的事情,在这节课中,在下一个演示中,我会告诉你如何用Packer做这个。
**
这就是我们下个演示中要做的。看看中间。
Jenkins的第一步是“git clone the app repo”,所以我们要去GitHub,把这个“app repo”在Jenkins中复制一份。然后在“app repo”上,我们将运行Packer构建,所以Packer构建将创建一个AMI,包含本例中需要的软件,节点加上应用程序。
然后,第三步是将它的Terraform文件复制一份。我们将会有一个"terraform repo"然后,我们将运行"terraform apply"。
因此,应用实例从AMI中启动。
我们已经用Packer创建了这个新的AMI ID,我们会用这个AMI启动一个应用实例。
为了维护terraform状态,我们希望使用保存在S3 bucket中的远程状态。因此,你仍然可以使用"terraform apply",但是“terraform应用”也可以在Jenkins中使用相同的远程状态。
我将演示如何设置,如何使用"NodeJs"应用依赖来构建AMIl,最终结果将是你将设置一个"nginx" web服务器这将是反向代理,到我们的"NodeJs"应用使用Jenkins, Packer, Terraform。
P63 Demo Jenkins with Terraform and Packer
让我看看几个文件,我已经创建了我的"mykey", and "mykey。你可以使用“ssh-keygen -f mykey”。这就是创建密钥首先要做的事情。
然后,让我们看看这个存储库。让我们从实例开始。
我们有一个jenkins-instance Ubuntu框是t2。small
我们有一个jenkins-instance Ubuntu框是t2。small.内存稍微多一点,但不属于空闲层。
所以你可能想把它们换成“micro”。
jenkins总是需要更多的内存。所以,“smallsegments”。如果你真的想留在免费层,那么你仍然可以做“t2.micro”。
它将在一个public1子网中启动,我们有一个VPC安全组,我马上去到安全组。
这将是一个安全组,我们将允许一切。进入,端口22,8080进入
8080是jenkins的网络界面。我们使用我们的关键字,然后我们有“用户数据”指定。让我们看看这个“clouddinit”脚本。
因此,我已经详细讨论了clouddinit,我在这里所做的只是使用这个“jenkins-init.sh”脚本。
我在"vars.tf"里找到了我的装置和Jenkins版本。然后运行jenkins-init。sh,那么,让我们看看“scripts/jenkins-init.sh”。
这是完全一样的,这个音量设置,和我们之前的课完全一样,我之前的演示中告诉你们如何设置volume。
这将挂载一个卷,这里我还有"instance “tf”,我有一个卷和一个卷附件。
所以,它会给我们20g的持久EBS容量。我们将挂载这个“/var/ib/jenking”,这是Jenkins的主目录。
然后,我们要安装jenkins。首先,我们要拿到jenkins的钥匙。
我们将把它添加到/etc/apt/sources.list中。
然后我们可以做"apt-get update"。
然后,它将从这个URL获得可用包的列表。
然后我们就可以安装Jenkins了,我们会安装一个特定版本的Jenkins,你可以随时把它改成最新的版本。
如果你删除了这个“=”和这个“-”之后的所有内容,那么它将安装atest。
**但是,如果你想要和我在演示中使用的完全一样的版本,你可以这样离开。
**
我们还会安装unzip,因为我们以后会用到它。我们要安装Pip。
然后,我们将使用Pip安装第一个命令行实用程序。
然后,我们要安装Terraform和Packer,然后我们要清理一切。
这样,你就有了一台Jenkins机器,有AWS命令行工具,有Terraform,有Packer
这是将运行我们的应用程序“t2.micro”,“ami”我们还不知道。
我想首先在Jenkins上运行一个项目,它将构建这个AMI。我们还没有定义应用实例AMI,稍后再定义。
这个计数默认为"o",这意味着如果我们现在要做"terraform apply"它还不会启动这个AWS实例。
稍后,当我们添加参数时,我们可以把这个实例计数从"O"到"1",然后我们将启动这个。
但是,现在没有意义了,因为我们还不知道AMI ID。
我还有“output.tf", “output 'jenkins-ip”,如果你不启动这个实例,它就不会添加任何东西。
我要创建S3 Buckets,来保存Terraform状态,然后我将有我的vars。tf
这些是变种,如果你想在不同的地区推出它,改变这个AMIS和我们的Jenkins版本。
应用程序实例计数默认为“0”。然后,我们有“vpc.if”。,这和其他演示一样。
然后,我还有这个" config -remote-state。sh"我们会在第一个"terraform apply"之后执行。它会将状态从本地文件复制到S3,所以我们的状态在S3中。
就是这样。现在我们可以运行terraform apply
这才是你应该得到的。
这是Jenkins现在已经启动的IP地址,现在我们也创建了S3 Bucket,我将运行这个"configure-remote-state。sh",它将获取一个本地状态,然后它将它复制到S3。
远程状态配置,所以现在我将ao到这个IP地址,“ssh-l”,使用"mykey", 'ubuntu"是我们的登录。
我的卷创建好了。jenkins正在运行,我们可以打开浏览器,我要去这个IP地址,地址是8080。
它问我们初始管理密码,我可以找到这个文件。粘贴到这里,
继续,我将安装建议的插件
这是2.91版本的jenkins。但是,如果你愿意,你可以改变它。我将以“admin”作为我的用户名,现在你可以选择你的密码。
输入您的全名和电子邮件地址,“保存并完成”,然后安装就完成了。
所以,你可以开始使用Jenkins。所以,我们马上要创造一个新的工作岗位。
你可以称之为“packer-demo”,它将是一个“Freestyle项目”。
在这个freestyle项目中,我可以指定我有一个GitHub项目,它将成为我的GitHub仓库。
最重要的是这个。
这个会确保你有一个链接,HTTPS链接。这里我们放了同样的东西,https://github.com/wardviaene/packer-demo,这个“packer-demo”包括“packer-example”。、脚本、部署脚本和应用程序。
这个应用程序是一个NodeJS应用程序。“packer-example”将执行与上一个演示程序完全相同的操作,除了我也准备了这个应用程序
**源是这个app文件夹,我要把它拷贝到/tmp/app然后执行shellscript。
**
脚本就在这里,要做什么?首先,“apt-get update”,然后"apt-get install-y nginx nodejs npm",
我要添加一个组,你要添加一个用户,主目录是"/app", node shell,组是"node-demo"。
我们要把这个"/tmp/app"移动到"/app"我们要正确地设置权限,然后我们要创建一个配置文件,写入/etc/nginx/nginx.conf
nginx唯一要做的就是,它会监听80端口,proxy pass所有的请求到localhost 3000,3000将是端口,NodeJS应用程序运行在那里。
然后我们要重新启动nginx,以确保配置到位。接下来,我们会到app目录,我们会运行npm install,然后我们会创建一个服务。这个服务将执行NodeJS " /app/index.js",它将始终运行,并将使用用户演示,环境变量将是“NODE ENV-production”。我们将它保存到/etc/systemd/system/node-demo。service。
然后我们会启用这个node-demo,然后我们会开始这个。
所以,这将是一个带有“nginx”和“app”的ubuntu图片,它已经在亚马逊的AMI中了,然后在最新阶段,我们可以启动这个AMI它会通过我们的应用程序,这个AMI的构建可以在每次应用程序改变时完成,假设你想要展示一些东西,你想在应用上测试一些东西,当然你仍然可以在本地开发,但是假设你想在分期中测试它。
**你可以有一个分段分支,当你提交,当你提交东西,当你在分段分支中合并东西,这对Jenkins来说是可见的。
然后Jenkins 可以跑Packer。Packer会生成一个AMIl。接下来,您可以触发一个“terraform apply”,它将使用这个AMI启动一个实例。
**
这就是整个想法。这就是我现在要配置的。我们想运行这里构建的Packer,所以我要执行一个shell脚本。首先,这个封隔器演示将被克隆,然后我们执行一个命令。
首先,这个封隔器演示将被克隆,然后我们执行一个命令。你们会在之前的实验中认出这个。这只是一个小小的改变,我们首先要做“封隔器构建-机器可读封隔器演示”。,提取“ARTIFACT”。在这个"ARTIFACT"中,我们有AMI ID,我们将把这个AMI ID放到这个变量"APP INSTANCE AMI"中。
我们将有这个“APP INSTANCE AMI”等于“packer huild”将为我们创建的AMI ID。
我要把这个写进一个文件,把这个文件复制到S3 Bucket的“amivar.tf”中。
这将构建我们的AMl,返回我们的AMI ID,它会将这个AMI ID复制到S3中供以后使用。我要保存这个
所以,现在项目被保存了,但是我仍然需要为Jenkins配置AWS s3凭据。
所以,确保你先被loqqed在盒子里,然后它就可以,su jenkins"。然后,当你要运行这个时,“aws configure”。
输入aws访问密钥ID和aws秘密密钥,然后我们应该能够在Jenkins中构建这个Packer项目。
然后这个会建造,这个会运行Packer建造。它会把我们的应用复制到这个AMI上,它会安装所有依赖项,然后运行这里的部署shellscripts然后配置nginx服务并启用这个node-demo。然后这个会建造,这个会运行Packer建造。它将我们的应用程序复制到这个AMI,它将安装所有的依赖项,然后它将运行这个部署shellscripts你这里,然后将配置“nginx”服务,它将使这个“node-demo”然后,在Jenkins中创建的第二个项目将使用这个AMI ID启动一个实例。
这个就要完成了,然后我们要创建第二个项目。现在这一切都圆满结束了。这是AMI ID,这个内容是amivar.tf。,现在我们可以创建第二个项目了。我们要回到项目,我想我们需要再次登录。
还有另一个Freestyle项目。
再次GitHub项目,这次我要检查"terraform-coursee,再次我要执行shellscript。
首先,我们需要在“Jenkins-packer-demo”中看到Terraform文件。它需要执行脚本“configure-remote-state.sh”。
要从S3获得一个状态,就像我们之前做的那样,然后我们需要使用“aws S3”命令从我们的bucket中复制“amivar”。Tf “复制到"amivar。转到当前目录。
现在我们有了状态,我们有了AMI ID,然后我们可以运行"terraform apply"一个变量,比如"APP INSTANCE COUNT 1”,在INSTANCE中启动一个,我们会指定一个目标,因为我们不想意外地破坏某些东西,我们只会把自己限制在这个aws实例。app-instance,因为这样唯一会出错的就是这个app实例。
如果你不指定这个,那么Terraform可能会改变所有的东西。
我们还会用到"touch mykey"和"touch mykey",因为否则Terraform会给出一个错误,因为它也会寻找这些文件。
我们要把它们设为空。应该就是这个了,然后我们可以保存并运行这个。
所以,我们现在就要建造它。这实际上是我的第三个版本,因为我之前的版本失败了,因为一些其他的原因。
所以,我们从S3下载“aimvar”,制作“mykey”和“mykey”。我们用"APP INSTANCE COUNT-1"做"terraform apply",目标是这个应用实例。
然后Terraform刷新一些资源的状态,然后它使用这个包装器为我们创建的AMI创建这个新实例。
如果我们进入这个IP,我们会看到“Hello World!”
但是,让我们使用“ssh”再次检查。让我去这个Ubuntu的盒子,我们应该“nginx”运行,我们的反向代理运行时,我们应该有节点运行,它也运行,我们应该有“应用程序”文件夹,在“应用程序”文件夹,我们会有我们所有的依赖,因为封隔器安装所有这些依赖项,创造了这个服务,现在运行这个服务。点击localhost:3000,它会直接转到NodeJS应用,如果你只做80端口,它会转到nginx。
所以,这是一个很好的例子,在一个“nginx”反向代理前面运行一个NodeJS应用程序。
这个NodeJS也作为我们的用户运行,这是很好的实践。
P64 Introduction to Docker
**amazone是使用xen hypervisor,上面跑虚拟机 **
P65 Docker on AWS
就像packer构建AMls一样,你也可以使用docker来构建docker映像.
这些映像可以在任何安装了Docker引擎的Linux主机上运行
P66 Building Docker images
P67 演示构建NodeJS应用并推送到ECR
P68 ECS - Part I
现在你的应用已经被dockerized并上传到ECR,你可以启动ECS集群ECS -EC2 Container Services来管理你的docker容器。您只需要使用自定义AMI启动一个自动伸缩组。自定义AMI包含ECS代理。一旦ECS集群在线,就可以在集群上启动任务和服务
然后,一个自动伸缩组启动将加入集群的EC2实例:
P69 ECS - Part lI
在启动docker应用程序之前,需要提供一个任务定义任务定义描述了在集群上运行的docker容器:指定Docker映像(ECR中的Docker映像)最大CPU使用率,最大内存使用率是否应该链接容器(例如将app容器链接到DB容器)环境变量(例如凭证)和任何其他容器特定的定义
服务定义将基于任务定义运行特定数量的容器一个服务总是在运行,如果容器停止,它将被重新启动一个服务可以伸缩,可以运行一个容器的一个实例,也可以运行多个实例您可以将弹性负载均衡器放在服务前面通常运行一个容器的多个实例,分布在可用性区域如果一个容器失败,负载均衡器将停止向它发送流量使用ELB /ALB运行多个实例允许您拥有HA
P70 7. Demo Running a NodeJS app on ECS
P71 . Demo Terraform with Jenkins. ECR and ECS
P72 Introduction to Module Development
起程拓殖起程拓殖模块是一种强大的方法来重用模块情codeYou可以使用外部模块,或者自己写模块外部模块可以帮助你建立基础设施没有太多effortWhen模块管理的社区,你会得到更新和修复的freenttps://aithub.com/terraform-aws-modules/ lists terrform模块AWS,由社区维护
一些流行的模块arehttps: / laithub.com/terraform-aws-modules/terraform-aws-vpCA模块创建VPC resourceshttps: / / github.com/terraform-aws-modules/terraform-aws-albA模块创建一个应用程序LoadBalancernttps: / / aithub.com/terraform-aws-modules/terraform-aws-eksA模块创建一个Kubernetes集群
编写模块给你完整的flexibilityIf你保持模块在git存储库中,您甚至可以重用模块在多个工程第二演示,我将向您展示如何构建一个模块与应用loadbalance ECS(铝青铜)我先给你一个高水平的概述,然后我会做一个深入的模块
P73 2. ECS + ALB Module Overview
P74 3. Demo ECS + ALB Module (part1)
P75 4. Demo ECS + AL B Module (Part II)
P76 5. Demo ECS + AL B Module (Part III)
P77 1. Introduction to AWS EKS
Kubernetes的Amazon弹性容器服务
Kubernetes弹性容器服务是一个高可用性、可扩展和安全的Kubernetes服务,自2018年6月起通用可用。Kubernetes是AWS的一个替代方案,ECSECS是AWS特定的,而Kubernetes可以运行在任何公共云提供商(甚至本地)
AWS的提供托管的Kubernetes主节点没有主节点来管理,主节点是多阿兹提供冗余,主节点将自动伸缩,如果你运行自己的Kubernetes集群,你必须伸缩,当有更多的工作节点
AWS费用资金运行的集群(us-east-1 0.20美元/小时)较小的设置,ECS比ECS cheaperKubernetes更受欢迎,所以,如果你打算部署更多的云提供商/ on-prem,这是一个更自然的choiceKubernetes有更多的功能,但也比ECS更加复杂——部署更简单的应用/解决方案,我更希望ECSECS与其他AWS服务紧密集成,但预计EKS也将随着时间的推移紧密集成
P78 2. Demo AWS EKS
P79 1. Congratulations
P80 2. Bonus Lecture My Other Courses