Skip to content

Latest commit

ย 

History

History
761 lines (585 loc) ยท 22.9 KB

File metadata and controls

761 lines (585 loc) ยท 22.9 KB

๐Ÿ˜๏ธ RT Container Runtime - Analogi Perumahan

Memahami Container Technology melalui Analogi Rukun Tetangga (RT) dan Kompleks Perumahan

๐Ÿ“– Pendahuluan

RT Container Runtime menggunakan analogi sistem Rukun Tetangga (RT) di Indonesia untuk menjelaskan konsep-konsep kompleks dalam container technology. Analogi ini membantu developer memahami bagaimana Linux namespaces, cgroups, dan container networking bekerja dengan cara yang familiar dan mudah dipahami.

๐Ÿ˜๏ธ Konsep Dasar: Kompleks Perumahan

Host System = Kompleks Perumahan

๐Ÿ˜๏ธ Kompleks Perumahan "Linux Kernel"
โ”œโ”€โ”€ ๐Ÿข Kantor RT (Container Runtime)
โ”œโ”€โ”€ ๐Ÿ  Rumah A (Container A)
โ”œโ”€โ”€ ๐Ÿ  Rumah B (Container B)  
โ”œโ”€โ”€ ๐Ÿ  Rumah C (Container C)
โ”œโ”€โ”€ ๐Ÿ›๏ธ Kantor RW (Host Network)
โ”œโ”€โ”€ ๐Ÿ’ก Gardu Listrik (Resource Manager)
โ””โ”€โ”€ ๐Ÿšช Pos Satpam Kompleks (Network Gateway)

Penjelasan:

  • Host System adalah kompleks perumahan yang dikelola oleh RT
  • RT (Rukun Tetangga) adalah container runtime yang mengelola semua rumah
  • Setiap rumah adalah container individual dengan penghuni dan fasilitas sendiri
  • Kantor RW mengelola komunikasi dengan dunia luar (host network)
  • Gardu listrik mengatur pembagian resource (CPU, memory)
  • Pos Satpam mengontrol akses keluar-masuk kompleks (network gateway)

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Struktur Keluarga dalam Container

Process Hierarchy = Struktur Keluarga

๐Ÿ  Rumah "container-web" (Container)
โ”œโ”€โ”€ ๐Ÿ‘จ Ayah (PID 1 - busybox init)
โ”œโ”€โ”€ ๐Ÿ‘ฉ Ibu (PID 2 - shell process)
โ”œโ”€โ”€ ๐Ÿ‘ฆ Kakak (PID 3 - web server)
โ”œโ”€โ”€ ๐Ÿ‘ง Adik (PID 4 - log process)
โ””โ”€โ”€ ๐Ÿˆ Kucing (PID 5 - monitoring daemon)

Penjelasan:

  • Ayah (PID 1) adalah kepala keluarga yang selalu nomor 1 di rumahnya
  • Ibu mengelola aktivitas sehari-hari rumah (shell/command execution)
  • Anak-anak adalah aplikasi dan service yang berjalan
  • Jika Ayah pergi (PID 1 exit), seluruh keluarga harus pindah (container stops)
  • Setiap rumah punya penomoran keluarga sendiri (PID namespace)

Contoh Praktis

# Dalam container "rumah-jakarta"
./rt.sh run rumah-jakarta
$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   1320   272 ?        S    10:30   0:00 busybox init  # ๐Ÿ‘จ Ayah
root         2  0.0  0.0   1320   272 ?        S    10:30   0:00 /bin/sh       # ๐Ÿ‘ฉ Ibu
root         3  0.0  0.0   1320   272 ?        S    10:30   0:00 sleep 1000    # ๐Ÿ‘ฆ Kakak

๐Ÿ  Linux Namespaces = Fasilitas Rumah

1. PID Namespace = Sistem Penomoran Keluarga

Analogi: Setiap rumah punya sistem penomoran keluarga sendiri

๐Ÿ  Rumah A (Container A)          ๐Ÿ  Rumah B (Container B)
โ”œโ”€โ”€ ๐Ÿ‘จ Ayah (PID 1)              โ”œโ”€โ”€ ๐Ÿ‘จ Ayah (PID 1)
โ”œโ”€โ”€ ๐Ÿ‘ฉ Ibu (PID 2)               โ”œโ”€โ”€ ๐Ÿ‘ฉ Ibu (PID 2)
โ””โ”€โ”€ ๐Ÿ‘ฆ Kakak (PID 3)             โ””โ”€โ”€ ๐Ÿ‘ง Adik (PID 3)

