Ansible AWX容器内部服务分析与解读
1、redis
容器
Redis容器是AWX中的一个重要组件,用于存储AWX系统的数据和状态信息。
- 任务状态信息:当AWX执行任务时,任务状态信息会存储在Redis中,以便其他组件可以访问和更新任务状态信息。
- 任务结果信息:当AWX执行任务完成后,任务结果信息会存储在Redis中,以便其他组件可以访问和查看任务结果信息。
- 会话信息:当用户登录AWX时,会话信息会存储在Redis中,以便其他组件可以访问和处理会话信息。
- 任务队列信息:当AWX有多个任务需要执行时,任务队列信息会存储在Redis中,以便其他组件可以访问和处理任务队列信息。
2、awx-demo-web
容器
容器运行指令:
/usr/bin/launch_awx.sh -> exec supervisord -c /etc/supervisord.conf
该启动脚本使用supervisord托管awx进程,以下是/etc/supervisord.conf文件内容:
[supervisord]
nodaemon = True
umask = 022
logfile = /dev/stdout
logfile_maxbytes = 0
pidfile = /var/run/supervisor/supervisor.web.pid
[program:nginx]
command = nginx -g "daemon off;"
autorestart = true
startsecs = 30
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:uwsgi]
command = /var/lib/awx/venv/awx/bin/uwsgi /etc/tower/uwsgi.ini
directory = /var/lib/awx
autorestart = true
startsecs = 30
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:daphne]
command = /var/lib/awx/venv/awx/bin/daphne -b 127.0.0.1 -p 8051 --websocket_timeout -1 awx.asgi:channel_layer
directory = /var/lib/awx
autorestart = true
startsecs = 30
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:wsbroadcast]
command = awx-manage run_wsbroadcast
directory = /var/lib/awx
autorestart = true
startsecs = 30
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:awx-rsyslogd]
command = rsyslogd -n -i /var/run/awx-rsyslog/rsyslog.pid -f /var/lib/awx/rsyslog/rsyslog.conf
autorestart = true
startsecs = 30
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[group:tower-processes]
programs=nginx,uwsgi,daphne,wsbroadcast,awx-rsyslogd
priority=5
[eventlistener:superwatcher]
command=stop-supervisor
events=PROCESS_STATE_FATAL
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[unix_http_server]
file=/var/run/supervisor/supervisor.web.sock
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.web.sock ; use a unix:// URL for a unix socket
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
这是一个Supervisor配置文件,用于管理AWX的进程。Supervisor是一个进程控制系统,可以在Linux系统上监控和管理后台进程。在这个配置文件中,有五个进程组成了一个名为“tower-processes”的组。其中包括:
- nginx:Web服务器,用于提供AWX的Web界面。
- uwsgi:Web服务器网关接口,它充当Web服务器和Django应用程序之间的中间件。
- daphne:异步Web服务器,它支持WebSocket和长轮询协议。
- wsbroadcast:AWX中的一个后台进程,用于处理实时更新和通知。
- awx-rsyslogd:AWX中的一个后台进程,用于处理系统日志。
在这个配置文件中,每个进程都有一个名为“program”的段,其中定义了进程的命令、工作目录、重启策略和日志文件路径等信息。此外,还定义了一个名为“superwatcher”的事件监听器,用于在进程崩溃时停止Supervisor本身。
awx-manage run_wsbroadcast
是用于启动AWX WebSocket广播服务的命令,它用于在AWX的Web界面中推送实时的任务执行状态。当AWX的工作节点执行任务时,它们会将任务状态更新发送到WebSocket广播服务,然后广播服务将更新推送到AWX的Web界面。这使得用户可以实时地查看任务执行进度和结果,而无需手动刷新页面。
3、awx-demo-task
容器
容器运行指令:
/usr/bin/launch_awx_task.sh -> exec supervisord -c /etc/supervisord_task.conf
该启动脚本使用supervisord托管awx进程,以下是/etc/supervisord_task.conf文件内容:
[supervisord]
nodaemon = True
umask = 022
logfile = /dev/stdout
logfile_maxbytes = 0
pidfile = /var/run/supervisor/supervisor.pid
[program:dispatcher]
command = awx-manage run_dispatcher
directory = /var/lib/awx
autorestart = true
startsecs = 30
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:callback-receiver]
command = awx-manage run_callback_receiver
directory = /var/lib/awx
autorestart = true
startsecs = 30
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[group:tower-processes]
programs=dispatcher,callback-receiver
priority=5
[eventlistener:superwatcher]
command=stop-supervisor
events=PROCESS_STATE_FATAL
autorestart = true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[unix_http_server]
file=/var/run/supervisor/supervisor.sock
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
这是一个Supervisor配置文件,它用于管理AWX的进程。Supervisor是一个进程管理工具,可以自动启动、停止和重启进程。该配置文件中定义了两个程序,即dispatcher
和callback-receiver
,它们都是AWX的核心组件。同时,还定义了一个进程组tower-processes
,该组中包含了这两个程序。此外,还定义了一个事件监听器superwatcher
,它会在出现致命错误时停止Supervisor进程。最后,还定义了Supervisor的一些基本配置,例如日志文件的位置和大小限制,以及RPC接口的设置。
awx-manage run_dispatcher
是用于启动AWX任务分发器的命令。它会在AWX系统中启动一个任务分发器进程,该进程会监听任务队列并将任务分发给相应的执行节点。执行该命令需要在AWX系统的命令行中运行。
awx-manage run_callback_receiver
是用于启动AWX回调接收器的命令。回调接收器进程负责接收来自Ansible任务的回调信息,并将其发送到AWX系统中进行处理和记录。
4、awx-demo-ee
容器
容器运行指令:
receptor --config /etc/receptor/receptor.conf
该命令用于启动Receptor代理,使用的配置文件为/etc/receptor/receptor.conf。Receptor是一个轻量级的代理框架,旨在为异构网络提供通信和协作能力。通过Receptor,可以将不同的网络连接在一起,使它们之间能够互相通信和交换数据。在启动Receptor代理之前,需要先配置好代理的参数和配置文件。
其配置文件内容如下:
- local-only: null
- log-level: debug
- node:
firewallrules:
- action: reject
tonode: awx-demo-576484dbfd-hkqjq
toservice: control
- control-service:
filename: /var/run/receptor/receptor.sock
permissions: '0660'
service: control
- work-command:
allowruntimeparams: true
command: ansible-runner
params: worker
worktype: local
- work-signing:
privatekey: /etc/receptor/signing/work-private-key.pem
tokenexpiration: 1m
- work-kubernetes:
allowruntimeauth: true
allowruntimeparams: true
allowruntimepod: true
authmethod: runtime
worktype: kubernetes-runtime-auth
- work-kubernetes:
allowruntimeauth: true
allowruntimeparams: true
allowruntimepod: true
authmethod: incluster
worktype: kubernetes-incluster-auth
- tls-client:
cert: /etc/receptor/tls/receptor.crt
key: /etc/receptor/tls/receptor.key
name: tlsclient
rootcas: /etc/receptor/tls/ca/receptor-ca.crt
这是一个YAML格式的配置文件,用于配置Receptor代理的参数和选项。下面是各个参数的解释:
- local-only: null:这个参数表示是否只允许本地连接,即只有在本地的Receptor节点才能使用代理服务。null表示未设置该选项,即允许远程连接。
- log-level: debug:这个参数表示日志输出的级别,debug表示输出所有调试信息。
- node: 这个参数表示Receptor节点的配置信息,包括防火墙规则等。这里定义了一个防火墙规则,即拒绝从当前节点到目标节点(名为awx-demo-576484dbfd-hkqjq)的control服务连接。
- control-service: 这个参数表示控制服务的配置信息,包括服务的名称、文件路径和权限等。
- work-command: 这个参数表示工作命令的配置信息,包括命令的名称、类型和运行参数等。这里定义了一个类型为local的工作命令,即在本地运行ansible-runner命令,并允许运行时传递参数。
- work-signing: 这个参数表示工作签名的配置信息,包括私钥和令牌过期时间等。这里定义了一个过期时间为1分钟的签名,用于对工作进行认证和授权。
- work-kubernetes: 这个参数表示在Kubernetes环境中运行工作的配置信息,包括认证方式、类型和运行参数等。这里定义了两个不同的工作类型,分别使用runtime和incluster方式进行认证。
- tls-client: 这个参数表示TLS客户端的配置信息,包括证书、密钥和根证书等。这里定义了一个名为tlsclient的TLS客户端,用于与其他节点建立安全连接。
ansible-runner
是一个用于运行Ansible Playbook的命令行工具。它通常与AWX或Tower一起使用,但也可以在命令行中使用。使用ansible-runner工具可以方便地管理Ansible Playbook的执行,并提供了更多的选项和功能。例如,可以在运行时指定额外的变量,使用自定义的Inventory文件,以及在多个主机上并行执行Playbook等。