반응형
Ansible AWX 설치 시 내부 PostgreSQL 데이터의 지속성을 보장하는 방법
Ansible AWX에서 PostgreSQL 데이터를 지속적으로 유지하려면 PersistentVolume(PV) 및 PersistentVolumeClaim(PVC)을 올바르게 설정하는 것이 중요합니다. 기본적으로 AWX Operator는 Ephemeral Storage를 사용하므로 데이터를 유지하려면 별도의 PV/PVC를 설정해야 합니다.
Persistent Volume(PV)
- 클러스터 관리자가 미리 생성해 놓은 물리적 또는 네트워크 저장소
- NFS, Ceph, AWS EBS, HostPath 등 다양한 저장소 지원
- 노드가 재부팅되거나 Pod가 삭제되더라도 데이터 유지 가능
Persistent Volume Claim(PVC)
- 애플리케이션(Pod)이 PV를 요청하는 방식
- 사용자가 직접 스토리지를 할당하는 것이 아니라, PVC를 통해 기존 PV를 자동으로 할당받음
클러스터 확인
더보기
---
Minikube 삭제
minikube stop
minikube delete
rm -rf $HOME/.minikube
Minikube 클러스터 생성
minikube start --driver=none
Minikube 클러스터 상태 확인
minikube status
kubectl 구성 확인
kubectl config view
---
AWX Operator 설치
git clone https://github.com/ansible/awx-operator.git
cd awx-operator
네임스페이스 생성
export NAMESPACE=awx
cat <<EOF > awx-namespace.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: awx
labels:
name: awx
annotations:
description: "Namespace for AWX deployment"
EOF
네임스페이스 적용
kubectl apply -f awx-namespace.yaml
생성된 네임스페이스 확인
kubectl get namespaces
현재 컨텍스트의 네임스페이스를 설정
kubectl config set-context --current --namespace=$NAMESPACE
디렉토리 생성 및 PV(Persistent Volume) 생성
hostPath는 단일 노드 환경에서만 사용 가능하며 데이터 지속성을 보장하지 않습니다. 프로덕션 환경에서는 네트워크 스토리지(예: NFS, AWS EBS)를 사용하는 것이 좋습니다.
mkdir -p $HOME/awx-operator/postgres-data
cat <<EOF > postgres-pv.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
labels:
type: local
spec:
storageClassName: manual # 특정 StorageClass를 사용
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # PV 삭제 후 데이터 유지
hostPath:
path: "/home/vagrant/awx-operator/postgres-data"
EOF
PV 적용
kubectl apply -f postgres-pv.yaml
더보기
---
PV가 적용될 때까지 대기
kubectl wait --for=condition=Available --timeout=60s pv/postgres-pv
---
PV 상태 확인
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
postgres-pv 10Gi RWO Retain Available manual <unset> 15s
PVC(Persistent Volume Claim) 생성
더보기
---
Dynamic Provisioning 사용
동적 프로비저닝을 사용하면 PVC에 적합한 PV를 자동으로 생성할 수 있습니다.
StorageClass를 정의하고 PVC에서 해당 StorageClass를 사용합니다.
STORAGE CLASS 생성
cat <<EOF > storageclass.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: manual
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
EOF
kubectl apply -f storageclass.yaml
PVC 생성
cat <<EOF > postgres-pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-15-awx-postgres-15-0
namespace: awx
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi # 요청하는 저장소 크기
storageClassName: manual # PV에서 정의한 StorageClass와 일치해야 함
EOF
kubectl apply -f postgres-pvc.yaml
kubectl get pvc -n awx
---
728x90
Operator 배포
make deploy
AWX 애플리케이션 배포
cat <<EOF > awx.yaml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
namespace: awx
spec:
service_type: NodePort
nodeport_port: 32080
postgres_storage_class: manual
postgres_storage_requirements:
requests:
storage: 10Gi
EOF
kubectl apply -f awx.yaml
배포 상태 확인
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
postgres-pv 10Gi RWO Retain Bound awx/postgres-15-awx-postgres-15-0 manual <unset> 4m55s
kubectl get pods -n awx
NAME READY STATUS RESTARTS AGE
awx-migration-24.6.1-44v8r 1/1 Running 0 107s
awx-operator-controller-manager-5b87c978d9-bdzcn 2/2 Running 0 3m39s
awx-postgres-15-0 1/1 Running 0 2m41s
awx-task-5dc599d858-x9blp 0/4 Init:0/2 0 2m5s
awx-web-6b779895bb-cgcvq 3/3 Running 0 2m7s
kubectl get pvc -n awx
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
postgres-15-awx-postgres-15-0 Bound postgres-pv 10Gi RWO manual <unset> 31s
kubectl get pods --all-namespaces -o json | jq '.items[] | {pod: .metadata.name, namespace: .metadata.namespace, pvc: .spec.volumes[]? | select(.persistentVolumeClaim != null) | .persistentVolumeClaim.claimName}'
{
"pod": "awx-postgres-15-0",
"namespace": "awx",
"pvc": "postgres-15-awx-postgres-15-0"
}
장애 처리
더보기
---
AWX Operator 이미지 다운로드 및 태깅 (필요 시 적용)
docker pull quay.io/ansible/awx-operator:2.19.1
docker tag quay.io/ansible/awx-operator:2.19.1 quay.io/ansible/awx-operator:2.19.1-36-g5bb2b2a
Pod 문제 해결을 위한 로그 확인 및 삭제
kubectl delete pod <pod-name>
kubectl logs <pod-name>
kubectl describe pod <pod-name>
---
AWX 웹 인터페이스 접근 URL 확인(Minikube 서비스 URL 확인)
minikube service awx-service --url -n awx
http://192.168.10.48:32080
AWX 관리자 비밀번호 확인
kubectl get secret awx-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo
KZEb8SYLwpf1eTiQJjG17LFLsefAVJXH
Ansible AWX 설치 시 PostgreSQL 데이터를 유지할 수 있습니다.
참고URL
- 변군이글루 : kubectx와 kubens를 설치하는 방법
- 변군이글루 : Ansible AWX CLI 설치
728x90
반응형
'리눅스' 카테고리의 다른 글
Ansible AWX에서 Slack 알림을 구성하는 방법 (0) | 2025.03.26 |
---|---|
Nginx에서 URL 재작성 규칙을 설정하는 방법 (0) | 2025.03.19 |
Ansible cowsay 기능 비활성화 방법 (0) | 2025.03.14 |
Ansible AWX에서 인벤토리를 추가하는 방법 (0) | 2025.03.13 |
kubectx와 kubens를 설치하는 방법 (0) | 2025.03.13 |