K8S

쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 Section 4 복습

개발공명 2025. 6. 1. 11:01

 

쿠버네티스 무게감 있게 설치하기

section 4의 제목은 '쿠버네티스 무게감 있게 설치하기'이다. 

쿠버네티스 설치를 진행하는 section이다. 

 

설치 과정을 이해하면 좋은 점이 쿠버네티스의 자체 구성을 알 수 있게 된다. 

쿠버네티스의 자체 구성을 알고 개념을 공부하면 개념을 더 잘 이해할 수 있다고 한다. 

 

강의에서 다루는 전체 환경 및 실습 방법

개발의 pipeline에 3가지 환경이 있다. 

  • 개발 환경
  • CI/CD 환경
  • 인프라 환경

이번 section에서는 인프라 환경만 설치하는 것이다. 

하지만 각 환경에 어떤 것들이 설치되고 어떻게 이용되는지 흐름을 보자. 

 

각 환경에 필요한 도구들은 아래와 같다. 

  • 개발 환경
    • IntelliJ 
    • Spring Boot 
    • Java OpenJDK 
    • Gradle
  • CI/CD 환경
    • Rocky Linux
    • Docker (컨테이너 빌드 도구)
    • Jenkins (빌드, 배포 도구)
  • 인프라 환경
    • Rocky Linux
    • containerd (컨테이너 런타임)
    • Kubernetes (컨테이너 오케스트레이션)

 

개발 후 CI/CD를 거쳐 인프라 환경까지 배포되는 흐름을 보자. 

 

개발 과정

개발 과정에서 많은 라이브러리가 필요하다. 

gradle이 maven이라는 repository에서 라이브러리들을 다운 받아준다. 

또 gradle은 IntelliJ에서 개발한 소스 코드 build 작업도 해준다. 

자바 언어로 개발하니 build 하면 jar 파일이 생긴다. 

jar 파일은 자바 머신 위에서 실행이 된다. 

 

CI/CD 과정

본격적인 devops의 시작이다. 

팀원들이 각자 개발하고 commit 하면 github로 코드가 통합된다. 

이때 Jenkins로 빌드하면 아래와 같은 일이 발생한다. 

  1. Github에서 코드 다운
  2. Jenkins에 있는 Gradle로 필요 라이브러리 다운
  3. Jenkins에 있는 Gradle로 jar 파일 생성
  4. jar 파일 실행시킬 OpenJDK 이미지 도커 허브에서 가져오기 
    1. app을 띄우기 위한 기반이 되는 환경 = 베이스 이미지 = OpenJDK 이미지
    2. 베이스 이미지에 jar 파일 올리는 작업 = 컨테이너 빌드
  5. 컨테이너 빌드를 진행해 app이 실행되는 컨테이너를 이미지로 만든다. 
  6. 생성한 이미지를 도커 허브에 올린다. 

 

Jenkins로 빌드하면 내가 만든 app이 실행될 수 있는 컨테이너의 이미지를 만들어주는 것 같다.

(Jenkins를 사용 안해봐서 잘 모르겠다.)

 

인프라 과정

이제 배포 작업이다. 

Jenkins에서 pod 생성 명령을 날리면 된다. 

이 명령은 쿠버네티스로 간다. 

명령을 받은 쿠버네티스는 pod 안의 컨테이너 주소를 보고 도커 허브에서 컨테이너 이미지를 다운 받는다. 

쿠버네티스는 컨테이너 런타임 = containerd에게 컨테이너 이미지를 컨테이너로 생성하라고 한다. 

 

이것이 컨테이너 환경에서 배포 방법이다. 

이전에 내가 배포를 진행했던 방식은 그냥 jar 파일을 인프라 환경 (쿠버네티스 X, 그냥 AWS EC2)에 배포했다. 

이렇게 하면 scale up, 장애 복구, 로드 밸런싱 등 작업이 굉장히 어려워진다. 

그래서 위와 같이 컨테이너 환경에서 배포하는 것 같다. 

 

