k3s와 Kubernetes 구성 요소
단일 VM의 k3s 구성과 노드, 파드, 선언형 자원, 서비스, 영속 저장소의 역할
#핵심 요약
실습에서는 별도 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 설치
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이 기동을 거부하지 않게 하는 실습 옵션임
#설치 확인
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개로 바꾼 결과도 기록했음
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이나 노드 전체 장애 시 고가용성은 확인 불가
실습 버전, 자원 수치와 준비 시간은 해당 기록의 값이며 현재 버전, 공통 최소 사양, 완료 시간 보장은 확인 불가