我目前正在准备 CentOS 7 和 Ubuntu 14.04 的 OpenStack 就绪映像。
对于“自动化”,我使用Packer,它由您通过 JSON 模板提供。Packer 然后使用您指定的虚拟化开始安装(在我的例子中是 qemu)。
安装后,Packer 和您提供的脚本通过 SSH 配置虚拟机。
状态:
我想在这里实现的目标:
问题:
这是行不通的。如果我只安装cloud-init
orcloud-init
和cloud-utils
orcloud-init
和cloud-utils
and都没有关系cloud-utils-growpart
。cloud-init
除了通过 ssh 启用 root 登录之外,我不会更改默认配置。
除了这一行,我的 cloud-init 配置是标准配置
disable_root: 0
问题:有人已经这样做了吗?我似乎找不到一个有效的例子
Centos-6.6 虚拟机镜像在使用virsh
. 我使用捕获日志virsh console
。看起来像这样,
ci-info: +-------+---------------+---------------+---------------+-----------+-------+
ci-info: | Route | Destination | Gateway | Genmask | Interface | Flags |
ci-info: +-------+---------------+---------------+---------------+-----------+-------+
ci-info: | 0 | 192.168.122.0 | 0.0.0.0 | 255.255.255.0 | eth0 | U |
ci-info: | 1 | 0.0.0.0 | 192.168.122.1 | 0.0.0.0 | eth0 | UG |
ci-info: +-------+---------------+---------------+---------------+-----------+-------+
2015-04-25 05:13:41,222 - url_helper.py[WARNING]: Calling 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [50/120s]: unexpected error ['Timeout' object has no attribute 'response']
2015-04-25 05:14:32,278 - url_helper.py[WARNING]: Calling 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [101/120s]: …
Run Code Online (Sandbox Code Playgroud) 云配置脚本如何将文件复制到服务器? write_files
需要脚本中的文件内容。如何指定包含内容的外部文件?
Amazon 提供了有关如何在 RHEL 7 和 Centos 7 上启用 IPv6 的说明:http : //docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-migrate-ipv6.html#ipv6-dhcpv6-rhel
这些说明适用于 RHEL 7-7.3 和 Centos 7-7.3,但不适用于 RHEL 7.4(并且可能不适用于 Centos 7.4,当它可用时)。
问题是该文件/etc/sysconfig/network-scripts/ifcfg-eth0
在旧版本上是用户可写的,但在 RHEL 7.4 上,该文件由 cloud-init 管理。
$ sed 1q /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
Run Code Online (Sandbox Code Playgroud)
我发现仅仅从 7.3 升级到 7.4 就需要对管理网络进行如此根本的改变,这非常出乎意料。我不确定此更改是否特定于 Amazon EC2,我在 RHEL 7.4 发行说明中找不到任何内容,因此它可能特定于 Amazon。
那么你应该如何在 cloud-init 模型中在 RHEL 7.4 和 Centos 7.4 上启用 IPv6?
我知道cloud-init允许将命令作为cloud-init yml的一部分运行
runcmd:
- [ pwd ]
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种执行完整 shell 脚本的方法。
有些人只是将 a 的输出通过管道传输curl
到 shell 中 - 但这感觉像是一种非常不稳定的方法。也许脚本可以通过一些模板集成到 yml 中,但这听起来也不太好。
更好的方法是将脚本与 yml 一起发送给主机并引用它。但我还没有找到任何有关如何执行此操作的文档。
这可能吗?
我正在使用terraform来设置服务器,但我想知道这是否也可以使用纯cloud-init来完成。
在 RHEL 8 及更早版本上,通常情况下,SSH 主机密钥在丢失时/etc/ssh
由服务自动生成sshd
。通常应该有:
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub
Run Code Online (Sandbox Code Playgroud)
甚至重新启动节点systemctl restart sshd
就足够了。
但从次要版本 RHEL 8.7 开始,这可能不再起作用,并且sshd
崩溃会抱怨日志日志中缺少主机密钥。为什么?我该如何解决这个问题?
我正在尝试使用 cloudformation 模板中的 cloud-init 在启动时使用已知的 SSH 主机密钥配置 EC2。但是现在我无法通过 SSH 连接到服务器。调试很棘手:-)
这是我的模板中 EC2 片段的 userdata 部分:
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#cloud-config", "\n",
"ssh_keys:", "\n",
"- rsa_private: |", "\n",
" -----BEGIN RSA PRIVATE KEY-----", "\n",
" MIIEowCBAAKCAQF71D8K9C/+K0a2fO+S9s441kSI44lF5ml++ewD+Mp115x9", "\n",
" /XwwTlvqxCIpxdzpzq4xXEqH48StHyYIjAOPxoS1/QG0Ti6OqU893PpukLdmV", "\n",
" kLZKn2ph4fTT2aMl...", "\n",
" -----END RSA PRIVATE KEY-----", "\n",
"rsa_public: ssh-rsa AAAAB...", "\n",
Run Code Online (Sandbox Code Playgroud)
根据文档,我也有 (ec)dsa_public/private 的条目。
cloudinit 是否有一些奇怪之处,我还必须指定 ssh_authorized_keys ?我假设我的密钥对的公钥现在没有被亚马逊推送到我的 EC2 上......
cloud-init ×7
ssh ×2
ssh-keys ×2
amazon-ec2 ×1
centos ×1
centos6 ×1
centos7 ×1
cloud-config ×1
openstack ×1
packer ×1
redhat ×1
rhel7 ×1
rhel8 ×1
server-setup ×1
terraform ×1
ubuntu ×1
virt-install ×1