5

我正在尝试为我们的 AWS ECS 春季启动应用程序实施 XRAY。为此,我正在为 docker daemon 创建一个新任务,其中包含一个单独的 docker 文件,正如AWS 文档所建议的那样,并且当我在 Daemon setup提出另一个问题时提出了建议。

但是,当我尝试将其部署到 AWS 时,需要一个运行状况检查端点,以便负载均衡器能够确定该服务已成功部署。

守护进程本身没有运行状况检查功能。AWS 论坛上有一个帖子,github repo 上也有一个与此相关的问题。

我最初的想法是创建一个应用程序(可能是 spring-boot),它能够确定守护程序是否正在运行并公开一个 elb 可以访问的 URL 以对守护程序进行健康检查。然后我可以将它与守护进程一起部署。

有没有更好的方法来做到这一点?我担心需要创建一个单独的应用程序来创建健康检查。为了在 docker 文件中运行两个入口点命令,可能还需要一些技巧。

关于更好的方法来实现这一点的任何想法?

4

1 回答 1

4

您根本不需要为 X-Ray Docker 容器守护程序使用负载均衡器,因为流量仅来自集群 EC2 容器。X-Ray 容器的 Healthcheck 可以使用 AWS ECS Healthcheck本身来完成。

根据论坛的回答,您可以在容器健康检查上配置 netstat,这将确保如果 udp 端口​​未被守护程序容器打开,则 ECS 代理将重新启动容器。

以下是您在 ECS 任务定义中提供的 HealthCheck 命令。

CMD-SHELL, netstat -aun | grep 2000 > /dev/null; if [ 0 != $? ]; then exit 1; fi;

这是设置和结果。

任务定义

健康

笔记 -

如果您正在构建 X-Ray Docker 映像,请确保netstat在 Dockerfile 中包含实用程序,否则 health 命令将失败。

示例 - 如果您使用的是本文档中提供的 Dockerfile,那么您需要将net-tools包添加到您的 X-Ray 容器映像中。

以下是我更新的 Dockerfile,它添加net-tools到图像中。

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --force-yes --no-install-recommends apt-transport-https curl ca-certificates wget net-tools && apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/*
RUN wget https://s3.dualstack.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-3.x.deb
RUN dpkg -i aws-xray-daemon-3.x.deb
CMD ["/usr/bin/xray", "--bind=0.0.0.0:2000"]
EXPOSE 2000/udp
于 2019-01-10T01:45:03.397 回答