리눅스/실습

내부 저장소 구축과 연동 - 1

dbswjdahr 2025. 11. 10. 16:04

이제 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.

그리고 연결한 저장소에 백엔드로 쓰일 버킷을 생성해준다. 생성해주고 등록된 저장소를 보면 빈 버킷이 생김

mc로 원격 버킷 생성 성공함

[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