๐ŸŒฑ ์ธํ”„๋Ÿฐ/โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ)

(2) ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฌด๊ฒŒ๊ฐ ์žˆ๊ฒŒ ์„ค์น˜ํ•˜๊ธฐ

mallin 2025. 5. 28. 17:00

โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ) - Spring 1, 2 ์„ ๋“ฃ๊ณ  ์ž‘์„ฑํ•˜๋Š” ๋ณต์Šต ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

 

1. ๊ฐ•์˜์—์„œ ๋‹ค๋ฃจ๋Š” ์ „์ฒด ํ™˜๊ฒฝ

์ถœ์ฒ˜URL : https://inf.run/k7mF

CI / CD ํ™˜๊ฒฝ ์ธํ”„๋ผ ํ™˜๊ฒฝ
  • ๋‚ด PC ์— VirtualBox ๋ฅผ ์„ค์น˜ํ•˜๊ณ , VM(๊ฐ€์ƒ๋จธ์‹ )์„ ๋„์šด๋‹ค
  • Guest OS ๋กœ Rocky Linux ๊ฐ€ ์˜ฌ๋ผ๊ฐ
  • ๋นŒ๋“œ/๋ฐฐํฌ ๋„๊ตฌ : Jenkins
  • ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ : docker
  • ํ†ต์ƒ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ
  • VM ์„ ๋„์›Œ์„œ Rocky Linux
  • ์ด ์œ„์— k8s ์™€ containerd ๋ฅผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์„ค์น˜
  • dev / qa / prod ๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๋‹ค.

 

โ‰๏ธ VM (๊ฐ€์ƒ๋จธ์‹ ) : ๋ฌผ๋ฆฌ์ ์ธ ์ปดํ“จํ„ฐ ์•ˆ์—์„œ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋งŒ๋“  ๊ฐ€์ƒ์˜ ์ปดํ“จํ„ฐ, ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ ์•ˆ์—์„œ ๋˜ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

๋ฐฐํฌ ํ๋ฆ„

  1. IntelliJ ์—์„œ ์ฝ”๋“œ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•˜๊ณ  ์ปค๋ฐ‹ → GitHub ๋กœ ์ฝ”๋“œ ํ†ตํ•ฉ
  2. Jenkins ๋นŒ๋“œ
    1. Jenkins ๋Š” GitHub ์—์„œ ์†Œ์Šค๋ฅผ ๋‹ค์šด
    2. ์—ฌ๊ธฐ์—๋„ Gradle ์ด ์žˆ์–ด์„œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‹ค์šด
    3. JAR ํŒŒ์ผ ์ƒ์„ฑ
    4. ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ
      1. JAR ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ฌ OpenJDK ์ด๋ฏธ์ง€๋ฅผ DockerHub ์—์„œ ๊ฐ€์ ธ์˜ด
      2. ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ : ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ (์•ฑ์„ ๋„์šฐ๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ํ™˜๊ฒฝ) ์œ„์— JAR ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ
      3. MyApp ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฏธ์ง€๋กœ ์ƒ์„ฑ
      4. 3๋ฒˆ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‹ค์‹œ DockerHub ๋กœ ์˜ฌ๋ฆฐ๋‹ค
  3. ๋ฐฐํฌ
    1. k8s ์— Pod ์ƒ์„ฑ ๋ช…๋ น
    2. k8s ๋Š” Pod ๋‚ด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ฃผ์†Œ๋กœ DockerHub์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด
    3. containerd ํ•œํ…Œ ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ์š”์ฒญ

 

2. ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ถœ์ฒ˜URL : https://inf.run/k7mF

  1. VirtualBox ์„ค์น˜ (7.0.8)
  2. Vagrant ์„ค์น˜ (2.3.4)
  3. Vagrant ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ (→ ์ธํ”„๋ผ ํ™˜๊ฒฝ ์„ค์น˜ ๋ชจ๋‘ ๋)
  4. >> (k8s ์‹คํ–‰ ํ™•์ธ ์ž‘์—…) ์ ‘์† ํˆด ์„ค์น˜
  5. ์›๊ฒฉ ์ ‘์†
  6. Pod ์กฐํšŒ ๋ช…๋ น์œผ๋กœ ์ƒํƒœ ํ™•์ธ
  7. Dashboard ์ ‘์†

 

