inception-of-things part 1
Intro
42 Seoul의 공통 과정을 마무리하면, 원하는 분야를 선택하여 심화 과제를 수행할 수 있습니다. 그중에서도 ’Inception-of-Things’는 인프라 관련 심화 과제로, 가장 많은 경험치를 얻을 수 있는 과제입니다.
얼핏 보면 매우 어려운 과제처럼 느껴질 수 있지만, 개념을 확실히 이해하고 공부한다면 누구나 빠르게 완료할 수 있다고 생각합니다. 저의 경우, CKA 자격증 취득을 목표로 k8s를 공부하던 중 우연히 팀원을 구하게 되어 이 과제를 수행하게 되었습니다. 배경지식이 어느 정도 있는 상태에서 진행하다 보니, 크게 어렵지 않게 잘 마무리할 수 있었던 것 같습니다.
개요
참고한 자료는 다음과 같습니다:
전체 코드는 비공개 되어있는 상태입니다
개념 설명
cluster는 노드(컴퓨터)들의 논리적인 집합을 의미합니다. 일반적으로, 하나의 컴퓨터로 처리하기 어려운 방대한 양의 작업을 처리하기 위해 도입을 합니다.
클러스터는 특정한 목적을 가지고 있고, 그 안의 노드들을 각자 맡은 역할을 수행합니다. (보통 클러스터 내부의 노드들을 관리하는 master, 작업을 수행하는 worker로 구분할 수 있습니다.) 이때, k8s는 분산된 노드(컴퓨터)들을 하나의 클러스터로 묶어주고, 관리해주는 도구로써 사용할 수 있습니다.
컴퓨팅 능력을 확장할 목적으로 수직적 확장과 수평적 확장을 고려할 수 있습니다.
수직적 확장은 cpu나 memmory 성능을 높여서 단일 노드의 성능을 향상시키는 것을 의미하고, 수평적 확장은 작업을 분산시킬 수 있는 여러 노드를 추가하는 것을 의미합니다.
클러스터링은 수평적으로 확장된 컴퓨팅 리소스들을 그룹화 해주는 것을 의미합니다.
한 가지 주의해야 하는 것은, k8s 자체는 노드를 생성(provision)해주는 도구가 아니라는 것입니다. 즉, provision 단계는 k8s clustering 이전에 진행되어야 합니다.
Part 1에서는 vagrant
tool을 이용해서 master, agent 역할을 하는 두 대의 가상 머신을 local에서 provision
하고, k3s
를 이용해서 clustering
하는 것을 요구합니다. 참고로 k3s는 k8s의 경량화 버전입니다.
코드 설명
파일 구조는 아래와 같습니다.
p1/
├── scripts/
│ ├── agent.yml
│ └── server.yml
└── Vagrantfile
vagrant는 local에서 가상 머신을 생성하고, provision을 할 수 있는 도구입니다. 사용자가 원하는 스펙을 Vagrantfile 이름의 파일에 정의하면, vagrant up
명령어를 통해 간단하게 가상머신을 생성할 수 있습니다.
과제 요구사항에 맞게 spec을 정의해줍니다.
Vagrantfile
"2") do |config|
Vagrant.configure(= "bento/ubuntu-24.04"
config.vm.box = "202404.26.0"
config.vm.box_version
"hyunghkiS" do |control|
config.vm.define = "hyunghkiS"
control.vm.hostname "private_network", ip: "192.168.56.110"
control.vm.network "virtualbox" do |v|
control.vm.provider "modifyvm", :id, "--name", "hyunghkiS"]
v.customize [= "1024"
v.memory = "1"
v.cpus
end# just for evaluation
"shell", inline: <<-SHELL
control.vm.provision -get update
sudo apt-get install -y net-tools
sudo apt
SHELL"shell", path: "scripts/server.sh"
control.vm.provision
end"hyunghkiSW" do |control|
config.vm.define = "hyunghkiSW"
control.vm.hostname "private_network", ip: "192.168.56.111"
control.vm.network "virtualbox" do |v|
control.vm.provider "modifyvm", :id, "--name", "hyunghkiSW"]
v.customize [= "1024"
v.memory = "1"
v.cpus
end# just for evaluation
"shell", inline: <<-SHELL
control.vm.provision -get update
sudo apt-get install -y net-tools
sudo apt
SHELL"shell", path: "scripts/agent.sh"
control.vm.provision
end end
저 just for evaluation 부분은 아마 과제 명세서에 ifconfig 명령어를 입력해보는 부분 때문에 추가한 것 같습니다. (사실 이 글을 쓰는 시점은 과제를 수행하고 1년이 지난 시점이라 기억이 가물가물 합니다.)
server.sh
#!/bin/bash
'alias k=kubectl' >> /home/vagrant/.bashrc
echo /home/vagrant/.bashrc
source
-sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" sh -s - server --node-ip 192.168.56.110
curl =$(sudo cat /var/lib/rancher/k3s/server/node-token)
K3S_TOKEN> /vagrant/k3s_token # vagrant 공유 폴더에 master token 정보를 저장해주었습니다. echo $K3S_TOKEN
agent.sh
#!/bin/bash
'alias k=kubectl' >> /home/vagrant/.bashrc
echo /home/vagrant/.bashrc
source
=$(cat /vagrant/k3s_token) # vagrant 공유 폴더에 저장된 master token 정보를 읽어옵니다.
K3S_TOKEN-sfL https://get.k3s.io | K3S_URL=https://192.168.56.110:6443 K3S_TOKEN=$K3S_TOKEN sh -s - --node-ip 192.168.56.111 curl
k3s 공식 문서를 참고해서 master와 agent를 clustering 해주는 스크립트를 작성해주었습니다. 각각 노드 안에서 로직이 실행되어, 하나는 master로, 하나는 agent로 역할을 수행하게 됩니다.
Outro
오랜만에 해당 과제의 로직을 다시 보니까 기억이 잘 안납니다.
남은 부분은 천천히 포스팅하겠습니다.