Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2025/08/11/how-use-minio-ansible-automation-hub
이 문서에서는 Red Hat Ansible Automation Platform을 배포할 때 고성능 셀프 호스팅 객체 스토리지 솔루션인 MinIO를 Ansible automation hub의 백엔드로 구성하고 사용하는 방법을 살펴봅니다 . 이 접근 방식을 사용하면 AWS S3 또는 Azure Blob과 같은 클라우드 네이티브 객체 스토리지 서비스가 필요하지 않으므로, Air-Gapped 환경, 온프레미스 환경 또는 비용에 민감한 환경에 이상적입니다. Minio를 설정하고, AAP와 통합하고, 사용자 지정 콘텐츠 컬렉션을 호스팅하기 위한 완벽하게 호환되는 S3 유사 스토리지 백엔드로서의 기능을 검증하는 방법을 알아봅니다.
조직에서 전사적 자동화를 위해 Ansible Automation Platform을 도입하는 사례가 증가함에 따라 , 특히 인증된 콘텐츠 또는 사용자 지정 콘텐츠 컬렉션을 호스팅하기 위해 프라이빗 자동화 허브를 구축할 때 유연하고 비용 효율적인 스토리지 솔루션의 필요성이 더욱 중요해지고 있습니다. Amazon Web Services(AWS) 및 Azure와 같은 클라우드 제공업체는 S3 호환 스토리지(S3, Blob)를 제공하지만, 이러한 옵션은 에어갭 환경, 온프레미스 환경 또는 규제된 환경에서는 적합하지 않을 수 있습니다.
이 문제를 해결하기 위해 Red Hat OpenShift 환경 에 배포 가능한 고성능 S3 호환 객체 스토리지 시스템인 Minio를 사용할 수 있습니다 . 이를 통해 완전히 독립적이고 클라우드에 독립적인 Ansible Automation Platform 배포가 가능합니다.
이 기사는 두 부분으로 나뉩니다.
1부: OpenShift 클러스터에 Minio 설정하기
2부: Minio를 사용하여 Ansible Automation Platform을 배포하는 방법
필수 조건
시작하기 전에 다음 사항을 확인하세요.
- Red Hat OpenShift Container Platform 에 대한 액세스 (버전 4.12 이상 권장, 4.16에서 테스트).
- 워크로드를 배포하고 스토리지를 구성하기 위한 클러스터 관리자 또는 이와 동등한 권한.
- 이미지를 가져오기 위한 레지스트리 연결.
메모: 인증서에는 letsencrypt를 사용하고 있습니다. 현재 자체 서명 인증서나 -tls-verify=false 옵션을 사용해서는 작동하지 않습니다. 자동화 허브 API 포드에서 “urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1006).”라는 메시지가 표시됩니다. 이미지를 푸시하는 동안 500 내부 오류가 발생할 수 있습니다.
1부: OpenShift에 Minio 배포
OpenShift에 Minio를 배포하려면 다음 단계를 따르세요(또는 Minio 가이드 를 참조하세요 ).
- OpenShift Container Platform에서 프로젝트를 생성하세요. OpenShift에서 “aap”라는 프로젝트를 생성했는데, 여기에 Minio Pod를 배포할 예정입니다.
- 그림 1에 표시된 대로 프로젝트의 Workloads -> Pods 로 이동한 다음 ( + )를 클릭하여 YAML을 가져옵니다.

- 다음 YAML을 편집기에 붙여넣습니다.
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: minio-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
volumeMode: Filesystem
---
kind: Secret
apiVersion: v1
metadata:
name: minio-secret
stringData:
# change the username and password to your own values.
# ensure that the user is at least 3 characters long and the password at least 8
minio_root_user: minio
minio_root_password: minio123
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: minio
spec:
replicas: 1
selector:
matchLabels:
app: minio
template:
metadata:
creationTimestamp: null
labels:
app: minio
spec:
volumes:
- name: data
persistentVolumeClaim:
claimName: minio-pvc
containers:
- resources:
limits:
cpu: 250m
memory: 1Gi
requests:
cpu: 20m
memory: 100Mi
readinessProbe:
tcpSocket:
port: 9000
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 5
successThreshold: 1
failureThreshold: 3
terminationMessagePath: /dev/termination-log
name: minio
livenessProbe:
tcpSocket:
port: 9000
initialDelaySeconds: 30
timeoutSeconds: 1
periodSeconds: 5
successThreshold: 1
failureThreshold: 3
env:
- name: MINIO_ROOT_USER
valueFrom:
secretKeyRef:
name: minio-secret
key: minio_root_user
- name: MINIO_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: minio-secret
key: minio_root_password
ports:
- containerPort: 9000
protocol: TCP
- containerPort: 9090
protocol: TCP
imagePullPolicy: IfNotPresent
volumeMounts:
- name: data
mountPath: /data
subPath: minio
terminationMessagePolicy: File
image: >-
quay.io/minio/minio:latest
args:
- server
- /data
- --console-address
- :9090
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
securityContext: {}
schedulerName: default-scheduler
strategy:
type: Recreate
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
---
kind: Service
apiVersion: v1
metadata:
name: minio-service
spec:
ipFamilies:
- IPv4
ports:
- name: api
protocol: TCP
port: 9000
targetPort: 9000
- name: ui
protocol: TCP
port: 9090
targetPort: 9090
internalTrafficPolicy: Cluster
type: ClusterIP
ipFamilyPolicy: SingleStack
sessionAffinity: None
selector:
app: minio
---
kind: Route
apiVersion: route.openshift.io/v1
metadata:
name: minio-api
spec:
to:
kind: Service
name: minio-service
weight: 100
port:
targetPort: api
wildcardPolicy: None
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirect
---
kind: Route
apiVersion: route.openshift.io/v1
metadata:
name: minio-ui
spec:
to:
kind: Service
name: minio-service
weight: 100
port:
targetPort: ui
wildcardPolicy: None
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirect4. 기본 사용자 이름/비밀번호 및 크기를 변경합니다(YAML의 21, 22, 11번째 줄).
5. Create 를 클릭합니다 (그림 2).

