gpt4 book ai didi

amazon-web-services - 如何在AWS EKS中一次在多个容器上执行Shell脚本

转载 作者:行者123 更新时间:2023-12-02 11:56:19 24 4
gpt4 key购买 nike

我想在AWS EKS上部署Laravel应用程序。

我的应用程序使用Laravel Jobs和Queues。我们可以使用Laravel随附的artisan实用程序来管理Queue Worker。

php artisan queue:work
php artisan queue:restart

我将使用 Supervisord监视队列过程。
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log

为了在部署容器时启动队列,我在Dockerfile中使用ENTRYPOINT脚本。
#!/usr/bin/env bash

##
# Ensure /.composer exists and is writable
#
if [ ! -d /.composer ]; then
mkdir /.composer
fi

chmod -R ugo+rw /.composer

##
# Run a command or start supervisord
#
if [ $# -gt 0 ];then
# If we passed a command, run it
exec "$@"
else
# Otherwise start supervisord
/usr/bin/supervisord
fi

我无法理解的是,如果我正在运行应用程序的多个副本,那么如何在正在运行的容器上远程停止和启动队列进程。

在EC2上,我可以使用AWS SSM在多个实例上同时运行Shell命令。

AWS EKS也有类似的可用功能吗?

或通常来说,您如何管理在AWS EKS中的多个容器上运行的队列流程?

最佳答案

通常,如果要一次在多个容器中执行命令,则可以执行以下操作:

for pod in $(kubectl get pods -o jsonpath='{.items[*].metadata.name}' -l app=myapp); do
kubectl exec "$pod" mycommand
done

这将在所有带有 mycommand标签的Pod的第一个容器中执行 app=myapp。群集是否在EKS或其他任何地方运行都没有关系。

关于amazon-web-services - 如何在AWS EKS中一次在多个容器上执行Shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59175774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com