빠르고 쉽게 설치하는 방법

이 강의에서는 쿠버네티스를 빠르고 쉽게 설치하는 방법에 대해 배운다. 

빠르고 쉽게 설치하는 방법은 자동화 되어 있고 몇번의 클릭, 명령어 입력으로 간단하게 끝난다. 

 

하지만 이렇게 설치하면 설치 과정에 대한 이해도가 떨어지고 그에 따라 쿠버네티스 자체 구성에 대한 이해도도 떨어지게 된다. 

그래서 이후에 무게감 있게 설치하는 방법도 배우는 것이다. 

 

쿠버네티스를 빠르고 쉽게 설치하고 테스트 하는 방법은 7단계로 구성된다.

 

  1. virtual box 다운
    1. https://download.virtualbox.org/virtualbox/7.1.6/VirtualBox-7.1.6-167084-Win.exe
    2. virtual box는 한 대의 물리적 컴퓨터에서 여러 개의 가상 컴퓨터를 동시에 실행할 수 있게 하는 도구다. 
  2.  vagrant 다운 
    1. https://releases.hashicorp.com/vagrant/2.4.3/vagrant_2.4.3_windows_amd64.msi
    2. vagrant는 가상 환경 (주로 가상 머신)의 생성과 관리를 간편하게 자동화 해주는 역할
    3. virtual box와 같은 다양한 가상화 소프트웨어와 연동하여 가상 머신 생성하고 관리
    4. Vagrantfile이라는 설정 파일 통해 원하는 환경을 코드로 정의 가능
  3.  vagrant 스크립트 실행 in cmd 
    1. 아래 스크립트를 치면 쿠버네티스와 필요한 환경들이 자동으로 설치되는 것이다. 
  4. mobaxterm 설치
    1. https://download.mobatek.net/2312023031823706/MobaXterm_Portable_v23.1.zip
    2. mobaxterm은 다양한 원격 접속 및 네트워크 관리 작업을 한 프로그램에서 통합적으로 지원하는 툴이다. 
    3. 리눅스 서버 같이 원격 시스템에 접속해 명령 실행하거나 파일 전송할 때 사용하는 툴이다. 
  5.  mobaxterm에서 쿠버네티스에 접속
    1. sessions > new session 해서 접속 세션 생성
    2. SSH 선택
    3. 사람 표시 눌러 Credentials > New 해서 계정 생성
    4. Name, Username, Password 각각 k8s-master, root, vagrant 입력
    5. 아래 사진처럼 값들 입력 후 session 실행해 쿠버네티스에 접속
  6. 접속한 mobaxterm에서 'k get pods -A' 명령어로 떠있는 pod들 확인 (아래 사진처럼)
  7. 브라우저에서 쿠버네티스 대시보드에 접근해 pod들 조회
    1. https://192.168.56.30:30000/#/login 에 접속
    2. 고급 눌러 해당 페이지로 이동
    3. 다음 나오는 페이지에서 '생략' 선택
    4. dashboard에서 default 부분 눌러 '모든 네임스페이스' 선택

 

vagrant 스크립트

# Vagrant 폴더 생성
C:\Users\사용자> mkdir k8s && cd k8s

# Vagrant 스크립트 다운로드
curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/vagrant-2.4.3/Vagrantfile

# Rocky Linux Repo 세팅
curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/vagrant-2.4.3/rockylinux-repo.json
vagrant box add rockylinux-repo.json

# Vagrant Disk 설정 Plugin 설치 
vagrant plugin install vagrant-vbguest vagrant-disksize

# Vagrant 실행 (VM생성)
vagrant up

 

mobaxterm 사용법

 

 

mobaxterm에서 pod들 확인

 

쿠버네티스 dashboard

 

무게감 있게 설치하는 방법

빠르고 쉽게 설치하는 방법에서 자동으로 해줬던 스크립트를 분석해보며 이해해 보는 강의다. 

 