Implementasi:

# Dalam container A
$ ps aux  # Hanya lihat keluarga sendiri
PID 1: busybox init (Ayah)
PID 2: /bin/sh (Ibu)

# Dalam container B  
$ ps aux  # Hanya lihat keluarga sendiri
PID 1: busybox init (Ayah)
PID 2: /bin/sh (Ibu)

Keuntungan:

  • Setiap container tidak bisa lihat process container lain
  • PID 1 selalu ada dan menjadi init process
  • Isolasi process tree yang sempurna

2. Network Namespace = Sistem Telepon Rumah

Analogi: Setiap rumah punya telepon internal dan bisa nelpon rumah lain

๐Ÿ“ž Sistem Telepon Kompleks
โ”œโ”€โ”€ ๐Ÿ  Rumah A (10.0.0.2) โ†โ†’ ๐Ÿ“ž Telepon Internal
โ”œโ”€โ”€ ๐Ÿ  Rumah B (10.0.0.3) โ†โ†’ ๐Ÿ“ž Telepon Internal  
โ”œโ”€โ”€ ๐Ÿ  Rumah C (10.0.0.4) โ†โ†’ ๐Ÿ“ž Telepon Internal
โ””โ”€โ”€ ๐Ÿ›๏ธ Kantor RW โ†โ†’ ๐ŸŒ Telepon Umum (Internet)

Implementasi:

# Dalam container A (rumah-jakarta)
$ ip addr show
eth0: 10.0.0.2/24  # Nomor telepon rumah

$ ping 10.0.0.3    # Nelpon rumah B (rumah-bandung)
PING 10.0.0.3: 64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.123 ms

# Dalam container B (rumah-bandung)  
$ ip addr show
eth0: 10.0.0.3/24  # Nomor telepon rumah

$ ping 10.0.0.2    # Nelpon rumah A (rumah-jakarta)
PING 10.0.0.2: 64 bytes from 10.0.0.2: seq=0 ttl=64 time=0.089 ms

Keuntungan:

  • Container bisa komunikasi langsung tanpa melalui host
  • Setiap container punya IP address sendiri
  • Network isolation yang sempurna

3. Mount Namespace = Rak Buku dan Lemari Rumah

Analogi: Setiap rumah punya rak buku dan lemari sendiri

๐Ÿ  Rumah A                        ๐Ÿ  Rumah B
โ”œโ”€โ”€ ๐Ÿ“š Rak Buku (/home)          โ”œโ”€โ”€ ๐Ÿ“š Rak Buku (/home)
โ”œโ”€โ”€ ๐Ÿ—„๏ธ Lemari Pakaian (/var)     โ”œโ”€โ”€ ๐Ÿ—„๏ธ Lemari Pakaian (/var)
โ”œโ”€โ”€ ๐Ÿฝ๏ธ Lemari Dapur (/tmp)       โ”œโ”€โ”€ ๐Ÿฝ๏ธ Lemari Dapur (/tmp)
โ””โ”€โ”€ ๐Ÿ“บ Ruang TV (/proc)          โ””โ”€โ”€ ๐Ÿ“บ Ruang TV (/proc)

Implementasi:

# Dalam container A
$ mount | grep -E "(proc|sys|tmp)"
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)

$ ls /tmp
file-container-a.txt  # File milik rumah A

# Dalam container B
$ ls /tmp  
file-container-b.txt  # File milik rumah B (berbeda!)

Keuntungan:

  • Filesystem isolation antar container
  • Setiap container punya /proc, /sys, /tmp sendiri
  • Tidak bisa akses file container lain

4. UTS Namespace = Nama Rumah (Hostname)

Analogi: Setiap rumah punya nama/alamat sendiri

๐Ÿ  "Rumah Jakarta"     ๐Ÿ  "Rumah Bandung"     ๐Ÿ  "Rumah Surabaya"
   (hostname: jakarta)    (hostname: bandung)    (hostname: surabaya)

Implementasi:

# Dalam container jakarta
$ hostname
jakarta

# Dalam container bandung
$ hostname  
bandung

# Setiap container punya identity sendiri
$ uname -n
jakarta  # Atau bandung, atau surabaya

