Linux 기초

지원 버전: 모든 주요 Linux 배포판 (Ubuntu 20.04+, CentOS/RHEL 8+, Debian 11+) 마지막 업데이트: 2026년 2월 11일

Kubernetes와 컨테이너 기술을 이해하기 위해서는 Linux에 대한 기본적인 이해가 필수적입니다. 이 문서에서는 Kubernetes 환경에서 특히 중요한 Linux의 핵심 개념들을 다룹니다.

실습 환경 설정

이 문서의 예제를 따라하기 위해서는 다음과 같은 환경이 필요합니다:

필수 환경

  • Linux 운영체제 (Ubuntu 20.04+, CentOS/RHEL 8+, Debian 11+ 권장)

  • 터미널 액세스

  • sudo 권한

클라우드 환경 설정 (선택 사항)

AWS EC2 인스턴스를 사용하는 경우:

# Amazon Linux 2 인스턴스 시작
aws ec2 run-instances \
  --image-id ami-0c55b159cbfafe1f0 \
  --instance-type t3.micro \
  --key-name your-key-pair \
  --security-group-ids sg-12345678 \
  --subnet-id subnet-12345678

# SSH 접속
ssh -i your-key.pem ec2-user@your-instance-public-ip

로컬 환경 설정 (선택 사항)

로컬 환경에서 실습하려면 다음 중 하나를 사용할 수 있습니다:

  • VirtualBox + Vagrant: 가상 머신 환경 구성

  • WSL2: Windows에서 Linux 환경 사용

  • Docker: 컨테이너 환경에서 실습

목차

Linux 커널과 사용자 공간

커널의 역할

핵심 개념: Linux 커널은 운영체제의 핵심으로, 하드웨어와 소프트웨어 사이의 중개자 역할을 합니다.

Linux 커널은 운영체제의 핵심으로, 하드웨어와 소프트웨어 사이의 중개자 역할을 합니다. 주요 기능은 다음과 같습니다:

  • 프로세스 관리: 프로세스 생성, 스케줄링, 종료

  • 메모리 관리: 가상 메모리, 물리적 메모리 할당

  • 장치 관리: 하드웨어 장치와의 통신

  • 시스템 호출 인터페이스: 사용자 공간 프로그램이 커널 서비스에 접근할 수 있는 방법 제공

사용자 공간

사용자 공간은 일반 응용 프로그램이 실행되는 메모리 영역입니다. 사용자 공간 프로그램은 시스템 호출을 통해 커널 서비스에 접근합니다.

Linux 아키텍처

시스템 호출 예시

시스템 호출
설명
관련 명령어

fork()

새 프로세스 생성

ps, top

exec()

프로그램 실행

bash, sh

open()

파일 열기

cat, less

read()

파일에서 데이터 읽기

cat, grep

write()

파일에 데이터 쓰기

echo, tee

socket()

네트워크 소켓 생성

netstat, ss

clone()

네임스페이스 생성

unshare, docker

리눅스 커널 아키텍처

리눅스 커널 아키텍처

프로세스 관리

프로세스와 스레드

  • 프로세스: 실행 중인 프로그램의 인스턴스로, 독립된 메모리 공간을 가짐

  • 스레드: 프로세스 내에서 실행되는 작업 단위로, 같은 프로세스의 스레드들은 메모리 공간을 공유

프로세스 상태

  • 실행(Running): CPU에서 실행 중

  • 대기(Waiting): I/O 완료 또는 이벤트 발생 대기

  • 준비(Ready): 실행 가능하지만 CPU 할당 대기

  • 좀비(Zombie): 종료되었지만 부모 프로세스가 상태를 확인하지 않은 상태

  • 중단(Stopped): 일시 중지된 상태

주요 프로세스 관리 명령어

네임스페이스

네임스페이스는 Linux 커널의 기능으로, 프로세스 그룹을 격리하여 각 그룹이 시스템 자원을 독립적으로 볼 수 있게 합니다. 이는 컨테이너 기술의 핵심 요소입니다.

주요 네임스페이스 유형

  • PID 네임스페이스: 프로세스 ID 격리, 컨테이너가 자체 PID 1(init)을 가질 수 있게 함

  • 네트워크 네임스페이스: 네트워크 스택 격리 (인터페이스, IP 주소, 라우팅 테이블, 방화벽 등), 컨테이너 네트워킹의 기반

  • 마운트 네임스페이스: 파일 시스템 마운트 포인트 격리, 컨테이너별 독립적인 파일 시스템 제공

  • UTS 네임스페이스: 호스트명과 도메인명 격리, 각 컨테이너에 고유한 호스트 식별자 부여

  • IPC 네임스페이스: 프로세스 간 통신 자원 격리 (공유 메모리, 세마포어, 메시지 큐 등), 마이크로서비스 아키텍처에서 서비스 간 격리에 중요

  • 사용자 네임스페이스: 사용자 및 그룹 ID 격리, 루트리스(rootless) 컨테이너 실행 지원으로 보안 강화

  • cgroup 네임스페이스: cgroup 루트 디렉토리 격리, 컨테이너 내부에서 리소스 제한 가시성 제공

  • 시간 네임스페이스: 시스템 클록 격리, 컨테이너별 독립적인 시간 설정 가능 (Linux 5.6+)

