docker - 我正在尝试在 Aws eks 集群上部署 microsoft 流体框架,但 pod 进入 CrashLoopBackOff
问题描述
当我获得其中一个具有 CrashLoopBackOff 状态的 pod 的日志时
kubectl logs alfred
它返回以下错误。
error: alfred service exiting due to error {"label":"winston","timestamp":"2021-11-08T07:02:02.324Z"}
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) {
errno: 'ENOTFOUND',
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'mongodb'
} {"label":"winston","timestamp":"2021-11-08T07:02:02.326Z"}
error: Client Manager Redis Error: getaddrinfo ENOTFOUND redis {"errno":"ENOTFOUND","code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"redis","stack":"Error: getaddrinfo ENOTFOUND redis\n at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26)","label":"winston","timestamp":"2021-11-08T07:02:02.368Z"}
我是 Kubernetes 和 Aws Eks 的新手。期待提供帮助。谢谢
解决方案
如果您在 getaddrinfo 看到错误,它是一个用于解析 dns 名称并连接外部服务的程序/函数。它正在尝试访问一个 redis 集群。好像您的 EKS 集群没有连接。
但是,如果您将 redis 作为 EKS 集群的一部分运行,请确保在应用程序代码中提供/更新 kubernetes 服务 dns,或者将其设置为可以在部署之前设置的环境变量。
它的 redis 和 mongodb,也正如错误所说,您将主机名作为 redis 和 mongodb 提供,除非您将其映射到 /etc/hosts 文件中,否则它不会解析为 IP 地址,这实际上是不真实的。
提供正确的主机名,Pod 就会出现。这是根本原因。
推荐阅读
- android - 在实施 firebase 后,许多导入语句突然变得未使用并且无法解析许多符号
- botframework - Microsoft Healthbot API 获取场景堆栈信息
- javascript - 在函数中调用 React Hook “useSelector”
- save - PIL 使用没有文件名的文件对象保存
- c++ - 在 msvc 调试模式下堆栈中有 cdcdcdcd 是否正常
- mysql - 如何使用外键执行 MySQL 批量插入并在无效时设置为 NULL
- ruby - 如何优化 HTTP::Headers.normalize_header?
- javascript - Angular 8 多重过滤器
- go - 将 uint32 的字节附加到字节片?
- python - 如何将列表复制到另一个变量并使该变量不可变?