5. IPC Namespace = Papan Tulis Keluarga

Analogi: Setiap rumah punya papan tulis untuk komunikasi internal keluarga

๐Ÿ  Rumah A                        ๐Ÿ  Rumah B
โ”œโ”€โ”€ ๐Ÿ“ Papan Tulis Keluarga      โ”œโ”€โ”€ ๐Ÿ“ Papan Tulis Keluarga
โ”‚   โ”œโ”€โ”€ "Beli susu"              โ”‚   โ”œโ”€โ”€ "Bayar listrik"
โ”‚   โ””โ”€โ”€ "Jemput anak sekolah"    โ”‚   โ””โ”€โ”€ "Servis AC"
โ””โ”€โ”€ ๐Ÿ“ฌ Kotak Pesan Internal      โ””โ”€โ”€ ๐Ÿ“ฌ Kotak Pesan Internal

Implementasi:

# Dalam container A - buat message queue
$ ipcmk -Q
Message queue id: 0

$ ipcs -q  # Lihat message queue
------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    
0x52e5218d 0          root       644        0            0           

# Dalam container B - tidak bisa lihat message queue container A
$ ipcs -q
------ Message Queues --------
# Kosong! Tidak bisa lihat papan tulis rumah lain

6. User Namespace = Identitas Keluarga

Analogi: Ayah di rumah A berbeda dengan Ayah di rumah B

๐Ÿ  Rumah A                        ๐Ÿ  Rumah B
โ”œโ”€โ”€ ๐Ÿ‘จ Ayah (UID 0 โ†’ 1000)       โ”œโ”€โ”€ ๐Ÿ‘จ Ayah (UID 0 โ†’ 2000)
โ”œโ”€โ”€ ๐Ÿ‘ฉ Ibu (UID 1 โ†’ 1001)        โ”œโ”€โ”€ ๐Ÿ‘ฉ Ibu (UID 1 โ†’ 2001)
โ””โ”€โ”€ ๐Ÿ‘ฆ Kakak (UID 2 โ†’ 1002)      โ””โ”€โ”€ ๐Ÿ‘ง Adik (UID 2 โ†’ 2002)

Implementasi:

# Dalam container A
$ id
uid=0(root) gid=0(root) groups=0(root)  # Root dalam container

# Dari host system
$ ps aux | grep container-a
1000  12345  0.0  0.0  busybox init     # Mapped ke UID 1000 di host

โšก Cgroups = Sistem Listrik dan Air

Resource Management = Pembagian Utilitas

Analogi: Setiap rumah punya kuota listrik dan air bulanan

๐Ÿ’ก Gardu Listrik Kompleks (Cgroup Manager)
โ”œโ”€โ”€ ๐Ÿ  Rumah A: 512MB RAM, 50% CPU
โ”œโ”€โ”€ ๐Ÿ  Rumah B: 256MB RAM, 25% CPU
โ”œโ”€โ”€ ๐Ÿ  Rumah C: 1GB RAM, 75% CPU
โ””โ”€โ”€ ๐Ÿ“Š Meteran Digital (Resource Monitor)

Memory Cgroup = Kuota Listrik Bulanan

Analogi: Setiap rumah punya batas pemakaian listrik

# Setup memory limit untuk rumah-jakarta (512MB)
echo "536870912" > /sys/fs/cgroup/memory/container-jakarta/memory.limit_in_bytes

# Monitor pemakaian listrik real-time
$ cat /sys/fs/cgroup/memory/container-jakarta/memory.usage_in_bytes
134217728  # Sedang pakai 128MB dari 512MB

# Jika melebihi batas
$ stress --vm 1 --vm-bytes 600M  # Coba pakai 600MB
Killed  # ๐Ÿšจ Listrik diputus karena melebihi kuota!

Monitoring seperti Tagihan Listrik:

# Cek tagihan listrik rumah
./rt.sh monitor-resources rumah-jakarta

๐Ÿ  Rumah Jakarta - Resource Usage
๐Ÿ’ก Memory: 128MB / 512MB (25% used)
โšก CPU: 15% / 50% (30% used)  
๐Ÿ“Š Status: Normal โœ…

๐Ÿ  Seperti tagihan listrik yang menunjukkan:
   - Pemakaian bulan ini: 128 kWh
   - Batas maksimal: 512 kWh  
   - Sisa kuota: 384 kWh

CPU Cgroup = Pembagian Daya Listrik

