sudo vi /etc/netplan/01-netcfg.yaml
network: version: 2 ethernets: enp1s0: dhcp4: true enp2s0: dhcp4: true
sudo netplan apply sudo reboot
sudo vi /etc/netplan/01-netcfg.yaml
network: version: 2 ethernets: enp1s0: dhcp4: true enp2s0: dhcp4: true
sudo netplan apply sudo reboot
Terraform의 plan
및 apply
전략 상 k8s 클러스터에 설치되어 있지 않은 CRD (CustomResourceDefinitions)를 포함하는 kubernetes_manifest
를 사용하는 경우 helm_release
로 선행하여 helm chart를 설치하도록 하더라도 CRD를 인식하지 않아 에러가 발생한다.
Terraform repo에 이미 이슈로 등록되어 있지만 해결해줄 의지가 없는 것으로 보인다.
문제가 해결되기 전까지는 Helm Chart를 테라포밍하지 말고, k8s 클러스터에 수동으로 설치해주어야 문제가 발생하지 않는다.
# resource "helm_release" "metallb" { # name = "metallb" # namespace = "metallb-system" # create_namespace = true # repository = "https://metallb.github.io/metallb" # chart = "metallb" # version = "0.14.9" # skip_crds = false # } resource "kubernetes_manifest" "metallb_ip_pool" { # depends_on = [helm_release.metallb] manifest = { apiVersion = "metallb.io/v1beta1" kind = "IPAddressPool" metadata = { name = "default-address-pool" namespace = "metallb-system" } spec = { addresses = var.ip_pool_addresses } } } resource "kubernetes_manifest" "metallb_advertisement" { # depends_on = [helm_release.metallb] manifest = { apiVersion = "metallb.io/v1beta1" kind = "L2Advertisement" metadata = { name = "l2" namespace = "metallb-system" } } }
K8s 클러스터에 다음과 같이 직접 설치하거나 Helm Chart로 설치한다.
kubectl create namespace metallb-system kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml
1. SSH 서버 활성화 및 기본 필요 패키지 설치
sudo systemctl enable ssh sudo systemctl start ssh sudo apt update && sudo apt upgrade sudo apt-get install -y ca-certificates curl apt-transport-https gpg
2. Docker 관련 패키지 설치 (필요 없는 경우 containerd.io만 설치하면 됨)
sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3. 메모리 Swap 비활성화 및 Cgroup 활성화
sudo vi /etc/fstab # 다음과 같이 주석 처리 후 저장 # /swap.img none swap sw 0 0 sudo reboot
sudo dphys-swapfile swapoff sudo systemctl disable dphys-swapfile sudo vi /boot/firmware/cmdline.txt # cgroup_enable=memory cgroup_memory=1 을 앞에 추가
4. Kubernetes 설치 (Kubeadm 배포판)
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl sudo containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml sudo systemctl restart containerd sudo systemctl restart kubelet sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
5. Kubernetes 클러스터 생성 및 Flannel CNI 설치 (Master 노드)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --v=5 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubeadm token create --print-join-command
6. Kubernetes 클러스터 등록 (Worker 노드)
git 저장소에 서브모듈이 포함된 경우 root 디렉토리에 .gitmodules 파일이 생성되어 있다. https 방식의 인증을 사용하는 머신에서 서브모듈을 설정하는 경우에 다음과 같이 서브모듈의 원격 저장소 주소도 https 프로토콜을 이용하도록 설정된다.
다만, 최근 github의 인증 보안이 강화되면서 https 방식의 credential을 이용해서는 jenkins에서 private 저장소에 대한 접근이 어렵다. 따라서 이 경우에는, jenkins에서 사용하던 https 방식의 github credential을 ssh 방식으로 전환해야 한다.
Jenkins의 github credential 설정을 바꾸는 것은 어렵지 않은 일이지만, 서브모듈이 포함된 프로젝트가 배포 파이프라인에 포함된 경우에는 권한 오류 문제가 발생할 수 있음을 기억해야 한다.
권한 문제로 서브모듈을 가져오지 못하는 경우에는 .gitmodules 파일에 기록된 서브모듈들의 원격 저장소 url을 ssh 프로토콜을 이용하도록 다음과 같이 수정해야 한다.
[submodule "submodule_name"] path = submodule_path_in_root_directory url = git@github.com:username/repository-name.git
올해 초에 CS 분야 석사 학위를 받고, 졸업 후에 계약직 연구원으로 월급을 받으면서 연구 과제에 참여했다. 아무래도 전문연을 해야하는 입장에서 바로 회사로 가는 것이 베스트이지만, 그러기에는 내가 너무 지쳐있었다. 3~4월의 나는 정말 아무것도 하고 싶지 않은 번아웃 상태였다.
연구원으로 일하면서 엄청난 워라밸을 방어하며 충분한 시간을 가지고 취업 준비를 했는데, 전문연을 해야 하는 사정을 고려해주신 지도교수님이 있었기에 가능했다. 지금도 정말 감사한 마음이다.
역시 번아웃에는 쉬는 것이 최고다. 충분한 휴식 기간을 거치고 나는 6월 중순부터 두 페이지 가량의 이력서를 쓰고 벡엔드 개발 직무로 구직을 시작했다.
알다시피 전문연 업체는 중소, 중견기업 위주이고, 괜찮은 업체보다는 SI, SM 등의 사업을 영위하는 소위 커리어 망칠 가능성이 높은 회사들이 많다. 특히, 메인 비즈니스 모델 없이 정부과제 사업만으로 굴러가는 곳은… 굳이 연구실 밖에서 그걸 경험하고 싶지는 않았다.
요즘 CS 분야는 AI 전공이면 구인 공고가 꽤 많아서 좋은 회사를 갈 수 있는 스펙트럼이 비교적 넓어지지만, 그 외의 개발 직무(백엔드, 프론트엔드, AOS/iOS, 시스템 등)는 생각보다 그렇지 못하다. 처우가 열악한 회사들이 득실득실하다. 아무리 대체복무라지만 이상한 회사에 들어가서 커리어를 망치면 1년 6개월 현역으로 입대하느니만 못하다. 게다가 전문연이라고 연봉까지 후려치는 그런 곳이라면… 최악이다.
혹시 AI 외의 개발 직무로 석사 전문연을 하실 계획이 있으신 분이라면 꼭 미리미리 구직 활동을 하시는 게 좋고, 웬만하면 SI, SM 위주의 비즈니스를 영위하는 회사는 본인의 커리어를 감안해서라도 다시 한 번 생각해보시는 게 좋을 것 같다. 정말 입대 연기가 불가능할 만큼 긴급한 상황이 아니라면…
구직 활동 끝에 최근 내 기준에 부합하는 한 스타트업에 입사하였으며, 드디어 전문연으로의 편입이 완료되어 9월부터 3년간의 복무를 시작했다. 2024년이라니.. 까마득하긴 하다.
입사 후 업무 적응하느라 자기계발을 하지 못하고 있었는데, github 잔디가 싱크홀이 뚫린 것 마냥 비워지는 걸 더 이상 두고봐서는 안될 것 같다. TIL 글이라도 써서 흔적을 남기려고 노력해야지. 블로그에 글도 열심히 남기고.
계약 연봉이 요즘 핫한 IT 회사들에 비해서는 엄청 만족스러운 수준은 아니지만, 수평적인 문화를 가진 자유로운 분위기의 스타트업이어서 충분히 괜찮은 시작이라고 생각한다. 특히, 자사 솔루션 기술을 이용해 B2C 기반의 플랫폼으로 비즈니스 모델을 전환 중이어서 방향성도 마음에 든다. 무엇보다도 현역으로 복무하지 않고 내 분야의 커리어를 이어갈 수 있다는 것만으로도 이미 굉장한 혜택을 받았다고 느낀다.
앞으로 꾸준히 자기계발을 이어나가면서 회사 생활도 열심히 해 볼 생각이다. 내년 이맘때의 내가 이 글을 보면서 후회하는 일이 없도록 매일매일 치열하게 살아야지.