3. ๋ฌด๊ฒŒ๊ฐ ์žˆ๊ฒŒ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋‚ด PC ์— VirtualBox ๋ž‘ Vagrant ๋ฅผ ์„ค์น˜ํ•œ ์ƒํƒœ

Virtualbox ๋กœ Rocky Linux ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ

Vagrant.configure("2") do |config|
   
  config.vm.box = "rockylinux/8"    
  config.vm.provision :shell, privileged: true, inline: $default_script

  config.vm.define "master-node“     do |master|
      master.vm.hostname = "k8s-master"
      master.vm.network "private_network",      ip: "192.168.56.30"
      master.vm.provider :virtualbox do |vb|
          vb.memory = 4096
          vb.cpus = 4
          vb.customize ["modifyvm", :id, "--firmware", "efi"]
      end
      master.vm.provision :shell, privileged: true, inline: $master_script
  end
end

$default_script = <<-SHELL  
    # Node๋ณ„ ๊ธฐ๋ณธ ์„ค์น˜ ๋ช…๋ น์–ด
SHELL

$ master_script = <<-SHELL    
    # Master Node ์ „์šฉ ์„ค์น˜ ๋ช…๋ น์–ด
SHELL
  • config.vm.box = "rockylinux/8" : Rocky Linux ๋ฅผ 8 ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ํ•ด๋ผ
  • config.vm.define "master-node“ : VM ์— ์ด๋ฆ„์„ ๋ถ™์—ฌ์ค€๋‹ค, VirtualBox UI ์ƒ์œผ๋กœ ๋ดค์„ ๋•Œ ๋ณด์ด๋Š” ์ด๋ฆ„
  • master.vm.hostname = "k8s-master" : Hostname ์„ ์ง€์ •, ์›๊ฒฉ ์ ‘์†์œผ๋กœ Linux ์— ๋“ค์–ด๊ฐ”์„ ๋•Œ ๋‚˜์˜ค๋Š” ํ˜ธ์ŠคํŠธ ์ด๋ฆ„
  • master.vm.network "private_network" : VirtualBox ์— ๋‚ด PC์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ๋ง (Host-Only Network)
  • ip: "192.168.56.30" : ๋‚ด ๋ฆฌ๋ˆ…์Šค์— ํ• ๋‹นํ•  IP
  • NAT ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ์ง€ ์•Š์•„๋„ Vargrant ๊ฐ€ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„คํŠธ์›Œํฌ (IP ๋„ ์•Œ์•„์„œ ํ• ๋‹น)
    • ๋‚ด VM์„ ์™ธ๋ถ€ ์ธํ„ฐ๋„ท์ด๋ž‘ ์—ฐ๊ฒฐ ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• 
    • K8s ์—์„œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์„ ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค
  • vb.memory = 4096 , vb.cpus = 4 : ๋ฉ”๋ชจ๋ฆฌ๋Š” 4๊ธฐ๊ฐ€, CPU ๋Š” 4์ฝ”์–ด
    • VM ์— ์ž์›์ด ํ• ๋‹น๋œ๋‹ค
  • default_script ๊ฐ€ ์‹คํ–‰๋˜๊ณ  master_script ๊ฐ€ ์‹คํ–‰

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์น˜ (๋ชจ๋“  node)

[1] rocky linux ๊ธฐ๋ณธ ์„ค์ • : ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ, ํƒ€์ž„์กด ์„ค์ •

[2] kubeadm ์„ค์น˜ ์ „ ์‚ฌ์ „์ž‘์—… : ๋ฐฉํ™”๋ฒฝ ํ•ด์ œ, ์Šค์™‘ ๋น„ํ™œ์„ฑํ™”