Analogi: Pembagian daya listrik yang adil antar rumah

# Setup CPU limit 50% untuk rumah-jakarta
echo "50000" > /sys/fs/cgroup/cpu/container-jakarta/cpu.cfs_quota_us
echo "100000" > /sys/fs/cgroup/cpu/container-jakarta/cpu.cfs_period_us

# Test CPU usage
$ stress --cpu 4  # Coba pakai 4 CPU core
# Tapi hanya dapat 50% dari total CPU available

# Monitor CPU usage
$ cat /sys/fs/cgroup/cpu/container-jakarta/cpuacct.usage
2500000000  # Nanoseconds CPU time used

๐Ÿ“ž Container Networking = Sistem Telepon Kompleks

veth pairs = Kabel Telepon

Analogi: Kabel telepon yang menghubungkan rumah-rumah

๐Ÿ  Rumah A (10.0.0.2)
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ž veth-a (Interface dalam rumah)
โ”‚
๐Ÿ”Œ Kabel Telepon (veth pair)
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ž veth-a-host (Interface di kantor RT)
โ”‚
๐Ÿข Kantor RT (Bridge/Switch)
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ž veth-b-host (Interface di kantor RT)  
โ”‚
๐Ÿ”Œ Kabel Telepon (veth pair)
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ž veth-b (Interface dalam rumah)
โ”‚
๐Ÿ  Rumah B (10.0.0.3)

Implementasi Network Setup

# RT membuat kabel telepon antar rumah
ip link add veth-jakarta type veth peer name veth-jakarta-host
ip link add veth-bandung type veth peer name veth-bandung-host

# Pasang telepon di setiap rumah
ip link set veth-jakarta netns container-jakarta
ip link set veth-bandung netns container-bandung

# Kasih nomor telepon
ip netns exec container-jakarta ip addr add 10.0.0.2/24 dev veth-jakarta
ip netns exec container-bandung ip addr add 10.0.0.3/24 dev veth-bandung

# Nyalakan telepon
ip netns exec container-jakarta ip link set veth-jakarta up
ip netns exec container-bandung ip link set veth-bandung up

Test Komunikasi Antar Rumah

Cara Interaktif (Tinggal di Rumah)

# Dari rumah Jakarta nelpon rumah Bandung
./rt.sh run rumah-jakarta
$ ping 10.0.0.3
PING 10.0.0.3: 64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.123 ms
# โœ… Telepon nyambung!

# Buka server di rumah Jakarta
$ nc -l -p 8080  # Buka warung di rumah (listen port 8080)

# Dari rumah Bandung, kunjungi warung
./rt.sh run rumah-bandung  
$ nc 10.0.0.2 8080  # Pergi ke warung di rumah Jakarta
# โœ… Bisa belanja di warung tetangga!

Cara Command (Kunjungan Singkat)

# Test koneksi dengan kunjungan singkat
./rt.sh run rumah-jakarta "ping -c 3 10.0.0.3"
# ๐Ÿ“ž Jakarta menelepon Bandung 3 kali

./rt.sh run rumah-bandung "ping -c 3 10.0.0.2"  
# ๐Ÿ“ž Bandung menelepon Jakarta 3 kali

# Cek nomor telepon masing-masing rumah
./rt.sh run rumah-jakarta "ip addr show eth0 | grep inet"
./rt.sh run rumah-bandung "ip addr show eth0 | grep inet"

# ๐Ÿ’ฌ Chat Antar Rumah (Ngobrol Seperti WhatsApp)

