[K8S Deploy] ANSIBLE 기초- 실습 환경 구성

진웅·2026년 1월 17일

k8s deploy

목록 보기
9/20

Ansible 실습 환경 구성 가이드

Vagrant를 활용한 Ansible 실습 환경을 구성한다. Ubuntu와 Rocky Linux 기반의 멀티 노드 클러스터를 자동으로 배포할 수 있다.

가상 머신 스펙

전체 4대의 노드로 구성된다.

NodeOSKernelvCPUMemoryDiskNIC2 IP관리자 계정일반 계정
serverUbuntu 24.046.8.021.5GB30GB10.10.1.10root / qwe123vagrant / qwe123
tnode1Ubuntu 24.046.8.021.5GB30GB10.10.1.11root / qwe123vagrant / qwe123
tnode2Ubuntu 24.046.8.021.5GB30GB10.10.1.12root / qwe123vagrant / qwe123
tnode3Rocky Linux 95.14.021.5GB60GB10.10.1.13root / qwe123vagrant / qwe123

환경 배포 절차

작업 디렉토리를 생성하고 필요한 파일들을 다운로드한다.

mkdir ansible
cd ansible
curl -O https://raw.githubusercontent.com/gasida/vagrant-lab/refs/heads/main/ansible/Vagrantfile
curl -O https://raw.githubusercontent.com/gasida/vagrant-lab/refs/heads/main/ansible/init_cfg.sh
curl -O https://raw.githubusercontent.com/gasida/vagrant-lab/refs/heads/main/ansible/init_cfg2.sh
vagrant up

##
...
==> tnode3: Configuring and enabling network interfaces...
==> tnode3: Running provisioner: shell...
    tnode3: Running: /var/folders/v1/7xpv7bb566x_14r5wy8phf2c0000gn/T/vagrant-shell20260118-1659-ipsz6s.sh
    tnode3: >>>> Initial Config Start <<<<
    tnode3: [TASK 1] Setting Profile & Change Timezone
    tnode3: [TASK 2] Disable firewalld and selinux
    tnode3: [TASK 5] Install Packages
    tnode3: [TASK 4] Config account & ssh config
    tnode3: [TASK 5] Setting Local DNS Using Hosts file
    tnode3: >>>> Initial Config End <<<<
riverjin@gangjin-ung-ui-Macmini ansible % vagrant status
Current machine states:

server                    running (virtualbox)
tnode1                    running (virtualbox)
tnode2                    running (virtualbox)
tnode3                    running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

Vagrantfile 구성

전체 노드 구성을 정의한다. Ubuntu 기반 Server 노드 1대, Test 노드 2대, Rocky Linux 기반 Test 노드 1대로 구성된다.

# Variables
N = 2
BOX_IMAGE = "bento/ubuntu-24.04"
BOX_VERSION = "202510.26.0"

Vagrant.configure("2") do |config|
  # Server Node : Ubuntu
  config.vm.define "server" do |subconfig|
    subconfig.vm.box = BOX_IMAGE
    subconfig.vm.box_version = BOX_VERSION
    subconfig.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--groups", "/Ansible-Lab"]
      vb.name = "server"
      vb.cpus = 2
      vb.memory = 1536
      vb.linked_clone = true
    end
    subconfig.vm.host_name = "server"
    subconfig.vm.network "private_network", ip: "10.10.1.10"
    subconfig.vm.network "forwarded_port", guest: 22, host: 60000, auto_correct: true, id: "ssh"
    subconfig.vm.synced_folder "./", "/vagrant", disabled: true
    subconfig.vm.provision "shell", path: "init_cfg.sh"
  end

  # Test Node : Ubuntu
  (1..N).each do |i|
    config.vm.define "tnode#{i}" do |subconfig|
      subconfig.vm.box = BOX_IMAGE
      subconfig.vm.box_version = BOX_VERSION
      subconfig.vm.provider "virtualbox" do |vb|
        vb.customize ["modifyvm", :id, "--groups", "/Ansible-Lab"]
        vb.name = "tnode#{i}"
        vb.cpus = 2
        vb.memory = 1536
        vb.linked_clone = true
      end
      subconfig.vm.host_name = "tnode#{i}"
      subconfig.vm.network "private_network", ip: "10.10.1.1#{i}"
      subconfig.vm.network "forwarded_port", guest: 22, host: "6000#{i}", auto_correct: true, id: "ssh"
      subconfig.vm.synced_folder "./", "/vagrant", disabled: true
      subconfig.vm.provision "shell", path: "init_cfg.sh", args: [ N ]
    end
  end

  # Test Node : Rocky Linux
  config.vm.define "tnode3" do |subconfig|
    subconfig.vm.box = "bento/rockylinux-9"
    subconfig.vm.box_version = "202510.26.0"
    subconfig.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--groups", "/Ansible-Lab"]
      vb.name = "tnode3"
      vb.cpus = 2
      vb.memory = 1536
      vb.linked_clone = true
    end
    subconfig.vm.host_name = "tnode3"
    subconfig.vm.network "private_network", ip: "10.10.1.13"
    subconfig.vm.network "forwarded_port", guest: 22, host: 60003, auto_correct: true, id: "ssh"
    subconfig.vm.synced_folder "./", "/vagrant", disabled: true
    subconfig.vm.provision "shell", path: "init_cfg2.sh"
  end