네임스페이스 관련 명령어

cgroups (Control Groups)

cgroups는 프로세스 그룹의 자원 사용을 제한하고 격리하는 Linux 커널 기능입니다. 컨테이너의 자원 제한을 구현하는 데 사용됩니다. 클라우드 네이티브 환경과 Kubernetes에서 리소스 관리의 핵심 기술입니다.

cgroups의 주요 기능

  • CPU 시간 제한: 프로세스 그룹이 사용할 수 있는 CPU 시간 제한 및 CPU 코어 할당

  • 메모리 제한: 프로세스 그룹이 사용할 수 있는 메모리 양 제한 및 OOM(Out of Memory) 동작 제어

  • 블록 I/O 제한: 디스크 I/O 대역폭 제한 및 우선순위 설정

  • 네트워크 대역폭 제한: 네트워크 트래픽 제한 (tc와 결합)

  • 장치 접근 제어: 특정 장치에 대한 접근 제어 및 권한 관리

  • pids 제어: 프로세스 생성 수 제한으로 fork 폭탄 방지

  • freezer: 프로세스 그룹 일시 중지 및 재개 (컨테이너 일시 중지에 활용)

  • cpuset: 특정 CPU 코어와 NUMA 노드에 프로세스 바인딩

cgroups v1과 v2

  • cgroups v1: 각 자원 유형별로 별도의 계층 구조, 레거시 시스템에서 여전히 사용

  • cgroups v2: 통합된 단일 계층 구조로 더 일관된 관리 제공, 최신 배포판의 기본값

  • 하이브리드 모드: v1과 v2를 함께 사용하여 호환성 유지하면서 새 기능 활용

cgroups 관련 명령어

파일 시스템

파일 시스템 계층 구조

Linux는 단일 루트 디렉토리(/)에서 시작하는 계층적 파일 시스템 구조를 가집니다.

주요 디렉토리:

  • /bin: 기본 명령어

  • /sbin: 시스템 관리 명령어

  • /etc: 시스템 구성 파일

  • /home: 사용자 홈 디렉토리

  • /var: 가변 데이터 (로그, 캐시 등)

  • /tmp: 임시 파일

  • /usr: 사용자 프로그램 및 데이터

  • /proc: 프로세스 및 커널 정보 (가상 파일 시스템)

  • /sys: 시스템 및 하드웨어 정보 (가상 파일 시스템)

파일 시스템 유형

  • ext4: Linux의 기본 파일 시스템

  • XFS: 대용량 파일 시스템에 적합

  • Btrfs: 스냅샷, 압축 등 고급 기능 제공

  • OverlayFS: 여러 디렉토리를 겹쳐서 단일 디렉토리로 표현 (컨테이너에서 많이 사용)

  • tmpfs: 메모리 기반 임시 파일 시스템

마운트와 볼륨

네트워킹 기초

네트워크 인터페이스

  • lo: 루프백 인터페이스 (127.0.0.1)

  • eth0, ens3 등: 물리적 네트워크 인터페이스

  • docker0, cni0 등: 가상 브릿지 인터페이스 (컨테이너 네트워킹)

네트워크 구성 명령어

네트워크 네임스페이스와 가상 인터페이스

보안 컨텍스트

사용자와 그룹

  • UID (User ID): 사용자 식별자

  • GID (Group ID): 그룹 식별자

  • root (UID 0): 관리자 권한을 가진 특별한 사용자

파일 권한

Linux 파일 권한은 소유자, 그룹, 기타 사용자에 대한 읽기(r), 쓰기(w), 실행(x) 권한으로 구성됩니다.

파일 권한 구조

권한 관련 명령어

SELinux와 AppArmor

  • SELinux (Security-Enhanced Linux): NSA에서 개발한 강제적 접근 제어 시스템

  • AppArmor: 프로그램별 보안 프로필을 통한 접근 제어 시스템

systemd와 서비스 관리

systemd는 현대적인 Linux 시스템의 init 시스템이자 서비스 관리자입니다. Kubernetes 노드에서 kubelet, containerd 등 핵심 서비스를 관리하는 데 사용됩니다.

systemd의 주요 기능

  • 서비스 관리: 시스템 서비스의 시작, 중지, 재시작, 활성화/비활성화

  • 의존성 관리: 서비스 간 의존성 자동 관리 및 병렬 시작

  • 로깅: journald를 통한 통합 로그 관리

  • 타이머: cron 대신 사용할 수 있는 타이머 유닛

  • 리소스 관리: cgroups를 통한 서비스별 리소스 제한

systemd 유닛 타입

  • service: 시스템 서비스 (예: kubelet.service, containerd.service)

  • socket: 소켓 기반 활성화

  • target: 유닛 그룹 (런레벨과 유사)

  • timer: 예약 작업

  • mount: 파일 시스템 마운트

  • device: 장치 유닛

systemd 명령어

systemd 유닛 파일 작성

Kubernetes 관련 서비스의 systemd 유닛 파일 예시:

systemd 리소스 제한