스크립트를 보면 2가지 파트로 나눠져 있다. 

  • virtual box 관련 설정 파트
  • 쿠버네티스 관련 설정 파트

아래 그림의 주황 부분이 virtual box 관련 설정 파트다. 

아래 그림의 파란 부분이 쿠버네티스 관련 설정 파드다. 

$default_script ~ SHELL, $master_script ~ SHELL 각각 이 사이에도 많은 명령어들이 있는데 그림에 생략된 것이다. 

 

virtual box 관련 설정 파트도 2가지로 나뉜다. 

  • 모든 노드에 기본적으로 진행되는 설정
  • master 노드에만 진행되는 설정

모든 노드에 기본적으로 진행되는 설정에 대한 설명은 아래와 같다. 

  • vm에 rocky linux 8 버전으로 설치하라
  • $default_script 부분에 있는 명령어들을 실행하라

master 노드에만 진행되는 설정에 대한 설명은 아래와 같다. 

  • vm의 이름을 master-node로 하라
  • 리눅스의 hostname을 k8s-master로 하라
  • vm에 private_network 만들어라 (내 pc에서만 사용할 수 있는 네트워크망 생성)
  • 리눅스에 192.168.56.30 ip 할당하라
  • vm의 메모리 4GB, CPU 4코어로 자원 할당
  • $master_script 부분에 있는 명령어들을 실행하라

 

이제 쿠버네티스 관련 설정 파트를 보자. 

$default_script ~ SHELL, $master_script ~ SHELL 각각 이 사이에도 많은 명령어들이 있다고 했다. 

그래서 아래 2파트로 나눠지는 것이다. 

  • 모든 node에 세팅하는 명령어 파트 ($default_script ~ SHELL)
  • master node에만 세팅하는 명령어 파트 ( $master_script ~ SHELL )

 

이 명령어들은 쿠버네티스 설치에 관한 쿠버네티스 공식 문서를 따라 순서대로 명령어를 적은 것이다. 

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

이 공식 문서에서 시작하는 것이다. 

공식 문서에 있는 명령어도 있지만 어떤 행동을 하라는 말도 명령어로 강사님이 직접 작성하신 것 같다. 

 

kubeadm은 쿠버네티스 클러스터를 빠르고 쉽게 구축할 수 있도록 도와주는 공식도구다. 

kubeadm은 쿠버네티스 공식 문서에서 추천하는 설치 방법 중 하나라고 한다. 

 

먼저 모든 node에 세팅하는 명령어 파트 ($default_script ~ SHELL)를 보자. 

여기서 진행하는 명령어들은 아래와 같다. 

 

이제 master node에만 세팅하는 명령어 파트 ( $master_script ~ SHELL )를 보자. 

여기서 진행하는 명령어들은 아래와 같다. 

  • kubeadm으로 클러스터 생성
  • 쿠버네티스 편의 기능 설치
    • kubctl 자동 완성 기능 설치
    • dashboard 설치
    • metrics server 설치

 

자세하게 그림과 함께 명령어 부분들에서 일어나는 일들을 보자. 

모든 node에 세팅하는 명령어 파트 ($default_script ~ SHELL)를 보자. 

  1. rocky linux 설치 후 패키지를 최신으로 업데이트, 시간 seoul로 변경
  2. kubeadm 설치 전 사전 작업
    1. port 신경 안 쓰려고 방화벽 내리기
    2. 스왑 (메모리 관련) 비활성화
  3. 컨테이너 런타임 설치
    1. 컨테이너 런타임 설치 전 사전 작업 = iptables 세팅
      1. linux os에 할당된 network가 k8s의 pod network로 연결되려면 iptables 통과해야 함
      2. 이렇게 연결하는데 문제 없도록 설정하는 것
    2. containerd에 도커 사용하는 방법으로 패키지 설치
      1. docker repository에서 containerd.io만 설치
    3. containerd = 컨테이너 런타임 설치
  4. kubeadm 설치 위한 작업
    1. k8s 리포지토리 설정
    2. 패키지 설치 (kubeadm, kublet, kubectl 설치됨)
    3. SELinux 설정
    4. CRI 활성화 (k8s 인터페이스와 컨테이너 런타임 통신 위해)

 