이제 PVC, secret, service, api(route), ui(route)와 같은 Minio 리소스를 생성했습니다.
6. 그림 3과 같이 포드 상태를 확인하세요.

그림 4에 표시된 대로 Minio 경로를 확인하세요.

-api 경로는 프로그래밍 방식 액세스를 위한 것이고 -ui 경로는 UI를 위한 것입니다(그림 5).

- Create Bucket를 클릭 하고 이름을 입력하여 버킷을 만듭니다(그림 6).

이것을 자동화 허브 스토리지로 사용할 수 있습니다.
2부: Ansible 자동화 플랫폼 배포
이제 Minio 버킷을 사용하여 Ansible Automation Platform 오퍼레이터를 배포해 보겠습니다 . 자세히 알아보세요 .
다음 단계를 따르세요.
- OpenShift Container Platform UI에서 왼쪽 패널의 OperatorHub 로 이동합니다.
- 검색창에 “Ansible Automation Platform”을 입력하세요. 그런 다음 기본 옵션으로 선택하여 설치합니다. 저는 Ansible Automation Platform 2.5를 설치합니다.
- 운영자를 설치한 후 Minio 버킷에 액세스하기 위한 시크릿을 만듭니다.
oc -n $HUB_NAMESPACE apply -f- <<EOF apiVersion: v1 kind: Secret metadata: name: 'my-private-hub-s3' stringData: s3-access-key-id: minio s3-secret-access-key: minio123 s3-bucket-name: my-bucket-private-automation-hub s3-endpoint: https://minio-api-aap.apps.cluster-hh65q.hh65q.sandbox502.opentlc.com/ EOF
4. 액세스 키, 시크릿, 버킷 이름, 엔드포인트 값을 실제 값으로 변경하세요. s3-endpoint는 UI가 아닌 -api 경로여야 합니다. 자세한 내용은 여기에서 확인할 수 있습니다 .
5. 이제 Ansible Automation Platform 인스턴스를 배포할 차례입니다. 이 목적으로 다음 샘플 YAML을 사용합니다. 비밀 이름을 변경해야 합니다.
oc apply -f - <<EOF
apiVersion: aap.ansible.com/v1alpha1
kind: AnsibleAutomationPlatform
metadata:
name: my-aap
namespace: aap
spec:
# Platform
image_pull_policy: IfNotPresent
# Components
controller:
disabled: false
eda:
disabled: false
hub:
disabled: false
storage_type: S3
object_storage_s3_secret: my-private-hub-s3
lightspeed:
disabled: true
EOF배포하는 데 5~10분이 소요됩니다. YAML에 대해 자세히 알아보세요 .
6. 배포가 완료되면 Ansible Automation Platform Gateway에 로그인하여 구독을 적용합니다.
7. Automation Content 섹션 으로 이동합니다 (그림 6).

8. 이미지를 푸시하여 자동화 허브를 테스트하세요. 자동화 허브에 로그인하고 이미지에 태그를 지정한 다음 이미지를 푸시하세요.
kashekha@kashekha-thinkpadp1gen7:~$ podman login https://my-aap-aap.apps.cluster-hh65q.hh65q.sandbox502.opentlc.com Username: admin Password: Login Succeeded! kashekha@kashekha-thinkpadp1gen7:~$ podman tag localhost/ee-supported-rhel9_caac_infra my-aap-aap.apps.cluster-hh65q.hh65q.sandbox502.opentlc.com/ee-supported-rhel9_caac_infra:latest kashekha@kashekha-thinkpadp1gen7:~$ podman images |grep "my-aap-aap" my-aap-aap.apps.cluster-hh65q.hh65q.sandbox502.opentlc.com/ee-supported-rhel9_caac_infra latest 9d6efab8d315 4 weeks ago 1.53 GB kashekha@kashekha-thinkpadp1gen7:~$ podman push my-aap-aap.apps.cluster-hh65q.hh65q.sandbox502.opentlc.com/ee-supported-rhel9_caac_infra:latest Getting image source signatures . .
9. 개인 자동화 허브에서 이미지를 확인하세요.이제 이미지를 사용하여 실행 환경(Ansible Automation Platform의 자동화 실행 섹션)을 생성하겠습니다.
10. Automation Execution -> Infrastructure -> Credentials 으로 이동하여 개인 자동화 허브에 대한 자격 증명을 만듭니다 .
11. 실행 환경을 생성합니다(그림 7).

12. 마지막으로, 실행 환경을 사용하여 작업 템플릿을 실행합니다. 처음에는 실행 환경을 가져오는 데 몇 분 정도 걸립니다.
마무리
이 문서에서는 Red Hat OpenShift 환경 에 Minio 개체 스토리지 시스템을 배포하여 완전히 자체 포함되고 클라우드에 독립적인 Ansible Automation Platform 배포를 구현하는 방법을 설명했습니다.