## Chat Sederhana (Kirim Pesan)
```bash
# Jakarta siap terima chat
./rt.sh run rumah-jakarta "nc -l -p 8080" &
sleep 2

# Bandung kirim pesan ke Jakarta
./rt.sh run rumah-bandung "echo 'Halo Jakarta! Apa kabar hari ini?' | nc 10.0.0.2 8080"

Chat Interaktif (Ngobrol Real-time)

# Terminal 1: Jakarta jadi host chat room
./rt.sh run rumah-jakarta "nc -l -p 8080"

# Terminal 2: Bandung join chat room
./rt.sh run rumah-bandung "nc 10.0.0.2 8080"

# Sekarang bisa ketik pesan bolak-balik seperti chat!
# Jakarta ketik: "Halo Bandung, cuaca di sana gimana?"
# Bandung ketik: "Hujan nih, di Jakarta cerah?"

๐Ÿ“ File Sharing Antar Rumah (Pakai Busybox Tools)

# Jakarta buat file untuk dibagi
./rt.sh run rumah-jakarta "echo 'Resep rendang enak dari Jakarta' > /tmp/resep.txt"

# Jakarta share file via netcat (simple file server)
./rt.sh run rumah-jakarta "nc -l -p 8080 < /tmp/resep.txt" &

# Bandung terima file dari Jakarta
./rt.sh run rumah-bandung "nc 10.0.0.2 8080 > /tmp/resep-dari-jakarta.txt"

# Bandung cek file yang diterima
./rt.sh run rumah-bandung "cat /tmp/resep-dari-jakarta.txt"

# Share multiple files dengan tar
./rt.sh run rumah-jakarta "echo 'File 1' > /tmp/file1.txt && echo 'File 2' > /tmp/file2.txt"
./rt.sh run rumah-jakarta "cd /tmp && tar -czf - file1.txt file2.txt | nc -l -p 8080" &
./rt.sh run rumah-bandung "nc 10.0.0.2 8080 | tar -xzf - -C /tmp"

# Cek hasil extract
./rt.sh run rumah-bandung "ls -la /tmp/file*.txt && cat /tmp/file1.txt"

๐ŸŽฎ Game & Aktivitas Seru Antar Rumah

# ๐ŸŽฏ Game Tebak Angka
./rt.sh run rumah-jakarta 'echo "Tebak angka 1-10!" | nc -l -p 8080' &
./rt.sh run rumah-bandung "echo '7' | nc 10.0.0.2 8080"

# ๐Ÿ“Š Sharing System Info (seperti pamer spek HP)
./rt.sh run rumah-jakarta "uname -a && free && df -h | nc -l -p 8080" &
./rt.sh run rumah-bandung "nc 10.0.0.2 8080"

# ๐Ÿ• Sync Waktu Antar Rumah
./rt.sh run rumah-jakarta "date | nc -l -p 8080" &
./rt.sh run rumah-bandung "echo 'Waktu di Bandung:' && date && echo 'Waktu di Jakarta:' && nc 10.0.0.2 8080"

# ๐Ÿ“ Kirim Log/Diary Harian
./rt.sh run rumah-jakarta "echo 'Diary Jakarta hari ini: Cuaca cerah, traffic macet' > /tmp/diary.txt"
./rt.sh run rumah-jakarta "nc -l -p 8080 < /tmp/diary.txt" &
./rt.sh run rumah-bandung "echo 'Baca diary Jakarta:' && nc 10.0.0.2 8080"

# ๐Ÿ” Remote Monitoring (cek kondisi rumah tetangga)
./rt.sh run rumah-jakarta "ps aux && echo '---' && free && echo '---' && uptime | nc -l -p 8080" &
./rt.sh run rumah-bandung "echo 'Status rumah Jakarta:' && nc 10.0.0.2 8080"

## ๐Ÿ”ง Container Lifecycle = Siklus Hidup Rumah

### 1. Create Container = Bangun Rumah Baru

```bash
./rt.sh create rumah-baru --ram=512 --cpu=50

๐Ÿ—๏ธ RT sedang membangun rumah baru...
โ”œโ”€โ”€ ๐Ÿ“‹ Daftar rumah ke RT (create metadata)
โ”œโ”€โ”€ ๐Ÿ  Bangun struktur rumah (create rootfs)  
โ”œโ”€โ”€ ๐Ÿ’ก Pasang meteran listrik (setup cgroups)
โ”œโ”€โ”€ ๐Ÿ“ž Pasang telepon (setup network namespace)
โ”œโ”€โ”€ ๐Ÿ”‘ Buat kunci rumah (setup user namespace)
โ””โ”€โ”€ โœ… Rumah siap dihuni!

2. List Containers = Daftar Rumah di Kompleks

./rt.sh list

๐Ÿ˜๏ธ Daftar Rumah di Kompleks RT
================================
๐Ÿ  rumah-jakarta    [RUNNING]  ๐Ÿ’ก 256MB/512MB  โšก 25%/50%  ๐Ÿ“ž 10.0.0.2
๐Ÿ  rumah-bandung    [STOPPED]  ๐Ÿ’ก 0MB/256MB    โšก 0%/25%   ๐Ÿ“ž 10.0.0.3  
๐Ÿ  rumah-surabaya   [RUNNING]  ๐Ÿ’ก 128MB/1GB    โšก 45%/75%  ๐Ÿ“ž 10.0.0.4