master node에만 세팅하는 명령어 파트 ( $master_script ~ SHELL )를 보자. 

 

5. kubeadm으로 클러스터 초기화

  1. 초기화 하면 그림에 있는 것과 같은 컴포넌트들이 만들어짐
    1. 모두 pod 형태로 기동
  2. cidr 명령어로 pod network 대역 새로 지정 가능
    1. 설정한 대역은 app1 ip ~ app2 ip까지로 약 100만개 pod 생성 가능한 대역
  3. 여기까지 하면 k8s 설치 끝난 것
  4. kubectl 사용 설정
    1. 설치 끝나면 k8s에 접속 가능한 인증서 만들어져 있음
    2. 이 인증서 가져와 kubectl 사용할 수 있게 설정하는 것
    3. 그러면 kubectl로 kube-apiserver에 api 날리면서 cli 통신 가능해지는 것
  5. CNI (=container network interface) plugin (calico) 설치
    1. CRI = 컨테이너 생성, 관리 부분에서 k8s와 컨테이너 런타임 간 인터페이스
    2. CNI = 컨테이너 간 통신 관리 부분에서 k8s와 네트워크 간 인터페이스
    3. calico는 네트워크 제공하는 여러 솔루션 중 하나
  6. master에 pod 생성할 수 있도록 설정
    1. kubeadm에서 생성되는 컴포넌트 (5번의 여러 개들) or dashboard는 pod들이 master-node에 올라가도 되도록 설정이 있음
    2. 일반적으로 master-node에 유저가 만든 pod는 올리지 않는게 정석
    3. 우리는 master-node만 만들 것이니 app이 master-node에 pod 생성되게 하는 설정하는 것

6. k8s 편의 기능 설치

  1. kubectl 자동완성 기능
    1. 명령어 칠 때 tab 누르면 자동완성 되는 기능
  2. dashboard 설치
    1. pc 브라우저에서 dashboard까지 연결 어떻게 되는지 보자.
      1. dashboard 설치 시 자동으로 pod network로부터 받은 ip 만들어짐
      2. 내 linux network에는 30000번 포트가 열려 있음
      3. 이 port로 접속하면 그 트래픽은 리눅스의 iptables 거쳐 calico 네트워크 망으로 들어감
      4. calico 네트워크 망에서 dashboard ip를 찾음
      5. iptables 들어가보면 30000번 port가 dashboard ip랑 매칭되어 있음
  3. metrics sever 설치
    1. metrics 서버의 역할
      1. 컨테이너에 대한 cpu, 메모리는 컨테이너 런타임에 의해 기본적으로 관리되고 있음
      2. metrics 서버 설치하면 이것이 metric 정보 (cpu, memory) 조회함
      3. 그리고 dashboard에 cpu, memory 정보가 표시됨

 

그래서 자동화된 스크립트가 아래 그림과 같이 구성되어 있는 것이다. 

 

출처

https://inf.run/k7mF

 

쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의 | 일프로 - 인프런

일프로 | , ✅ 광범위한 쿠버네티스 기술을 A~Z까지 넓고 얇게 훑기보다 하나의 개념을 배우더라도 왜 사용하는지 부터 실무에서 어떻게 사용되는지 까지를 다루는 강의✅ 시작은 초급자지만강

www.inflearn.com

 

 

참고 자료

 

쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의 | 일프로 - 인프런

일프로 | , ✅ 광범위한 쿠버네티스 기술을 A~Z까지 넓고 얇게 훑기보다 하나의 개념을 배우더라도 왜 사용하는지 부터 실무에서 어떻게 사용되는지 까지를 다루는 강의✅ 시작은 초급자지만강

www.inflearn.com