[3] ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์„ค์น˜

  1. ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์„ค์น˜ ์ „ ์‚ฌ์ „์ž‘์—… : iptables ์„ธํŒ…
    (→ Linux OS ์— ํ• ๋‹น๋œ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ Pod Network ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋„๋ก iptables ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์„ค์ •)
  2. ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ (containerd ์„ค์น˜)
    1. containerd ํŒจํ‚ค์ง€ ์„ค์น˜ (option2)
      1. docker engine ์„ค์น˜ : repo ์„ค์ •, containerd ์„ค์น˜
  3. ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ : cri ํ™œ์„ฑํ™”

[4] kubeadm ์„ค์น˜ : repo ์„ค์ •, SELinux ์„ค์ •, kubelet / kubeadm / kubectl ํŒจํ‚ค์ง€ ์„ค์ •

 

 

Master node ์„ธํŒ…

[5] kubeadm ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

  1. ํด๋Ÿฌ์Šคํ„ฐ ์ดˆ๊ธฐํ™”
  2. kubectl ์‚ฌ์šฉ ์„ค์ •
  3. CNI Plugin ์„ค์ • (calico)
    CNI : ์ปจํ…Œ์ด๋„ˆ๋“ค ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ๋„คํŠธ์›Œํฌ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค
  4. Master ์— Pod ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •
    ์ผ๋ฐ˜์ ์œผ๋กœ Master ์— ์œ ์ €๊ฐ€ ๋งŒ๋“  Pod ๋Š” ์˜ฌ๋ฆฌ์ง€ ์•Š์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” Master ๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— App1 ์ด๋ž‘ 2๊ฐ€ ๋ณ„๋‹ค๋ฅธ ์„ค์ •์„ ์•ˆํ•ด๋„ Pod ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

[6] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŽธ์˜ ๊ธฐ๋Šฅ ์„ค์น˜

  1. kubectl ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ
    kubectl d ๊นŒ์ง€๋งŒ ์น˜๊ณ  tab ์„ ๋ˆ„๋ฅด๋ฉด d ๋กœ ์‹œ์ž‘๋˜๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ์กฐํšŒ๋˜๊ณ  ์ž๋™์™„์„ฑ ๋˜๋„๋ก
  2. Dashboard ์„ค์น˜
    1. Kubernetes Dashboard๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์œ„ํ•ด NodePort(์˜ˆ: 30000๋ฒˆ ํฌํŠธ)๊ฐ€ ํ• ๋‹น๋œ๋‹ค.
    2. ์ด๋กœ ์ธํ•ด ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„์—๋Š” 30000๋ฒˆ ํฌํŠธ๊ฐ€ ์—ด๋ฆฌ๊ฒŒ ๋˜๊ณ , ํ•ด๋‹น ํฌํŠธ๋ฅผ ํ†ตํ•ด ๋Œ€์‹œ๋ณด๋“œ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
    3. ์‚ฌ์šฉ์ž๊ฐ€ 30000๋ฒˆ ํฌํŠธ๋กœ ์ ‘์†ํ•˜๋ฉด, ํŠธ๋ž˜ํ”ฝ์€ ๋ฆฌ๋ˆ…์Šค์˜ iptables๋ฅผ ๊ฑฐ์ณ Calico ๋„คํŠธ์›Œํฌ๋ง์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉฐ, ๊ทธ ์•ˆ์—์„œ Dashboard Pod์˜ IP๋ฅผ ์ฐพ์•„ ์ „๋‹ฌ๋œ๋‹ค.
    4. iptables ์„ค์ •์„ ๋ณด๋ฉด 30000๋ฒˆ ํฌํŠธ๊ฐ€ Dashboard Pod์˜ IP(Cluster IP)๋กœ ๋งคํ•‘๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. Metrics server ์„ค์น˜ metric ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ณ , ๋Œ€์‹œ๋ณด๋“œ์—์„œ CPU ๋ž‘ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ณด๋ฅผ ํ™•์ธ๊ฐ€๋Šฅ