์์ํ๋ฉฐ
๊ฐ์ธ ์ฅ๋น์์ Proxmox ํด๋ฌ์คํฐ๋ฅผ ์ด์ ํ๊ณ ์๋ค.
์ฒ์์๋ VM ๋ง๋ค์ด์ง๋๊ฒ์ ๊ฐ์ฌ ํ๋๋ฐ, ์ฌ๋์ด ์ฐธ ๊ฐ์ฌํ๋ค.

์ ์  ์ฐ๋ถํฌ ์ค์น ํ๋๊ฒ ๊ท์ฐฎ์์ง๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ง์น AWS Console์์ ๋ธ๊น ํ๊ณ ๋ง๋ค์์๋๋ก ์ฒ์์๋ ์ ํ ๋ VM์ ํด๋ก ํด์ ์ผ๋ค.
๊ทผ๋ฐ, id ์ถฉ๋, DHCP ์คํจ๋ฑ ๋ ์ฌ๋ ๊ท์ฐฎ๊ฒ ํ๋ ์ผ๋ค์ด ๋์ด๋๋ค.
์ด๋์ ๋ ์ฐพ์๋ณด๋ ์ค ์ง์ง AWS์์ `cloud-init` ์ด๋ผ๋ ๋ฐฉ์์ผ๋ก ๋ธ๊น ํ๊ณ ์ค์น ํ๋ค๊ณ ํ๊ธธ๋ ๊ทธ ๋ด์ฉ์ ์ค๋ ์ ๋ฆฌ ํด๋ณด๋ ค๊ณ ํ๋ค.
1๏ธโฃ Ubuntu Cloud Image ๋ค์ด๋ก๋ ๋ฐ ๋์คํฌ ํฌ๊ธฐ ์กฐ์ 
๋จผ์  ์ต์ Jammy(22.04) ์ด๋ฏธ์ง ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ , ๋์คํฌ ํฌ๊ธฐ๋ฅผ ํ์ฅํฉ๋๋ค.
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
qemu-img resize jammy-server-cloudimg-amd64.img 50G- Ubuntu ๊ณต์ Cloud Image๋ cloud-init์ด ์ด๋ฏธ ๋ด์ฅ๋์ด ์์ด, ์ด๊ธฐ
 ์ค์ ์ ์๋ํํ๊ธฐ์ ์ ํฉํฉ๋๋ค.\
- ๊ธฐ๋ณธ ํฌ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก qemu-img resize๋ช ๋ น์ผ๋ก 50GB๋ก ํ์ฅํฉ๋๋ค.
2๏ธโฃ Proxmox VM ์์ฑ
qm create 99001 --name=ubuntu-22-04 --memory=2048 --net0 virtio,bridge=vmbr1- VM ID: 99001
- ์ด๋ฆ: ubuntu-22-04
- ๋ฉ๋ชจ๋ฆฌ: 2GB
- ๋คํธ์ํฌ: VirtIO + ๋ธ๋ฆฟ์ง(vmbr1)
๋คํธ์ํฌ ๋ธ๋ฆฌ์ง๋ ํ๊ฒฝ์ ๋ง๊ฒ
vmbr0๋๋vmbr1๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํฉ๋๋ค.
3๏ธโฃ Cloud Image๋ฅผ VM ๋์คํฌ๋ก ๋ฑ๋ก
qm set 99001 --virtio0 iSCSI-2T:0,import-from=/mnt/pve/NFS-AN/template/iso/jammy-server-cloudimg-amd64.img- virtio0๋์คํฌ๋ก ์ฐ๊ฒฐ\
- import-from์ต์ ์ ์ด์ฉํด ๊ธฐ์กด Cloud Image๋ฅผ ์ง์ ์คํ ๋ฆฌ์ง(- iSCSI-2T)๋ก ์ง์  ๊ฐ์ ธ์ต๋๋ค.\
- import ๊ณผ์ ์์ ์๋์ผ๋ก QCOW2 → RAW ๋ณํ์ด ์ด๋ค์ง๋๋ค.
4๏ธโฃ Cloud-Init ๋๋ผ์ด๋ธ ์ถ๊ฐ
qm set 99001 --ide2 iSCSI-2T:cloudinit- Cloud-Init ์ค์  ๋๋ผ์ด๋ธ๋ฅผ ์ถ๊ฐํ์ฌ, ์ด๊ธฐ ๋ถํ ์ ์ฌ์ฉ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ ํ ์ ์์ต๋๋ค.\
- ์ฃผ๋ก SSH ํค, ํธ์คํธ๋ช , ๋คํธ์ํฌ ์ค์  ๋ฑ์ ์๋ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
5๏ธโฃ ๋ถํ ๋ฐ ์ฝ์ ์ค์ 
qm set 99001 --boot order=virtio0
qm set 99001 --serial0 socket --vga serial0- ๋ถํ
 ์์๋ฅผ virtio0๋ก ์ค์ \
- serial0์ฝ์์ ํตํด ํ ์คํธ ๊ธฐ๋ฐ ํฐ๋ฏธ๋ ์ ์์ด ๊ฐ๋ฅํ๋๋ก
 ์ค์ ํฉ๋๋ค.
 →- qm terminal 99001๋ก ์ฝ์ ์ ๊ทผ ๊ฐ๋ฅ
