데이터베이스 연구실.log

k3s와 Kubernetes 구성 요소

단일 VM의 k3s 구성과 노드, 파드, 선언형 자원, 서비스, 영속 저장소의 역할

k3sKubernetesPodDeploymentPVService

#핵심 요약

실습에서는 별도 Oracle Linux 8 VM 한 대에 k3s를 설치하고 노드, 시스템 파드, 저장소를 확인함

Kubernetes는 선언한 상태를 유지하며 실습 nginx Deployment는 파드 하나 삭제 후 새 파드를 만들어 선언 수를 회복함

파드는 하나 이상의 컨테이너를 묶는 배치, 관리 단위이며 접속 주소는 Service, 지속할 데이터는 영속 저장소로 구분함

#개념과 동작 원리

구성 요소 역할
컨테이너 프로그램, 라이브러리, 설정을 묶은 실행 단위이며 VM처럼 OS 전체를 별도로 기동하는 방식과 구분
클러스터, 노드 클러스터는 관리 범위, 노드는 컨테이너가 실제 배치되는 서버이며 실습에서는 노드 하나 사용
파드 하나 이상의 컨테이너를 포함하고 네트워크와 설정된 볼륨을 공유하는 최소 배치, 관리 단위
컨트롤 플레인 배치와 상태 감시 담당
YAML, Deployment 원하는 설정, 개수를 선언하고 유지하는 자원 구성에 사용
Service 파드 교체와 접속 주소를 분리
PV, PVC 지속 데이터의 저장소와 인스턴스별 볼륨 요청을 구분하며 DB 구간에서 PVC 확인
k3s kubectl, YAML을 사용하는 경량 Kubernetes 배포판으로 단일 VM 실습에 사용

실습에서는 RAC 노드, CRS, SCAN, ASM과 역할을 비교함
CloudNativePG는 인스턴스별 PVC와 PostgreSQL 복제를 사용하므로 RAC와 구조가 다름

#실습 VM 준비와 설치

단계 실습 구성
별도 VM Oracle Linux 8, CPU 4, 메모리 8GB, 디스크 100GB를 해당 실습의 사양으로 제시
사전 확인 OS, 호스트, 주소, 인터넷 연결, 가용 메모리 확인
OS 단순화 스왑 비활성화, firewalld 중지, SELinux Permissive를 실습용으로 적용
설치 설치 스크립트에 kubeconfig 읽기 권한과 cgroup v1 관련 옵션 지정
기동 후 확인 k3s 서비스, 버전, 노드 Ready, 시스템 파드, 저장소와 자원 사용량 확인

OS 정책 완화, kubeconfig 권한, cgroup 옵션은 해당 실습의 설정임
kubeconfig는 OS 관리자 세션에서 복사했으며 일반 계정의 설정 여부는 확인 불가

#필수 명령어 또는 SQL

#실습용 OS 준비와 k3s 설치

k3s VM 셸 (root)객체 또는 설정을 변경함
hostnamectl set-hostname k8s1
hostname -I
cat /etc/oracle-release
ping -c 2 get.k3s.io
free -m
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
systemctl disable --now firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
getenforce
curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" INSTALL_K3S_EXEC="--kubelet-arg=fail-cgroupv1=false" sh -
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
kubectl config get-contexts

결과 해석:

스왑은 Kubernetes가 메모리를 스스로 관리한다는 원칙에 따라 끄고, /etc/fstab의 스왑 줄도 주석 처리해 재부팅 뒤에도 꺼진 상태로 둠

방화벽 중지와 SELinux Permissive는 k3s 내부 통신 포트가 많아 실습을 단순하게 하려는 설정임

설치 스크립트가 k3s 바이너리와 kubectl, crictl 링크, k3s-uninstall.sh, systemd 서비스를 만들고 바로 기동함
실습 기록: v1.36.5+k3s1이 설치되고 k3s-selinux 패키지가 함께 들어감

K3S_KUBECONFIG_MODE="644"는 /etc/rancher/k3s/k3s.yaml을 다른 계정도 읽게 하지만, 이 파일에는 클러스터 관리자 자격 증명이 들어 있어 읽기 허용 범위를 따로 검토함

fail-cgroupv1=false는 cgroup v1을 쓰는 OL 8 커널에서 kubelet이 기동을 거부하지 않게 하는 실습 옵션임

#설치 확인

k3s VM 셸 (OS 관리자)조회만 함
systemctl status k3s --no-pager
k3s --version
kubectl get nodes -o wide
kubectl get pods -A
kubectl get storageclass
kubectl top node

결과 해석: 실습 출력은 k3s 서비스 active (running), 노드 Ready, 기본 저장소 local-path를 표시함
설치 작업 파드 일부의 Completed는 작업 완료 상태임
완료된 작업 파드는 Running 상태로 유지되지 않음

시스템 구성 요소 실습의 설명
coredns 클러스터 내부 DNS
traefik 외부 접속 입구
local-path-provisioner 노드 로컬 디스크를 PV로 제공하는 저장소 자동 할당
metrics-server CPU, 메모리 사용량 수집

#선언 수와 파드 재생성 사례

실습에서는 nginx Deployment에 파드 2개를 선언하고 초기 ContainerCreating에서 Running, 준비된 파드 2/2로 바뀌는 출력을 기록했음
파드 하나를 삭제하자 새 이름의 파드가 생성되어 2개를 유지했고 이후 선언 수를 4개로 바꾼 결과도 기록했음

k3s VM 셸 (root)객체 또는 설정을 변경함
kubectl create deployment web --image=nginx --replicas=2
kubectl get deployment web
kubectl get pods -o wide
kubectl delete pod <web-으로 시작하는 파드 하나>
kubectl get pods -w
kubectl scale deployment web --replicas=4
kubectl get pods
kubectl delete deployment web

결과 해석:

웹 파드 재생성과 DB 프라이머리 역할 전환은 구분함
DB 구간은 오퍼레이터가 역할과 데이터 위치를 관리하며 수업 자료에서는 같은 이름과 PVC로 파드를 복구함

#사용 조건과 주의사항

단일 VM과 로컬 PV 구성의 실습임
VM이나 노드 전체 장애 시 고가용성은 확인 불가

실습 버전, 자원 수치와 준비 시간은 해당 기록의 값이며 현재 버전, 공통 최소 사양, 완료 시간 보장은 확인 불가

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기