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是一个进程管理工具,可以自动启动、停止和重启进程。该配置文件中定义了两个程序,即dispatchercallback-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等。

posted @ 2023-05-25 14:09  wanghongwei-dev  阅读(322)  评论(0编辑  收藏  举报