我正在创建一套自我培训练习和指南(可能最终是一系列视频或 Slideshare 演示文稿),涵盖一系列系统管理和“操作”相关主题。
我的计划是制作原型并展示它们,主要假设学生将创建 AWS 账户并使用 EC2 实例和一组有限的相关资源完成示例。我建议学生使用一些较便宜的 VPS 提供商(例如 Linode)创建一个基本实例,作为他们大部分工作的“大本营”,然后在每次练习期间启动实例(主要是 t1.micro,如果可能的话) ,并在每次工作会话后关闭它们。(目标是使这些对资助他们自己的专业教育的学生可行......所以我将花费额外的精力来实践和练习课程设计,以最大限度地减少服务成本)。
该计划将主要根据需要为 CentOS、Debian、Ubuntu 和 FreeBSD 使用免费的 AWS Marketplace AMI。(我最终还将探索替代云,除非 Amazon Inc. 赞助我的项目)——尽管我可能会基于这些创建一些自定义 AMI,并将它们作为我产品的一部分发布到市场。
早期课程将强调 Python Boto 的使用(到目前为止,这是我所熟悉的),我正在构建的一些工具将帮助管理每个学生创建的基础设施......我将让学生自始至终使用 Ansible大多数练习(用于会话设置和实例集合的拆除)。一套课程将在 Puppet 上,另一套课程将涵盖 Chef。后面的大部分课程(Hadoop、Cassandra、MongoDB、Zookeeper)都会(要求/假设?)学生正在使用其中之一来构建他们的集群。
最后,这让我想到了我的问题。(为漫无边际的序言道歉,但感觉有必要设置上下文)。
昨晚我设置了最简单的 Puppet(版本 3)配置,这对系统管理的学生可能很有用。一对 CentOS 6.4 实例,一个作为 puppetmaster,另一个作为客户端。我使用丑陋的 ec*.internal 名称(在主机文件和配置中)将它们连接在一起。然后进行更改(在我的 site.pp 清单中创建用户、组和 ssh 密钥条目)并确认它们正在工作(在客户端上运行 puppet agent --test 命令)。自然最大的障碍是:更改安全组配置、禁用默认的 CentOS IPTables 配置、禁用 SELinux 强制模式以及摆弄dns_alt_names =
puppetmaster 的 /etc/puppet/puppet.conf 中的指令。(稍后我会弄清楚如何正确地向 Ruby/Apache/Passenger 组件授予必要的 SELinux 权限以重新启用 SELinux)。
今晚,当我正要从上次停下的地方开始时,我突然意识到(相当晚了)我真的需要稳定的 IP 和反向 DNS 来实现这个模型。在每个工作会话开始时,必须重新配置 puppet master 并重新生成其 PEM 证书以及所有客户的证书,这将比教育更乏味(并且编写所有脚本对任何正常的未来工作环境都几乎没有适用性。
所以,呃,需要分配一个弹性 IP(至少一个)并为其请求一个反向 DNS 条目……或者我需要重新进行我的假设并将这些练习基于一组先决条件 VPC 集-补课。
现在我刚刚设置了 EIP 并输入了 PTR 覆盖的请求(顺便说一下,这似乎与 Amazon 的工作流程中的一些 STMP 启用请求表混为一谈)。
我正在寻找关于我是否应该围绕 VPC 执行此操作的建议(并预测在该虚拟网络中设置 DNS 服务器的课程,可能托管在 puppetmaster 本身上,至少最初是这样),或者我是否应该围绕使用一到两个通用名称的弹性 IP(作为不同的练习,可能稍后会迁移到 HAProxy 或类似前端后面的 puppetmaster 服务)。
建议?批评?
您应该使用 VPC,并且主机应该位于默认网关是 VPC Internet 网关的子网中。有两种方法可以确保所有学习您课程的人的目标环境相同:
借助允许在启动时分配公共 IP 地址的新功能,您仍然可以在没有 EIP 或跳转主机的情况下远程访问所有系统,还可以通过系统的静态内部 VPC 地址来寻址系统。
关于 DNS,我相信启用 DNS 主机名功能应该对您有所帮助,但我没有广泛使用它。