본문 바로가기

리눅스

Ansible AWX 설치 시 내부 PostgreSQL 데이터의 지속성을 보장하는 방법

반응형

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
반응형