๐Ÿ“Š Total: 3 rumah, 2 berpenghuni, 1 kosong
๐Ÿ  Seperti RT yang punya data lengkap semua rumah di kompleks

3. Run Container = Masuk ke Rumah

Mode Interaktif (Tinggal di Rumah)

./rt.sh run rumah-jakarta

๐Ÿšช RT membuka pintu rumah-jakarta...
โ”œโ”€โ”€ ๏ฟฝ Cek kunci rumah (validate container)
โ”œโ”€โ”€ ๏ฟฝ Nyalakan listrik (activate cgroups)
โ”œโ”€โ”€ ๏ฟฝ Aktifkan telepon (setup network)
โ”œโ”€โ”€ ๐Ÿ‘จ Panggil kepala keluarga (start PID 1)
โ””โ”€โ”€ ๐Ÿ  Selamat datang di rumah-jakarta!

# Sekarang Anda berada dalam rumah
rumah-jakarta:~$ whoami
root  # Anda adalah kepala keluarga

rumah-jakarta:~$ hostname  
jakarta  # Ini nama rumah Anda

rumah-jakarta:~$ ip addr show
eth0: 10.0.0.2/24  # Ini nomor telepon rumah

Mode Command (Kunjungan Singkat)

# Kunjungi rumah untuk tugas tertentu
./rt.sh run rumah-jakarta "hostname && ps aux"

๐Ÿšช RT membuka pintu untuk kunjungan singkat...
โ”œโ”€โ”€ ๐Ÿ  Masuk ke rumah-jakarta
โ”œโ”€โ”€ ๐Ÿ“‹ Jalankan tugas: hostname && ps aux
โ”œโ”€โ”€ ๐Ÿ“Š Tampilkan hasil
โ””โ”€โ”€ ๐Ÿšช Keluar dari rumah

# Contoh tugas-tugas lain
./rt.sh run rumah-jakarta "ls -la /home"     # Lihat isi rumah
./rt.sh run rumah-jakarta "ping -c 3 10.0.0.3"  # Tes telepon
./rt.sh run rumah-jakarta "free -h"         # Cek pemakaian listrik

Analogi:

  • Mode Interaktif: Seperti pindah tinggal ke rumah, bisa melakukan berbagai aktivitas
  • Mode Command: Seperti berkunjung sebentar untuk tugas tertentu, lalu pulang

4. Delete Container = Robohkan Rumah

./rt.sh delete rumah-lama

๐Ÿ—๏ธ RT akan merobohkan rumah-lama...
โ”œโ”€โ”€ ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Evakuasi penghuni (stop processes)
โ”œโ”€โ”€ ๐Ÿ“ž Cabut telepon (cleanup network)
โ”œโ”€โ”€ ๐Ÿ’ก Matikan listrik (remove cgroups)  
โ”œโ”€โ”€ ๐Ÿ  Robohkan struktur (remove rootfs)
โ”œโ”€โ”€ ๐Ÿ“‹ Hapus dari daftar RT (remove metadata)
โ””โ”€โ”€ โœ… Rumah berhasil dirobohkan!

๐Ÿ  Seperti RT yang mengelola pembongkaran rumah dengan tertib

๐Ÿ” Debug dan Monitoring = Inspeksi RT

System Debug = Inspeksi Kompleks

./rt.sh debug system

๐Ÿ” RT melakukan inspeksi kompleks...
================================

๐Ÿ˜๏ธ Kondisi Kompleks:
โ”œโ”€โ”€ ๐Ÿ’พ Disk Space: 15GB / 50GB available
โ”œโ”€โ”€ ๐Ÿง  Memory: 2GB / 8GB used  
โ”œโ”€โ”€ โšก CPU Load: 1.5 / 4.0 cores
โ””โ”€โ”€ ๐ŸŒ Network: eth0 up, docker0 up

๐Ÿ  Fasilitas Kompleks:
โ”œโ”€โ”€ ๐Ÿ“ Container Directory: /tmp/containers โœ…
โ”œโ”€โ”€ ๐Ÿ“ฆ Busybox Binary: /tmp/containers/busybox โœ…
โ”œโ”€โ”€ ๐Ÿ’ก Cgroup Support: /sys/fs/cgroup โœ…
โ””โ”€โ”€ ๐Ÿ“ž Network Tools: ip, unshare, nsenter โœ…

