이제 3개의 디스크 파티션에 각각 컨테이너 데이터가 저장될 디렉터리를 마운트하고 열어줬으니 이걸 이용해서 형상 관리를 진행할 수 있게 됨
minIO는 토푸의 상태 관리, Gitea는 전체 작업 디렉터리를 기록하기 위함.
일단 minIO와 통신하기 위해 IaC에서 민아이오 클라이언트를 다운받음 - https://github.com/minio/mc
GitHub - minio/mc: Unix like utilities for object store
Unix like utilities for object store. Contribute to minio/mc development by creating an account on GitHub.
github.com
역시 dnf 기본 패키지 저장소엔 없지만 오픈소스라 가져와서 사용 가능. 빌드된 실행파일이라 /usr/local/bin에 실행 권한 붙여서 옮김
[root@IaC ~]# wget https://dl.min.io/client/mc/release/linux-amd64/mc
[root@IaC ~]# chmod +x mc
[root@IaC ~]# mv mc /usr/local/bin/
[root@IaC ~]# mc --help
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── (q)uit/esc
NAME:
mc - MinIO Client for object storage and filesystems.
USAGE:
mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]
COMMANDS:
alias manage server credentials in configuration file
admin manage MinIO servers
...
앤서블로 구성한 minIO 컨테이너에 인증해서 API를 연동부터 함
[root@IaC ~]# mc alias set repo http://repository:9000 minioadmin minioadminpass
Added `repo` successfully.
그리고 연결한 저장소에 백엔드로 쓰일 버킷을 생성해준다. 생성해주고 등록된 저장소를 보면 빈 버킷이 생김

[root@IaC ~]# mc mb repo/tofu-state
Bucket created successfully `repo/tofu-state`.
[root@IaC ~]# mc ls repo
[2025-11-10 15:19:09 KST] 0B tofu-backend/
백엔드 지정할 디렉터리로 가서 프로바이더 부분에 백엔드를 추가해줌
[root@IaC ~]# cd tofu-backend
[root@IaC tofu-backend]# vi provider.tf
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.50.0"
}
}
backend "s3" {
bucket = "tofu-state"
key = "tofu-backend/terraform.tfstate"
endpoint = "http://repository:9000"
region = "us-east-1"
access_key = "minioadmin"
secret_key = "minioadminpass"
skip_credentials_validation = true
skip_region_validation = true
force_path_style = true
skip_metadata_api_check = true
}
}
provider "openstack" {
insecure = true
}
~
그리고 다시 초기화를 해주면서 재구성해주면 로컬 -> s3로 백엔드가 변경되고 버킷 확인해보면 안에 저장된 게 보임

[root@IaC tofu-backend]# mc ls -r repo
[2025-11-10 15:30:33 KST] 3.9KiB STANDARD tofu-state/tofu-backend/terraform.tfstate

여기가 잘 됐으니 이제 다시 메인 쿠버 클러스터 노드들 상태도 저장시킴. 마찬가지로 테라폼 블럭 안에 백엔드 지정 추가
[root@IaC tofu-backend]# cd ../opentofu/
[root@IaC opentofu]# vi provider.tf
...
backend "s3" {
bucket = "tofu-state"
key = "main/terraform.tfstate"
endpoint = "http://repository:9000"
region = "us-east-1"
access_key = "minioadmin"
secret_key = "minioadminpass"
use_path_style = true
skip_credentials_validation = true
skip_region_validation = true
skip_metadata_api_check = true
}
[root@IaC opentofu]# tofu init --reconfigure
[root@IaC opentofu]# mc ls -r repo
[2025-11-10 15:39:07 KST] 26KiB STANDARD tofu-state/main/terraform.tfstate
[2025-11-10 15:30:33 KST] 3.9KiB STANDARD tofu-state/tofu-backend/terraform.tfstate
똑같이 상태가 저장됨. 근데 지금은 상태가 가장 마지막에 바뀐 것만 확인하고 이전 상태들은 확인 불가
버전관리가 안 되는 상태라 이것도 활성화 시켜주면 됨 mc로 버킷 버전관리 활성화 가능
[root@IaC opentofu]# mc version enable repo/tofu-state
repo/tofu-state versioning is enabled
진짜 버전관리가 잘 되는지 확인하기 위해 저장소 작업 디렉터리 들어가 인스턴스에 태그만 추가하고 차이가 생겼는지 확인 하면 됨.
[root@IaC opentofu]# cd ../tofu-backend/
[root@IaC tofu-backend]# vi repo-instance.tf
data "openstack_images_image_v2" "image" {
name = "lab-rocky-9"
}
data "openstack_compute_flavor_v2" "backend_flavor" {
name = "m1.medium"
}
resource "openstack_compute_instance_v2" "backend_server" {
name = "repository"
flavor_id = data.openstack_compute_flavor_v2.backend_flavor.id
image_id = data.openstack_images_image_v2.image.id
key_pair = "k8s-keypair"
security_groups = ["lab"]
## ---- 이거 추가 ---- ##
tags = [
"repo",
"minio-version-test",
]
## ---- 이거 추가 ---- ##
network {
name = "net-infra"
}
}
그리고 이 상태가 저장된 곳의 버전을 확인하면 기존 상태(v1) 외 하나가 더 추가된 게 보인다.
[root@IaC tofu-backend]# mc ls --versions repo/tofu-state/tofu-backend/terraform.tfstate
[2025-11-10 15:53:23 KST] 3.9KiB STANDARD 3d1b0e0e-2c5a-47f1-9486-67da074a8a3c v2 PUT terraform.tfstate
[2025-11-10 15:30:33 KST] 3.9KiB STANDARD null v1 PUT terraform.tfstate
이제 오픈토푸 백엔드 설정과 상태 버전 관리는 완료함
'리눅스 > 실습' 카테고리의 다른 글
| ansible로 쿠버네티스 클러스터 구성하기 (0) | 2025.11.11 |
|---|---|
| 내부 저장소 구축과 연동 - 2 (0) | 2025.11.10 |
| IaC 실습하기-3 (0) | 2025.11.10 |
| IaC 실습하기-2 (0) | 2025.11.09 |
| IaC 실습하기-1 (0) | 2025.11.09 |