基础环境
需要一个 K8S 集群,执行 kubectl
的节点需要安装 helm
,提前准备存储,这里使用 NFS。
Helm 配置
添加 repo
[root@base-k8s-master-1 ~]# helm repo add awx-operator \
https://ansible-community.github.io/awx-operator-helm/
"awx-operator" has been added to your repositories
查看 value
[root@base-k8s-master-1 ~]# helm show values awx-operator > awx-helm-value.yml
[root@base-k8s-master-1 ~]# cat awx-helm-value.yml
AWX:
# enable use of awx-deploy template
enabled: false
name: awx
spec:
admin_user: admin
# configurations for external postgres instance
postgres:
enabled: false
host: Unset
port: 5678
dbName: Unset
username: admin
# for secret management, pass in the password independently of this file
# at the command line, use --set AWX.postgres.password
password: redhat
sslmode: prefer
type: unmanaged
service:
type: NodePort
port: 30001
先最简单部署,不做修改。
安装 AWX Operator
[root@base-k8s-master-1 ~]# kubectl create namespace awx
namespace/awx created
[root@base-k8s-master-1 ~]# helm install awx-operator awx-operator/awx-operator \
-n awx --values awx-helm-value.yml
NAME: awx-operator
LAST DEPLOYED: Sat Feb 1 00:34:09 2025
NAMESPACE: awx
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
AWX Operator installed with Helm Chart version 2.19.1
检查 AWX Operator 状态。
[root@base-k8s-master-1 ~]# kubectl get pod -n awx
NAME READY STATUS RESTARTS AGE
awx-operator-controller-manager-7f755f5f8d-n7xpv 2/2 Running 0 17s
利用 AWX Operator 部署 AWX
https://ansible.readthedocs.io/projects/awx-operator/en/latest/index.html
创建 PersistentVolume 和 PersistentVolumeClaim
创建 PersistentVolume 和 PersistentVolumeClaim 时不能修改名字。
PersistentVolume
PostgreSQL
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-15-ansible-awx-postgres-15-0-pv
namespace: awx
labels:
app: awx-postgresql
spec:
capacity:
storage: 20Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /data/awx/postgres_data
server: nfs-storage.example.com
claimRef:
name: postgres-15-ansible-awx-postgres-15-0
namespace: awx
AWX Web Project
apiVersion: v1
kind: PersistentVolume
metadata:
name: ansible-awx-projects-claim-pv
namespace: awx
labels:
app: awx-project
spec:
capacity:
storage: 20Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /data/awx/awx_project
server: nfs-storage.example.com
claimRef:
name: ansible-awx-projects-claim
namespace: awx
PersistentVolumeClaim
PostgreSQL
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-15-ansible-awx-postgres-15-0
namespace: awx
spec:
selector:
matchLabels:
app: awx-postgresql
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
AWX Web Project
AWX Web Project 不需要提前配置 PersistentVolumeClaim,安装时会自动创建 PersistentVolumeClaim,提前创建会导致部署 ansible-awx-web 时卡住。
部署 AWX
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: ansible-awx
namespace: awx
spec:
service_type: nodeport
projects_persistence: true
projects_storage_access_mode: ReadWriteOnce
image: quay.example.com/kubernetes/ansible/awx
image_version: latest
image_pull_policy: IfNotPresent
ee_images:
- name: my-custom-awx-ee
image: quay.example.com/kubernetes/ansible/awx-ee
control_plane_ee_image: quay.example.com/kubernetes/ansible/awx-ee:latest
init_container_image: quay.example.com/kubernetes/ansible/awx-ee
init_container_image_version: latest
init_projects_container_image: quay.example.com/kubernetes/ansible/centos:stream9
redis_image: quay.example.com/kubernetes/ansible/redis
redis_image_version: '7'
postgres_image: quay.example.com/kubernetes/ansible/postgresql-15-c9s
postgres_image_version: latest
postgres_data_volume_init: true
这里我是将 image 下载来下传到了私有仓库上,默认镜像可以查看 https://github.com/ansible/awx-operator/blob/devel/roles/installer/defaults/main.yml。
创建 Service
部署 AWX 的时候会默认创建一个 nodePort
模式的 Service,不过端口是随机的,我现在还没有 ingress,就创建了一个固定端口的 nodePort
service。
apiVersion: v1
kind: Service
metadata:
labels:
app: awx-service
name: awx-service
namespace: awx
spec:
ports:
- name: http
nodePort: 30001
port: 80
protocol: TCP
targetPort: 8052
selector:
app.kubernetes.io/name: ansible-awx-web
type: NodePort
获取密码
[root@base-k8s-master-1 ~]# kubectl get secrets -n awx \
ansible-awx-admin-password \
-o jsonpath={.data.password} | base64 --decode && echo
4O6IGTzixpEsPNNpqGeDvvNhhtsZ3fAt
访问 AWX
访问 Worker 节点的 30001 端口即可访问 AWX。