README.md에 Packer를 사용한 이미지 배포 섹션 추가 및 admin-openrc.sample 파일 생성, packer-openstack-ubuntu.json의 이미지 이름 및 가시성 수정, pbr-script-cloud-init.yaml의 스크립트 실행 명령 수정

This commit is contained in:
2025-06-04 19:45:13 +09:00
parent 4d39fb678d
commit 045255e495
4 changed files with 79 additions and 9 deletions

View File

@@ -33,4 +33,62 @@ ip rule 을 확인하여 정책 기반 라우팅이 설정되었는지 확인할
```bash ```bash
ip rule ls ip rule ls
``` ```
## packer 를 사용하여 이미지 배포
openstack 에 자동으로 PBR 시스템을 구성하는 packer template 을 제공합니다.
### Packer 설치
https://developer.hashicorp.com/packer/tutorials/docker-get-started/get-started-install-cli
### Packer OpenStack plugin 설치
openstack 에서 사용할 수 있게 하려면 Packer OpenStack 플러그인을 설치해야 합니다. 아래 명령어를 사용하여 설치할 수 있습니다.
```bash
packer plugins install github.com/hashicorp/openstack
```
### Packer OpenStack 템플릿 설정
packer 를 사용하기 전에 openrc를 설정해야합니다
```bash
vi admin-openrc
```
설정 파일 내용은 아래 내용들을 채워야합니다.
```bash
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=$OS_PROJECT_NAME
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASSWORD
export OS_AUTH_URL=http://OPENSTACK_KEYSTONE_HOST/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_SOURCE_IMAGE_ID=원본_이미지_ID
export OS_NETWORK_NAME=이미지_빌드에_사용할_네트워크_ID
export OS_FLOATING_IP_POOL=플로팅_IP_풀_이름
```
위 환경 변수들은 실제 환경에 맞게 수정해야 합니다. 예를 들어, `ADMIN_PASSWORD`는 OpenStack 관리자의 비밀번호로 설정해야 하며, `OPENSTACK_KEYSTONE_HOST`는 OpenStack Keystone 서비스의 호스트 주소로 설정해야 합니다.
```bash
source admin-openrc
```
packer 를 실행할 수 있는지 확인합니다.
```bash
packer validate packer-openstack-ubuntu.json
```
### Packer OpenStack 템플릿 실행
```bash
packer build packer-openstack-ubuntu.json
```

11
admin-openrc.sample Normal file
View File

@@ -0,0 +1,11 @@
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=$OS_PROJECT_NAME
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASSWORD
export OS_AUTH_URL=http://OPENSTACK_KEYSTONE_HOST/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_SOURCE_IMAGE_ID=원본_이미지_ID
export OS_NETWORK_NAME=이미지_빌드에_사용할_네트워크_ID
export OS_FLOATING_IP_POOL=플로팅_IP_풀_이름

View File

@@ -9,7 +9,7 @@
"source_image_id": "{{env `OS_SOURCE_IMAGE_ID`}}", "source_image_id": "{{env `OS_SOURCE_IMAGE_ID`}}",
"flavor_name": "cpu.2c_2g", "flavor_name": "cpu.2c_2g",
"network_name": "{{env `OS_NETWORK_NAME`}}", "network_name": "{{env `OS_NETWORK_NAME`}}",
"image_name": "ubuntu 22.04-{{timestamp}} server", "image_name": "ubuntu 24.04 server-{{timestamp}}",
"floating_ip_pool": "{{env `OS_FLOATING_IP_POOL`}}", "floating_ip_pool": "{{env `OS_FLOATING_IP_POOL`}}",
"ssh_username": "ubuntu" "ssh_username": "ubuntu"
}, },
@@ -36,6 +36,7 @@
"use_floating_ip": true, "use_floating_ip": true,
"ssh_timeout": "10m", "ssh_timeout": "10m",
"image_disk_format": "raw", "image_disk_format": "raw",
"image_visibility": "public",
"use_blockstorage_volume": true "use_blockstorage_volume": true
} }
], ],

View File

@@ -2,11 +2,11 @@
write_files: write_files:
- path: /tmp/pbr-script-cloud-init.sh - path: /tmp/pbr-script-cloud-init.sh
permissions: '0755' permissions: "0755"
owner: root:root owner: root:root
content: | content: |
#!/bin/bash #!/bin/bash
# GitLab 스크립트 URL (공개 저장소 또는 접근 가능한 URL) # GitLab 스크립트 URL (공개 저장소 또는 접근 가능한 URL)
# 예시: GitLab Pages, Raw 파일 URL 등 # 예시: GitLab Pages, Raw 파일 URL 등
# private repository인 경우 인증 관련 부분을 추가해야 합니다. (아래 설명) # private repository인 경우 인증 관련 부분을 추가해야 합니다. (아래 설명)
@@ -15,7 +15,7 @@ write_files:
# 스크립트 저장될 디렉토리 생성 (필요하다면) # 스크립트 저장될 디렉토리 생성 (필요하다면)
mkdir -p $(dirname "${DEST_PATH}") mkdir -p $(dirname "${DEST_PATH}")
echo "Downloading script from ${SCRIPT_URL}..." echo "Downloading script from ${SCRIPT_URL}..."
# wget 또는 curl 사용 # wget 또는 curl 사용
# wget이 일반적으로 더 많이 사용됨 # wget이 일반적으로 더 많이 사용됨
@@ -29,17 +29,17 @@ write_files:
echo "Error: Neither wget nor curl found. Cannot download script." echo "Error: Neither wget nor curl found. Cannot download script."
exit 1 exit 1
fi fi
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "Script downloaded successfully to ${DEST_PATH}. Executing..." echo "Script downloaded successfully to ${DEST_PATH}. Executing..."
chmod +x "${DEST_PATH}" # 실행 권한 부여 chmod +x "${DEST_PATH}" # 실행 권한 부여
"${DEST_PATH}" install # 스크립트 실행 "${DEST_PATH}" setup --force # 스크립트 실행
else else
echo "Error: Failed to download script from ${SCRIPT_URL}." echo "Error: Failed to download script from ${SCRIPT_URL}."
exit 1 exit 1
fi fi
echo "Script execution finished." echo "Script execution finished."
runcmd: runcmd:
- /tmp/pbr-script-cloud-init.sh - /tmp/pbr-script-cloud-init.sh