커널 파라미터와 모듈

sysctl을 통한 커널 파라미터 설정

sysctl은 실행 중인 커널의 파라미터를 조회하고 변경하는 도구입니다. Kubernetes 클러스터 구성 시 네트워크 및 시스템 파라미터 튜닝에 필수적입니다.

Kubernetes에 필요한 주요 sysctl 설정

커널 모듈 관리

많은 CNI 플러그인과 스토리지 드라이버가 특정 커널 모듈을 필요로 합니다.

커널 버전 및 기능 확인

시스템 리소스 제한

ulimit - 사용자별 리소스 제한

ulimit은 프로세스가 사용할 수 있는 시스템 리소스를 제한합니다. Kubernetes 노드에서 충분한 리소스를 확보하기 위해 조정이 필요할 수 있습니다.

PAM 제한 설정

프로세스별 리소스 확인

로그 관리

journald - systemd 통합 로깅

journald는 systemd의 로깅 시스템으로, Kubernetes 노드의 시스템 서비스 로그를 관리합니다.

journald 설정

전통적인 syslog

일부 시스템에서는 여전히 syslog를 사용합니다.

로그 로테이션

로그 파일이 무한정 커지지 않도록 로그 로테이션을 설정합니다.

DNS와 네트워크 설정

DNS 설정

DNS는 Kubernetes 클러스터 내부 서비스 디스커버리의 핵심입니다.

systemd-resolved

현대적인 Linux 배포판에서는 systemd-resolved를 사용합니다.

네트워크 설정 파일

시간 동기화

시간 동기화는 분산 시스템에서 매우 중요합니다. Kubernetes 클러스터의 모든 노드는 정확한 시간을 유지해야 합니다.

chronyd (권장)

chronyd는 현대적인 NTP 클라이언트로, ntpd보다 빠르게 시간을 동기화합니다.

chronyd 설정

timesyncd (Ubuntu 기본)

Ubuntu는 기본적으로 systemd-timesyncd를 사용합니다.

시간대 설정

패키지 관리

Kubernetes와 관련 도구를 설치하고 관리하기 위한 패키지 관리자 사용법입니다.

apt (Debian/Ubuntu)

yum/dnf (RHEL/CentOS/Fedora)

패키지 버전 고정

Kubernetes 구성 요소는 버전 호환성이 중요하므로 자동 업데이트를 방지해야 합니다.

주요 Linux 명령어

파일 및 디렉토리 관리

텍스트 처리

시스템 정보

프로세스 및 서비스 관리

컨테이너 관련 Linux 기능

OverlayFS

OverlayFS는 여러 디렉토리를 겹쳐서 단일 디렉토리로 표현하는 유니온 마운트 파일 시스템입니다. Docker와 같은 컨테이너 런타임에서 이미지 레이어를 구현하는 데 사용됩니다.

네트워크 브릿지와 NAT

컨테이너 네트워킹은 주로 브릿지 인터페이스와 NAT(Network Address Translation)를 사용하여 구현됩니다.

spinner

시스템 호출 필터링 (seccomp)

seccomp(Secure Computing Mode)는 프로세스가 사용할 수 있는 시스템 호출을 제한하는 Linux 커널 기능입니다. 컨테이너의 보안을 강화하는 데 사용됩니다.

기능(Capabilities) 제한

Linux 기능은 전통적인 root 권한을 더 작은 권한 단위로 나눈 것입니다. 컨테이너는 필요한 기능만 부여받아 보안을 강화합니다.

주요 기능:

  • CAP_NET_ADMIN: 네트워크 설정 변경

  • CAP_SYS_ADMIN: 시스템 관리 작업

  • CAP_CHOWN: 파일 소유권 변경

  • CAP_DAC_OVERRIDE: 파일 권한 무시

결론

Linux의 기본 개념과 기능은 Kubernetes와 컨테이너 기술을 이해하는 데 필수적입니다. 이 문서에서 다룬 주요 내용을 정리하면:

핵심 기술

  • 네임스페이스와 cgroups: 컨테이너 격리와 자원 관리의 기반

  • OverlayFS: 컨테이너 이미지 레이어링의 핵심

  • systemd: Kubernetes 노드 서비스 관리

운영 필수 지식

  • 커널 파라미터 튜닝: sysctl을 통한 네트워킹 및 시스템 최적화

  • 모듈 관리: CNI 플러그인과 스토리지 드라이버 지원

  • 로그 관리: journald를 통한 시스템 및 서비스 로그 분석

  • 시간 동기화: 분산 시스템의 일관성 유지

문제 해결

  • 리소스 제한: ulimit과 cgroups를 통한 리소스 관리

  • 네트워킹: DNS, 브릿지, iptables 설정

  • 패키지 관리: Kubernetes 구성 요소의 버전 관리

이러한 Linux 기초 지식을 바탕으로 Kubernetes 환경에서 발생하는 문제를 효과적으로 해결하고, 클러스터를 최적화하며, 안정적으로 운영할 수 있습니다.

퀴즈

이 장에서 배운 내용을 테스트하려면 Linux 기초 퀴즈를 풀어보세요.

참고 자료

마지막 업데이트