Amazon web services 如何在AWS EKS中一次在多个容器上执行shell脚本

Amazon web services 如何在AWS EKS中一次在多个容器上执行shell脚本,amazon-web-services,kubernetes,amazon-eks,Amazon Web Services,Kubernetes,Amazon Eks,我想在AWS EKS上部署一个Laravel应用程序 我的应用程序使用Laravel作业和队列。我们可以使用Laravel附带的artisan实用程序来管理队列工作者 php artisan queue:work php artisan queue:restart 我将使用它来监视队列进程 [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /home/forge/app.co

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

我的应用程序使用Laravel作业和队列。我们可以使用Laravel附带的artisan实用程序来管理队列工作者

php artisan queue:work
php artisan queue:restart
我将使用它来监视队列进程

[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

这将在带有
app=myapp
标签的所有POD的第一个容器中执行
mycommand
。无论您的集群是否在EKS或其他任何地方运行。

通常,如果您希望同时在多个容器中执行命令,您可以通过以下方式执行此操作:

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

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

您可以使用
kubectl scale deployment
更改部署副本的数量,这将根据需要创建或销毁POD。我不会试图让一个pod在没有进程的情况下运行,只需删除该pod并稍后创建一个新的pod。您可以使用
kubectl scale deployment
更改部署副本的数量,这将根据需要创建或销毁pod。我不会试图让一个pod在没有进程的情况下运行,只是删除该pod,然后创建一个新的pod。