尝试解决上游 AMI 的最大开放限制较低的问题。
我可以填写限制文件,如果我手动断开/重新连接从属设备,则新的限制适用。
我还可以将 ulimit 更改放入 cloud-init,但 master 在 cloud-init 完成之前就连接了。
cloud-init 中唯一要做的就是写入一个 ulimit 文件。不确定如何让它“更快”。
用户数据:
#!/bin/sh
echo 'ec2-user hard nofile 65535' > /etc/security/limits.d/20-jenkins-maxfiles.conf
初始化脚本:
#!/bin/bash
echo Cloud-init status:
cloud-init status
echo Setting max-open soft to hard limit.
ulimit -S -n hard
echo Current limits:
ulimit -a
有没有办法在 ec2-plugin 的“Init 脚本”中触发断开连接/重新连接或延迟连接以允许 cloud-init 完成?
答案1
虽然这并不能解决 Jenkins 在部分运行初始脚本后重新连接的问题,但在这种情况下,不同的 cloud-init 脚本类型似乎可以解决该问题。
使用Cloud Boothook
cloud-init 脚本类型将使其在 SSH 启动之前运行,并且可能在 systemd 启动的许多其他服务之前运行。
https://cloudinit.readthedocs.io/en/latest/topics/format.html#cloud-boothook
Cloud Boothook
以 #cloud-boothook 或 Content-Type: text/cloud-boothook 开头。
这个内容就是boothook数据,存放在/var/lib/cloud下的一个文件中,然后立即执行。
这是最早可用的“钩子”。没有提供仅运行一次的机制。boothook 必须自行处理此问题。它在环境变量 INSTANCE_ID 中提供实例 ID。使用此变量提供每个实例一次的 bootook 数据集。