๐Ÿ”ง Sistem RT: Semua fasilitas kompleks berfungsi normal

Container Debug = Inspeksi Rumah

Debug dengan Command Built-in

./rt.sh debug containers

๐Ÿ  RT melakukan inspeksi semua rumah...
====================================

๐Ÿ  rumah-jakarta [RUNNING]
โ”œโ”€โ”€ ๏ฟฝ PKepala Keluarga: PID 12345 (busybox)
โ”œโ”€โ”€ ๏ฟฝ Peengelola Rumah: PID 12346 (/bin/sh)
โ”œโ”€โ”€ ๐Ÿ’ก Pemakaian Listrik: 128MB / 512MB
โ”œโ”€โ”€ โšก Pemakaian Daya: 25% / 50%
โ”œโ”€โ”€ ๐Ÿ“ž Nomor Telepon: 10.0.0.2
โ”œโ”€โ”€ ๐Ÿ  Kondisi Rumah: /tmp/containers/rumah-jakarta
โ””โ”€โ”€ ๐Ÿ“Š Status: Sehat โœ…

๐Ÿ  rumah-bandung [STOPPED]  
โ”œโ”€โ”€ ๏ฟฝ  Kepala Keluarga: Tidak ada
โ”œโ”€โ”€ ๏ฟฝ NPemakaian Listrik: 0MB / 256MB
โ”œโ”€โ”€ ๏ฟฝ Noamor Telepon: 10.0.0.3 (nonaktif)
โ””โ”€โ”€ ๐Ÿ“Š Status: Kosong ๐Ÿ 

๐Ÿ”ง RT: Inspeksi selesai, 1 rumah aktif, 1 rumah kosong

Debug dengan Command Parameter (Inspeksi Manual)

# Cek proses yang berjalan di rumah
./rt.sh run rumah-jakarta "ps aux"
# ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Lihat siapa saja yang ada di rumah

# Cek pemakaian memori
./rt.sh run rumah-jakarta "free -h"
# ๐Ÿ’ก Lihat pemakaian listrik rumah

# Cek koneksi jaringan
./rt.sh run rumah-jakarta "netstat -tuln"
# ๐Ÿ“ž Lihat sambungan telepon yang aktif

# Cek sistem file
./rt.sh run rumah-jakarta "df -h"
# ๐Ÿ  Lihat kapasitas penyimpanan rumah

# Cek log sistem
./rt.sh run rumah-jakarta "dmesg | tail -10"
# ๐Ÿ“‹ Lihat catatan kejadian terakhir

# Test stress untuk cek limit
./rt.sh run rumah-jakarta "stress --vm 1 --vm-bytes 100M --timeout 10s"
# โšก Test apakah meteran listrik berfungsi

๐Ÿšจ Error Handling = Penanganan Darurat RT

Recovery System = Sistem Pemulihan Darurat

./rt.sh recover-state

๐Ÿšจ RT melakukan pemulihan darurat di kompleks...
==========================================

๐Ÿ” Memeriksa kondisi darurat:
โ”œโ”€โ”€ ๐Ÿ  Rumah rusak: rumah-error (PID mati, cgroup masih ada)
โ”œโ”€โ”€ ๐Ÿ“ž Telepon putus: veth-orphan (interface tanpa container)
โ”œโ”€โ”€ ๐Ÿ’ก Meteran rusak: cgroup-orphan (cgroup tanpa container)
โ””โ”€โ”€ ๐Ÿ—‘๏ธ Sampah berserakan: /tmp/containers/temp-* files

๐Ÿ”ง Melakukan perbaikan:
โ”œโ”€โ”€ ๐Ÿ  Membersihkan rumah rusak...
โ”œโ”€โ”€ ๐Ÿ“ž Mencabut telepon putus...  
โ”œโ”€โ”€ ๐Ÿ’ก Menghapus meteran rusak...
โ””โ”€โ”€ ๐Ÿ—‘๏ธ Membersihkan sampah...

โœ… Pemulihan darurat selesai! Kompleks kembali normal.
๐Ÿ  Seperti RT yang sigap menangani masalah kompleks

๐Ÿšช Mode Operasi Container = Cara Masuk Rumah

Mode Interaktif vs Mode Command

