我可以写
include '::ntp'
Run Code Online (Sandbox Code Playgroud)
或者我可以写
class { '::ntp':}
Run Code Online (Sandbox Code Playgroud)
它们之间有什么区别,还是我都需要?
我们遇到了一个有趣的争论,并陷入了两个阵营。我对我们可能遗漏的想法或陷阱的任何特定问题感兴趣。真的,任何可以帮助我们做出决定或指出我们没有考虑的事情的东西。我知道这有点接近“无意见”规则,但我希望这仍然是一个可以接受的问题。长度也很抱歉,有一些细微差别。
1)一方面(我的 - 我并非没有偏见)发现不可变服务器模型对于云系统非常有趣。为此,我们设计了将基础架构的所有组件迁移到 Docker 中的原型。我们的自定义应用程序通过 Jenkins 直接构建到部署到本地 Docker Registry 的 Docker 镜像中。然后我们创建了大量 Ansible 角色和一个剧本,它能够接触到一个空服务器,安装 Docker,然后告诉 Docker 根据需要安装所有容器。几分钟后,整个应用程序及其所有支持基础设施都已连接好并开始工作 - 日志记录、监控、数据库创建/填充等。完成的机器是一个独立的 QA 或开发环境,具有精确的副本应用。我们的扩展计划是制作新的 Playbooks 以从基本可信 AMI(可能是一个非常裸的镜像)构建新的 AWS 服务器,滚动部署生产应用程序以处理配置管理和发布,并且通常不再编辑服务器 -只是让他们重新。我并不担心在实践中得到我所描述的东西——只要它是一个合理的模型。
2) 另一个阵营想用 Puppet 来处理配置管理,Ansible 来部署我们的自定义应用程序,这些应用程序是从我们的构建过程中生成的 tarball,Foreman 来处理整个过程的触发和管理,而 Katello 来做一些基础形象管理。发布将涉及 Puppet 根据需要更改配置,以及 Ansible 通过一定数量的 Foreman 协调部署更新的组件。如果我们需要新的服务器,服务器的构建速度会相当快,但目的不是让它们成为标准流程的一部分。虽然寿命很长,但它更接近凤凰服务器模型。
所以我的问题真的归结为这个:带有我上面描述的工具的不可变服务器模型实际上和它看起来一样真实吗?我喜欢这样的想法,即我们的暂存过程实际上可以实时构建应用程序的完整克隆,让 QA 对其进行锤击,然后只需翻转数据库存储和一些 DNS 设置即可使其生效。
还是不可变服务器模型在实践中失败了?我们在 AWS 和云环境方面拥有丰富的经验,因此这并不是真正的问题 - 更重要的是如何可靠地部署合理复杂的应用程序。这是特别有趣的,因为我们经常发布。
除了实际为我们创建 EC2 服务器之外,我们让 Ansible 做大多数需要的事情,这并不难。我无法理解为什么您实际上需要在此模型中使用 Puppet/Foreman/Katello。Docker 比我能说的任何工具中的自定义部署脚本都要干净和简单得多。当您不再担心必须就地配置它们而只需使用新配置重新构建它们时,Ansible 似乎比 Puppet 更易于使用。我是 KISS 原则的粉丝——尤其是在墨菲定律猖獗的自动化领域。机器越少越好 IMO。
对这种方法的任何想法/意见或建议将不胜感激!
我在 Debian Squeeze 6.0.4 上运行 Puppet 的默认配置。
服务器的 FQDN 是 master.example.com。客户端的 FQDN 是 client.example.com。
我可以联系傀儡大师并发送 CSR。我使用 puppetca -sa 对其进行签名,但客户端仍无法连接。
两台机器都有准确的日期和时间。
这是出现在 /var/log/syslog 中的内容:
Apr 3 17:03:52 localhost puppet-agent[18653]: Reopening log files
Apr 3 17:03:52 localhost puppet-agent[18653]: Starting Puppet client version 2.6.2
Apr 3 17:03:53 localhost puppet-agent[18653]: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Apr 3 17:03:53 localhost puppet-agent[18653]: Using cached catalog
Apr 3 17:03:53 localhost puppet-agent[18653]: Could not retrieve …Run Code Online (Sandbox Code Playgroud) 我想检查变量的内容是否为奇数。但我需要一个整数。
$ip_array = split($ipaddress, '.')
$odd_ip = $ip_array[3] % 2
if $odd_ip == 1 {
notice("is odd")
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将字符串转换为整数?
我主要是一名开发人员,兼职 DevOps;并为我的项目管理这里和那里的服务器。
我简要地研究了 Chef/Puppet/Ansible;我想找到一些东西:
有没有人对最适合的工具有什么建议?
谢谢
我还想保留手动编辑主机文件的能力,至少前 10 行。
#Public IP's - eth0
192.168.1.103 front-01
192.168.1.106 front-02
#Private IP's - eth1
192.169.40.201 priv0-0
192.169.40.202 priv0-1
192.169.40.207 priv1-0
192.169.40.208 priv1-1
#Virtual IP's - eth0:1
192.169.50.202 vip-01
192.169.50.205 vip-02
Run Code Online (Sandbox Code Playgroud)
将这些主机条目放在 /etc/hosts 的底部将是完美的。做这个的最好方式是什么?有没有比编写 8 个主机行清单更好的方法?
# create a simple hostname and ip host entry
host { 'front-01':
ip => '192.168.1.103',
}
Run Code Online (Sandbox Code Playgroud)
可能有些服务器组在其 /etc/hosts 中需要不同的 IP 的 /hostnames。我会使用模板,但这意味着人们不能再在他们的 /etc/hosts 中进行手动更改,因为他们会被模板覆盖。
我使用 puppet 来管理工作中的一堆 Debian 服务器,如果这包括安装软件包的话。我在多个系统上安装的一个软件包是 nmap,它用于验证防火墙规则设置是否正确。在 Debian 7.0 上,如果你启用了 APT::Install-Recommends,你会得到一堆废话和 nmap(见下文)。
我不希望包含启用推荐的所有安装 nmap 的废话。一种解决方案是使用APT::Install-Recommends "0";. 但我不想让它成为默认值。大多数时候我想要推荐包括在内。推荐的包大多都很好,我没有得到很多我不需要的东西。但是有一些包裹带来了我不想要/不需要的东西。
package { 'nmap':
ensure => installed,
require => Class['apt'],
}
Run Code Online (Sandbox Code Playgroud)
在使用“apt”软件包提供程序时,是否有任何方法可以控制是否通过 puppet 安装了推荐? 我不想与 aptitude 提供者混为一谈,因为 apt 和 aptitude 彼此并不完全兼容。
有推荐
root@fw-01:~# apt-get install nmap
Reading package lists... Done
Building dependency tree
Reading state information... Done
...
The following NEW packages will be installed:
fonts-droid fonts-liberation ghostscript gnuplot gnuplot-nox groff gsfonts
imagemagick imagemagick-common libblas3 libblas3gf libcroco3 libcupsimage2
libdjvulibre-text libdjvulibre21 libexiv2-12 libgfortran3 libgs9 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用预安装的 docker 自动配置 VM。
我的默认 init.pp 看起来像:
class { 'apt':
always_apt_update => true,
}
package { [
#'build-essential',
#'vim',
#'curl',
#'zsh',
#'git-core',
#'htop',
#'wget',
#'linux-image-generic-lts-raring',
'python-software-properties'
#'lxc-docker'
]:
ensure => 'installed',
}
apt::ppa { 'ppa:dotcloud/lxc-docker':}
# refresh apt source
exec { "apt-update":
command => "/usr/bin/apt-get update && apt-get install lxc-docker --force-yes",
returns => 100
}
Run Code Online (Sandbox Code Playgroud)
最后一个 exec 命令返回(我认为返回 100 是成功的 apt-get 更新的默认值):
info: /Stage[main]//Apt::Ppa[ppa:dotcloud/lxc-docker]/Exec[add-apt-repository-ppa:dotcloud/lxc-docker]:Exec[apt_update]的调度刷新通知:/ Stage[main]/Apt::Update/Exec[apt_update]/returns: 执行成功通知:/Stage[main]/Apt::Update/Exec[apt_update]: 从 1 个事件触发 'refresh'
但是,当我 ssh 进入盒子时,docker 没有安装并运行,apt-get install lxc-docker然后我可以安装它。我究竟做错了什么?我似乎无法让它与多种不同的配置一起工作。
我正在寻找对我的基础架构执行定期滚动升级的最佳方法。
通常,这涉及在每台主机上执行此操作,一次一个:
sudo yum update -y && sudo reboot
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了可扩展性的限制。
我只想在我的每个角色中一次重新启动一个节点,这样,比如说,我不会同时关闭所有负载均衡器或数据库集群成员。
理想情况下,我想做类似的事情:
for role in $(< roles_list.txt) ; do
mco package update_all_and_reboot \
--batch 1 --batch-sleep 90 \
-C $role -F environment=test
done
Run Code Online (Sandbox Code Playgroud)
但是,这似乎并不存在。我不确定使用“shell”代理是否是最好的方法?
mco shell run 'yum update -y && reboot' \
--batch 1 --batch-sleep 90
Run Code Online (Sandbox Code Playgroud)
不过,我是否只是为这项工作寻找了错误的工具?有没有更好的方法来管理这些滚动重启,但我可以以某种方式与我的 Puppet 分配的角色联系起来,这样我就可以放心,我不会一下子删除任何重要的东西,但我仍然可以做一些并行更新和重启?
puppet ×10
amazon-ec2 ×1
ansible ×1
apt ×1
chef ×1
debian ×1
docker ×1
foreman ×1
mcollective ×1
openssl ×1
puppetmaster ×1
r10k ×1
rhel7 ×1
vagrant ×1