跳至内容

AWX Operator 调试

常规调试

当 Operator 部署 AWX 时,它会在 Operator 容器内运行 `installer` 角色。如果 AWX CR 的状态为 `Failed`,通常需要查看 awx-operator 容器日志,其中显示了 installer 角色的输出。要查看这些日志,请运行

kubectl logs deployments/awx-operator-controller-manager -c awx-manager -f

检查 Kubernetes 资源

除此之外,通常需要检查 AWX Operator 管理的各种资源,例如

  • awx
  • awxbackup
  • awxrestore
  • pod
  • deployment
  • pvc
  • service
  • ingress
  • route
  • secrets
  • serviceaccount

如果通过 OperatorHub 和 OLM 安装

  • subscription
  • csv
  • installPlan
  • catalogSource

要检查这些资源,可以使用以下命令

# Inspecting k8s resources
kubectl describe -n <namespace> <resource> <resource-name>
kubectl get -n <namespace> <resource> <resource-name> -o yaml
kubectl logs -n <namespace> <resource> <resource-name>

# Inspecting Pods
kubectl exec -it -n <namespace> <pod> <pod-name>

配置无日志

可以通过将 AWX CR spec 中的 no_log 设置为 false 来显示任务输出以进行调试。这将在 awx-operator 日志中显示任何 no_log 设置为 true 的失败任务的输出。

例如

---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-demo
spec:
  service_type: nodeport
  no_log: false                  # <------------

在不部署 Operator 的情况下迭代安装程序

按照正常的基本安装步骤操作。

安装一些依赖项

ansible-galaxy collection install -r molecule/requirements.yml
pip install -r molecule/requirements.txt

为了防止我们即将进行的更改被覆盖,请缩减正在运行的任何 Operator 实例。

kubectl scale deployment awx-operator-controller-manager --replicas=0

创建一个调用安装程序角色的 playbook(Operator 使用 ansible-runner 的角色执行功能)。

# run.yml
---
- hosts: localhost
  roles:
    - installer

创建一个变量文件

# vars.yml
---
ansible_operator_meta:
  name: awx
  namespace: awx
set_self_labels: false
update_status: false
service_type: nodeport

变量文件将替换 awx 资源,因此您希望使用 awx 资源覆盖的任何值,都放在变量文件中。例如,如果您希望使用自己的镜像、版本和拉取策略,可以像下面这样指定:

# vars.yml
---
ansible_operator_meta:
  name: awx
  namespace: awx
set_self_labels: false
update_status: false
service_type: nodeport
image: $DEV_DOCKER_TAG_BASE/awx_kube_devel
image_pull_policy: Always
image_version: $COMPOSE_TAG

运行安装程序

ansible-playbook run.yml -e @vars.yml -v

获取 URL 和管理员密码

$ kubectl get secret awx-admin-password -- -o jsonpath="{.data.password}" | base64 --decode ; echo
LU6lTfvnkjUvDwL240kXKy1sNhjakZmT