๐Ÿ  Mode Interaktif (Tinggal di Rumah)

./rt.sh run rumah-jakarta
# Masuk dan tinggal di rumah, bisa melakukan berbagai aktivitas

Karakteristik:

  • Shell interaktif tersedia (/bin/sh)
  • Bisa menjalankan banyak perintah berturut-turut
  • Session tetap aktif sampai exit atau Ctrl+D
  • Seperti pindah tinggal ke rumah

Contoh Penggunaan:

rumah-jakarta:~$ ps aux          # Lihat penghuni rumah
rumah-jakarta:~$ free -h         # Cek pemakaian listrik
rumah-jakarta:~$ ping 10.0.0.3   # Telepon rumah tetangga
rumah-jakarta:~$ exit            # Keluar dari rumah

๐Ÿ“‹ Mode Command (Kunjungan Singkat)

./rt.sh run rumah-jakarta "hostname && ps aux"
# Kunjungi rumah untuk tugas tertentu, lalu langsung pulang

Karakteristik:

  • Menjalankan perintah spesifik lalu keluar
  • Tidak ada shell interaktif
  • Cocok untuk automation dan scripting
  • Seperti berkunjung sebentar untuk urusan tertentu

Contoh Penggunaan:

# Single command
./rt.sh run rumah-jakarta "hostname"

# Multiple commands dengan &&
./rt.sh run rumah-jakarta "echo 'Halo' && date && whoami"

# Background process
./rt.sh run rumah-jakarta "nc -l -p 8080" &

# Conditional commands
./rt.sh run rumah-jakarta "ping -c 1 10.0.0.3 && echo 'Koneksi OK' || echo 'Koneksi Gagal'"

Kapan Menggunakan Mode Mana?

Situasi Mode Alasan
Eksplorasi dan debugging Interaktif Butuh fleksibilitas
Automation script Command Predictable dan cepat
Testing connectivity Command Single purpose
Development work Interaktif Iterative workflow
Monitoring checks Command Automated monitoring
Learning container Interaktif Hands-on exploration

๐ŸŽ“ Educational Value = Nilai Pembelajaran

Mengapa Analogi RT Efektif?

  1. Familiar Context: Semua orang Indonesia tahu sistem RT
  2. Concrete Concepts: Abstrak container jadi konkret rumah
  3. Relatable Scenarios: Situasi sehari-hari yang mudah dipahami
  4. Progressive Learning: Dari konsep sederhana ke kompleks
  5. Cultural Connection: Menggunakan konteks budaya lokal

Learning Path dengan Analogi

๐Ÿ“š Tahap 1: Konsep Dasar
๐Ÿ  Rumah = Container
๐Ÿ‘จ Ayah = PID 1  
๐Ÿ“ž Telepon = Network

๐Ÿ“š Tahap 2: Isolasi
๐Ÿ  Setiap rumah terpisah = Namespace isolation
๐Ÿ“ Papan tulis sendiri = IPC namespace
๐Ÿ“š Rak buku sendiri = Mount namespace

๐Ÿ“š Tahap 3: Resource Management  
๐Ÿ’ก Kuota listrik = Memory limit
โšก Pembagian daya = CPU limit
๐Ÿ“Š Tagihan = Resource monitoring

๐Ÿ“š Tahap 4: Networking
๐Ÿ“ž Telepon antar rumah = Container networking
๐Ÿ”Œ Kabel telepon = veth pairs
๐Ÿข Kantor RT = Bridge/Switch

๐Ÿ“š Tahap 5: Advanced Concepts
๐Ÿšจ Darurat RT = Error handling
๐Ÿ”ง Inspeksi RT = Debug system
๐Ÿ—๏ธ Bangun/roboh rumah = Container lifecycle

๐ŸŽฏ Kesimpulan

Analogi RT dan perumahan membantu developer memahami:

  • Linux Namespaces sebagai fasilitas isolasi rumah
  • Cgroups sebagai sistem utilitas (listrik, air)
  • Container Networking sebagai sistem telepon kompleks
  • Process Management sebagai struktur keluarga
  • Resource Monitoring sebagai tagihan utilitas
  • Error Handling sebagai sistem darurat RT

๐Ÿ  Dengan analogi ini, konsep container yang abstrak menjadi konkret dan mudah dipahami, seperti RT yang mengelola kompleks perumahan dengan baik dan teratur!