6๏ธโฃ Cloud-Init ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ ์ง์ 
qm set 99001 --cicustom "user=NFS-GS:snippets/ubuntu-init.yaml"- ์ฌ์ฉ์ ์ ์ Cloud-Init YAML์ ์ง์ ํฉ๋๋ค.\
- snippets/ubuntu-init.yamlํ์ผ์๋ ์ฌ์ฉ์, ํจํค์ง, SSH ์ค์  ๋ฑ์
 ํฌํจํ ์ ์์ต๋๋ค.
์์ (ubuntu-init.yaml):
#cloud-config
package_update: true
package_upgrade: true
timezone: Asia/Seoul
packages:
  - qemu-guest-agent
  - curl
  - ca-certificates
  - sudo
users:
  - default
  - name: yangs
    gecos: Yangs Admin
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    groups: [sudo, docker]
    lock_passwd: false
    ssh_authorized_keys:
      - "ssh-rsa ..."
runcmd:
  - |
    echo "=== ํ์์กด ์ค์  (Asia/Seoul) ==="
    timedatectl set-timezone Asia/Seoul
    echo "ํ์ฌ ํ์์กด: $(timedatectl show --property=Timezone --value)"
  - |
    echo "=== Docker ์ค์น ์ค ==="
    curl -fsSL https://get.docker.com -o /tmp/get-docker.sh
    chmod +x /tmp/get-docker.sh
    sh /tmp/get-docker.sh
  - |
    echo "=== Docker Compose ์ค์น ์ค ==="
    curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" \
      -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
  - |
    echo "=== Docker ์๋น์ค ์ค์ : ์๋ ์์ ๋ฐ ์ฌ์์ ์ ์ฑ
 ==="
    systemctl enable docker
    mkdir -p /etc/docker
    echo '{' > /etc/docker/daemon.json
    echo '  "log-driver": "json-file",' >> /etc/docker/daemon.json
    echo '  "log-opts": {' >> /etc/docker/daemon.json
    echo '    "max-size": "50m",' >> /etc/docker/daemon.json
    echo '    "max-file": "3"' >> /etc/docker/daemon.json
    echo '  }' >> /etc/docker/daemon.json
    echo '}' >> /etc/docker/daemon.json
    systemctl daemon-reload
    systemctl restart docker
    sudo usermod -aG docker yangs || true
    echo "=== Docker ์ค์  ์๋ฃ ==="
  - |
    echo "=== QEMU Guest Agent ํ์ฑํ ==="
    systemctl enable qemu-guest-agent
    systemctl start qemu-guest-agent
  - |
    echo "=== Prometheus Node Exporter ์ปจํ
์ด๋ ์์ฑ ==="
    sudo docker run --name=node-exporter \
      --restart=always \
      -d \
      --net="host" \
      --pid="host" \
      -v "/:/host:ro,rslave" \
      quay.io/prometheus/node-exporter:latest \
      --path.rootfs=/host || true
    echo "=== Node Exporter ์คํ ํ์ธ ==="
    sudo docker ps | grep node-exporter || echo "Node Exporter ์ปจํ
์ด๋ ์์ฑ ์๋ฃ"
  - |
    echo "=== Ubuntu Clone ์ด๊ธฐํ ์์ ==="
    set -e
    echo "[1/6] machine-id ์ด๊ธฐํ ์ค..."
    rm -f /etc/machine-id
    dbus-uuidgen --ensure=/etc/machine-id
    systemd-machine-id-setup
    echo "[2/6] SSH ํธ์คํธ ํค ์ด๊ธฐํ ์ค..."
    rm -f /etc/ssh/ssh_host_*
    dpkg-reconfigure -f noninteractive openssh-server
    echo "[4/6] netplan / udev ๋คํธ์ํฌ ์บ์ ์ด๊ธฐํ ์ค..."
    rm -f /etc/udev/rules.d/70-persistent-net.rules
    rm -f /etc/netplan/*.bak
    echo "[5/6] ํธ์คํธ๋ค์ ์ด๊ธฐํ ์ค..."
    new_hostname="ubuntu-$(openssl rand -hex 3)"
    hostnamectl set-hostname "$new_hostname"
    echo "์ ํธ์คํธ๋ช
: $new_hostname"
    echo "[6/6] ๋ก๊ทธ ๋ฐ ์บ์ ์ ๋ฆฌ ์ค..."
    rm -rf /var/log/*
    rm -rf /tmp/*
    rm -rf /var/tmp/*
    echo "=== ์ด๊ธฐํ ์๋ฃ ==="
    echo "์ด์  'sudo reboot'์ผ๋ก ์ฌ๋ถํ
 ํด์ฃผ์ธ์."
power_state:
  mode: reboot
  timeout: 30
  message: "Ubuntu ์ด๊ธฐํ ์๋ฃ ํ ์๋ ์ฌ๋ถํ
ํฉ๋๋ค."7๏ธโฃ ํ ํ๋ฆฟ์ผ๋ก ๋ณํ
qm template 99001- ์ค์  ์๋ฃ๋ VM์ ํ ํ๋ฆฟ์ผ๋ก ๋ณํํฉ๋๋ค.\
- ์ดํ qm clone๋ช ๋ น์ ํตํด ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
'๐จโ๐ปDevOps > ์๋ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| "๊ด๊ณ ์ ๋์ค๋ ์๋ฆฌ ์๋๊ฒ ํด๋ผ~" ์น ๊ด์  ์์คํ  ๊ฐ๋ฐ๊ธฐ (1) | 2020.04.25 | 
|---|
 
										
									
๋๊ธ