本文讨论解决由Microsoft Azure Kubernetes 服务(AKS)中的“参数列表过长”错误消息引起的应用程序故障的故障排除策略。
现象
当 kubelet 尝试运行可执行文件时,应用程序会失败,并且收到类似于以下输出的错误消息:
standard_init_linux.go:228:exec 用户进程导致:参数列表过长
原因 1:提供给可执行文件的参数列表太长
提供给应用程序的可执行文件的参数太长,无法处理。
解决方案:缩短参数列表
消除为可执行文件指定的任何冗余或不必要的参数。
原因 2:提供给可执行文件的环境变量集太大
如果在一个命名空间中部署了太多服务,则环境变量列表可能会变得太大,kubelet 会在尝试运行可执行文件时生成错误消息。 发生此错误的原因是 kubelet 会添加环境变量来记录每个活动服务的主机和端口,以便 服务可以使用此信息查找其他活动服务。
解决方案 1:减少处于活动状态的服务数
可以减少活动服务的总数,以便 kubelet 添加较少的整体环境变量。
解决方案 2:重新配置 kubelet,以便它不会为服务主机和端口添加环境变量
在 PodSpec 核心 API 中,将 enableServiceLinks 字段设置为 false. 此更改将重新配置 kubelet 行为,以便不会为每个活动服务自动添加主机和端口作为环境变量。
警告
如果服务依赖于这些环境变量来查找其他服务,此字段更改将导致服务失败。 若要避免这种情况,请使用 CoreDNS 依赖 DNS 进行服务发现而不是环境变量。
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。
联系我们寻求帮助
如果有疑问,可以询问 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。