์์ํ๋ฉฐ
๊ฐ์ธ ์ฅ๋น์์ 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 |
---|
๋๊ธ