end

Ubuntu 초기화 스크립트 (init_cfg.sh)

Ubuntu 노드의 기본 설정을 자동화한다.

#!/usr/bin/env bash

echo ">>>> Initial Config Start <<<<"

echo "[TASK 1] Setting Profile & Change Timezone"
echo 'alias vi=vim' >> /etc/profile
echo "sudo su -" >> /home/vagrant/.bashrc
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

echo "[TASK 2] Disable AppArmor"
systemctl stop ufw && systemctl disable ufw >/dev/null 2>&1
systemctl stop apparmor && systemctl disable apparmor >/dev/null 2>&1

echo "[TASK 3] Install Packages"
apt update -qq >/dev/null 2>&1
apt-get install tree sshpass unzip -y -qq >/dev/null 2>&1

echo "[TASK 4] Config account & ssh config"
echo 'vagrant:qwe123' | chpasswd
echo 'root:qwe123' | chpasswd
sed -i "s/^#PasswordAuthentication yes/PasswordAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config
systemctl restart ssh

echo "[TASK 5] Setting Local DNS Using Hosts file"
sed -i '/^127\.0\.\(1\|2\)\.1/d' /etc/hosts
cat << EOF >> /etc/hosts
10.10.1.10 server
10.10.1.11 tnode1
10.10.1.12 tnode2
10.10.1.13 tnode3
EOF

echo ">>>> Initial Config End <<<<"

Rocky Linux 초기화 스크립트 (init_cfg2.sh)

Rocky Linux 노드의 기본 설정을 자동화한다.

#!/usr/bin/env bash

echo ">>>> Initial Config Start <<<<"

echo "[TASK 1] Setting Profile & Change Timezone"
echo 'alias vi=vim' >> /etc/profile
echo "sudo su -" >> /home/vagrant/.bashrc
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

echo "[TASK 2] Disable firewalld and selinux"
systemctl stop firewalld && systemctl disable firewalld >/dev/null 2>&1
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

echo "[TASK 3] Install Packages"
dnf install -y yum sshpass jq git >/dev/null 2>&1

echo "[TASK 4] Config account & ssh config"
echo 'vagrant:qwe123' | chpasswd
echo 'root:qwe123' | chpasswd
sed -i "s/^#PasswordAuthentication yes/PasswordAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config
systemctl restart sshd

echo "[TASK 5] Setting Local DNS Using Hosts file"
sed -i '/^127\.0\.\(1\|2\)\.1/d' /etc/hosts
cat << EOF >> /etc/hosts
10.10.1.10 server
10.10.1.11 tnode1
10.10.1.12 tnode2
10.10.1.13 tnode3
EOF

echo ">>>> Initial Config End <<<<"

기본 정보 확인

Server 노드에 접속하여 환경을 확인한다.

vagrant ssh server

시스템 기본 정보를 체크한다.

# 계정 정보 확인
whoami
##실행 결과
root

id
##실행 결과
uid=0(root) gid=0(root) groups=0(root)

# Kernel, CPU, Mem, Disk, NIC 확인
uname -r
##실행 결과
6.8.0-86-generic
hostnamectl
##실행 결과
 Static hostname: server
       Icon name: computer
      Machine ID: 4a2a90be10e442b29f0b95311bb71555
         Boot ID: 1ed5eb212ed5438b93d0a68c92651a1f
Operating System: Ubuntu 24.04.3 LTS              
          Kernel: Linux 6.8.0-86-generic
    Architecture: arm64

htop
##실행 결과
free -h
lsblk
df -hT /
ip -c addr

# /etc/hosts 확인
cat /etc/hosts
##실행 결과
..
10.10.1.10 server
10.10.1.11 tnode1
10.10.1.12 tnode2
10.10.1.13 tnode3


# 노드간 통신 확인
for i in {1..3}; do ping -c 1 tnode$i; done

##실행 결과

...
64 bytes from tnode1 (10.10.1.11): icmp_seq=1 ttl=64 time=1.12 ms

--- tnode1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.123/1.123/1.123/0.000 ms
PING tnode2 (10.10.1.12) 56(84) bytes of data.
64 bytes from tnode2 (10.10.1.12): icmp_seq=1 ttl=64 time=0.880 ms

--- tnode2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.880/0.880/0.880/0.000 ms
PING tnode3 (10.10.1.13) 56(84) bytes of data.
64 bytes from tnode3 (10.10.1.13): icmp_seq=1 ttl=64 time=0.765 ms

--- tnode3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.765/0.765/0.765/0.000 ms

모든 노드가 정상적으로 통신되면 Ansible 실습 환경 구성이 완료된다.

profile
bytebliss

0개의 댓글