[EKS] EKS: Overview
AWS의 관리형 Kubernetes 서비스인 EKS가 무엇인지 간단히 살펴보자.
AWS의 관리형 Kubernetes 서비스인 EKS가 무엇인지 간단히 살펴보자.
EKS 데이터 플레인을 구성하는 네 가지 방식을 비교하고, 관리형 노드 그룹의 동작 원리를 살펴보자.
EKS에서 컨트롤 플레인과 데이터 플레인이 어떻게 통신하는지, AWS 네트워킹 기초와 EKS Owned ENI의 역할을 살펴보자.
EKS 스터디를 위한 실습 환경을 구성해보자.
EKS 클러스터를 배포하기 위한 방법을 비교하고, 이번 실습에서 사용할 Terraform의 핵심 개념을 살펴보자.
Public-Public 엔드포인트 구성을 가진 EKS 클러스터를 배포하기 위한 Terraform 코드를 분석해보자.
Terraform init/plan/apply를 실행하고, Public-Public 구성의 EKS 클러스터 배포 결과를 확인하자.
kubeconfig를 설정하고, EKS API 서버가 IAM 자격증명을 인증하는 구조를 확인해보자.
EKS 클러스터의 구성 요소를 확인하고, 온프레미스 Kubernetes와의 구조적 차이를 분석해보자.
SSH로 워커 노드에 접속하여 kubelet, containerd, 인증서 등 노드 내부 구성을 확인해보자.
EKS 클러스터에 생성된 네트워크 인터페이스를 콘솔에서 확인하고, EKS Owned ENI의 정체를 파악해보자.
Public-Public 구성에서 API 서버 엔드포인트 구성에 대해 살펴보자.
EKS에서 달라지는 것과 달라지지 않는 것을 정리해보자.
쿠버네티스 네트워킹의 4가지 문제와 핵심 원칙인 ‘NAT 없이’에 대해 알아보자.
쿠버네티스 네트워킹 모델의 핵심인 파드 간 통신을 같은 노드, 다른 노드로 나누어 살펴보자.
쿠버네티스 Service와 kube-proxy가 제공하는 고수준 네트워킹 추상화에 대해 알아보자.
AWS VPC CNI의 구조와 동작 원리에 대해 살펴보자.
VPC CNI 실습을 위한 2주차 EKS 환경을 Terraform으로 구성해 보자.
배포된 EKS 클러스터의 네트워크 구성을 노드 수준에서 직접 확인하고, VPC CNI가 ENI와 보조 IP를 어떻게 관리하는지 살펴보자.
VPC CNI가 파드 네트워크를 구성하는 와이어링 과정과 파드 간 패킷 흐름을 tcpdump로 추적해 보자.
VPC CNI 환경에서 파드가 인터넷과 통신할 때 SNAT이 어떻게 동작하는지 tcpdump와 iptables로 확인해보자.
EKS에서 두 인증 체계(K8s와 AWS IAM)가 만나면서 생기는 근본 문제와 세 가지 인증 흐름을 정리해 보자.
K8S API 서버로 들어오는 모든 요청이 거치는 파이프라인을 TLS, 인증, 인가, Admission Control까지 정리해 보자.
K8s가 직접 관리하는 non-human identity인 Service Account의 개념과 토큰 생명주기를 정리해 보자.
K8S RBAC에서 의도치 않은 권한 상승이 발생할 수 있는 경로를 정리하고, 안전한 설계 원칙을 살펴보자.
4주차 인증/인가 실습을 위한 EKS 환경을 배포해 보자.
사용자(IAM)가 kubectl로 EKS API 서버에 접근할 때 인증되고 인가되기까지의 전 과정을 단계별로 따라가 보자.
사용자(IAM) → K8s API 인증 과정을 단계별로 실습하며, 토큰 생성부터 STS 검증까지의 전 과정을 직접 확인해 보자.
인증 완료 후 인가를 위해 IAM identity를 K8s username/group으로 변환하는 브릿지 단계에 대해 정리해 보자.
Access Entry 확인, SubjectAccessReview, 새 IAM Role 생성과 권한 테스트를 통해 매핑과 인가 과정을 직접 확인해 보자.
EKS GPU 트러블슈팅 실습을 진행해보자.
GPU 인스턴스를 띄우기 위한 EC2 Service Quota 확인과 증설 과정에 대해 알아 보자.
GPU 트러블슈팅 실습을 위한 EKS 환경을 Terraform으로 구성해 보자.
Terraform으로 GPU 트러블슈팅 실습 환경을 배포하고, 클러스터 기본 사항을 확인해 보자.
GPU 노드를 프로비저닝하고 GPU Operator를 설치한 뒤, Allocatable GPU와 nvidia-smi로 end-to-end 검증해 보자.
Device Plugin 비활성화로 GPU Pod Pending 장애를 재현하고, Pod에서 ClusterPolicy까지 단계별로 원인을 추적해 보자.
A10G 24GB에 vLLM 14B-AWQ를 올려 vLLM 기동 실패 시나리오 4가지를 재현하고, kubectl logs –previous 중심의 디버깅 경로를 짚어 보자.
분산학습의 원리, NCCL 통신 계층, EKS에서의 실험 설계까지 분산학습 장애 실험 설계의 배경에 대해 정리해보자.
EKS node SG에서 ephemeral self-ref를 제거하면 분산학습이 어떻게 실패하는지 재현해 보자.
EKS 관리형 환경에서 재현할 수 없는 GPU 주제 3가지를, 문서 탐구와 실무 경험 매핑으로 정리해 보자.
EKS GPU 트러블슈팅 시리즈를 마무리하며, 실습에서 도출한 운영 체크리스트와 회고를 정리한다.
NVIDIA GPU에 GPU Time Slicing을 실제로 적용해보자.
NVIDIA GPU Time Slicing의 동작 원리와 ConfigMap 설정 방법을 알아보자.
GPU Time Slicing에 대해 알아보자.
system-upgrade-controller를 이용한 RKE2 클러스터 자동 업그레이드 방식을 이해해 보자.
RKE2 클러스터의 수동 업그레이드 절차를 이해하고 Installation Script 방식으로 확인해보자.
RKE2 클러스터의 인증서 구조와 갱신 메커니즘을 확인해보자.
RKE2 에이전트 노드를 설치하고 서버 노드에 조인한 뒤, 샘플 파드 배포로 클러스터를 확인한다.
RKE2 서버 노드에서 생성된 디렉터리, static pod manifest, 보안 설정을 표준 Kubernetes와 비교해 살펴보자.
Vagrant로 환경을 준비하고, RKE2 서버 노드를 설치한 뒤 기본 상태를 확인해보자.
RKE2가 무엇이고, K3s 및 기존 프로비저닝 도구와 어떻게 다른지 살펴보자.
Kubespray 공식 contrib/offline 스크립트와 kubespray-offline 프로젝트를 비교하며, 각각의 구조와 커버리지 차이를 파악해보자.
Kubespray의 다운로드 메커니즘과 변수 체계, 그리고 공개 미러 설정 방법을 이해해보자.
Kubespray 공식 문서 offline-environment.md를 분석하며, 오프라인 배포에 필요한 아티팩트, 서빙 인프라, 변수 설정 전반을 이해해보자.
kubespray-offline이 무엇을, 왜 자동화하는지 이해하기 위한 청사진을 그려보자.
폐쇄망 환경에서 Go 모듈 설치를 위한 사설 Go 모듈 프록시(Athens)를 구축해보자.
폐쇄망 환경에서 Python 패키지 설치를 위한 사설 PyPI 미러(devpi-server)를 구축해보자.
폐쇄망 환경에서 컨테이너 이미지 배포를 위한 사설 컨테이너 레지스트리를 구축해보자.
폐쇄망 환경에서 OS 패키지 설치를 위한 로컬 YUM/DNF 저장소를 구축해보자.
폐쇄망 환경에서 노드 간 시간 동기화를 위한 NTP 서버와, 내부 도메인 이름 해석을 위한 DNS 서버를 구축해보자.
폐쇄망 환경 시뮬레이션을 위해 admin을 NAT Gateway로 구성하고, k8s-node의 인터넷 직접 접근을 차단해보자.
폐쇄망 Kubernetes 클러스터 배포를 위한 Vagrant 실습 환경을 구성하고, 네트워크 구조를 확인해보자.
폐쇄망(Air-Gapped) 환경에서 Kubernetes 클러스터를 배포하기 위해 무엇이 필요한지 전체 그림을 그려보자.
Kubespray의 클러스터 초기화 플레이북 reset.yml의 전체 흐름과 구조를 분석해보자.
Kubespray의 노드 제거 플레이북 remove-node.yml의 전체 흐름과 구조를 분석해보자.
Kubespray의 노드 추가 플레이북 scale.yml의 전체 흐름과 구조를 분석해보자.
Kubespray의 노드 관리 Playbook(scale.yml, remove-node.yml, reset.yml) 개요
Kubespray로 HA Control Plane 클러스터를 배포하고 Client-Side LB 구성을 확인해보자.
Kubespray로 HA Control Plane 클러스터를 배포하고 Client-Side LB 구성을 확인해보자.
External LB(HAProxy) + HA Control Plane + Client-Side LB 실습 환경을 구성해보자.
Kubernetes Control Plane HA 구성의 3가지 패턴을 이해하고 Kubespray 설정 방법을 알아보자.
Kubespray의 cluster.yml 플레이북을 실행해 클러스터를 배포해보자.
Kubespray 인벤토리를 구성하고 클러스터 배포를 위한 변수를 수정한다.
cluster.yml을 이용해 클러스터 배포 실습을 위한 환경을 구성해보자.
Kubespray cluster.yml의 세 번째 단계인 Prepare for etcd install 플레이를 분석해보자.
Kubespray cluster.yml의 두 번째 단계인 internal_facts.yml을 분석해보자.
Kubespray cluster.yml의 첫 번째 단계인 boilerplate.yml을 분석해보자.
cluster.yml의 15개 플레이와 태스크 구조를 –list-tasks로 분석해보자.
Kubespray의 메인 플레이북 cluster.yml의 전체 흐름과 구조를 분석해보자.
Kubespray의 kubespray_defaults 역할과 변수 시스템을 분석해보자.
Kubespray의 group_vars 디렉토리 구조와 주요 설정 변수들을 확인해보자.
Kubespray의 변수 배치 전략을 이해하고, 변수 분석 시 어디를 봐야 하는지 파악해보자.
Kubespray에서 사용하는 ansible.cfg 설정을 상세히 분석하고, 환경에 맞게 커스터마이징하는 방법을 알아보자.
Kubespray 프로젝트의 전체 디렉토리 구조를 살펴보고, 핵심 파일들을 파악해보자.
Kubernetes The Hard Way에서 수동으로 진행했던 작업들을 Kubespray로 자동화하여 클러스터를 구성해보자.
Kubespray의 핵심 기능과 동작 원리를 살펴보고, Kubernetes The Hard Way 및 kubeadm과 비교해보자.
Kubespray가 제공하고자 하는 것과 자동화 도구의 양면성을 살펴보자.
kubeadm join을 실행하여 워커 노드를 클러스터에 추가해보자.
kubeadm join 명령어의 동작 원리와 각 단계를 살펴보자.
kubeadm init으로 배포된 Static Pod(etcd, API Server, Scheduler, Controller Manager)와 필수 애드온(CoreDNS, kube-proxy)을 상세히 확인해보자.
kubeadm init 이후 노드 정보, 인증서, kubeconfig를 상세히 확인해보자.
Kubernetes 네트워킹이 Linux 네트워크 스택(iptables, conntrack) 위에서 어떻게 동작하는지 살펴보자.
Flannel CNI를 설치하고 Pod 네트워크를 구성해보자.
kubectl 관련 편의 도구를 설치하여 클러스터 관리 환경을 구성해보자.
kubeadm init을 실행하여 컨트롤 플레인을 구성하고 초기 상태를 확인해보자.
kubeadm 클러스터 구성을 위해 CRI(containerd)를 설치하고, kubeadm/kubelet/kubectl을 설치해보자.
kubeadm 클러스터 구성을 위해 실습 환경을 확인하고, 시간 동기화·SELinux·Swap·커널 모듈 등 사전 설정을 수행해보자.
kubeadm init 명령어의 동작 원리와 각 단계를 살펴보자.
kubeadm 클러스터 구성 실습에서 각 단계별 조감도를 그려보자.
kubeadm의 개념과 설계 철학, 주요 명령어를 살펴보고, Kubernetes The Hard Way와 비교해보자.
Ansible의 철학이 Kubespray에서 어떻게 구현되어 있는지 살펴보자..
Ansible 태그를 활용하여 플레이북의 특정 작업만 선택적으로 실행하거나 건너뛰는 방법을 실습해보자.
Ansible 롤(Role)을 활용하여 재사용 가능한 Playbook 구조를 만드는 방법을 실습해보자.
Ansible 핸들러(Handler)와 작업 실패 처리 방법을 실습해보자.
Ansible 조건문(when)을 활용하여 특정 조건에서만 작업을 실행하는 방법을 실습해보자.
Ansible 반복문(loop)을 활용하여 동일한 작업을 여러 항목에 대해 효율적으로 실행하는 방법을 실습해보자.
Ansible이 관리 호스트에서 자동으로 수집하는 팩트의 개념과 활용법을 실습해보자.
Ansible 변수의 종류와 우선순위를 이해하고, 다양한 변수 선언 방법을 실습해보자.
Ansible Playbook의 구조와 문법을 이해하고, 조건문을 활용한 멀티 OS 환경 관리를 실습해보자.
Ansible 설정 파일 구성과 Ad-hoc 명령어를 통해 인벤토리에 정의된 호스트에 간단한 작업을 실행해보자.
Ansible 인벤토리의 개념과 형식, 구성 요소를 이해하고 실습 환경에서 인벤토리 파일을 작성해보자.
Ansible Control Node 설정과 SSH 키 기반 인증 구성을 통해 Kubespray 실습 환경을 준비해보자.
Ansible의 구성 요소, 동작 원리, 멱등성 등 핵심 개념을 정리해보자.
Ansible의 탄생 배경과 설계 철학을 살펴보자.
구성한 Kubernetes 클러스터가 정상적으로 동작하는지 다양한 테스트를 통해 검증해보자.
서로 다른 노드의 Pod 간 통신을 위해 수동 라우팅을 설정해보자.
Jumpbox에서 원격으로 클러스터를 관리할 수 있도록 kubectl을 설정해보자.
Worker Node에 containerd, kubelet, kube-proxy를 설치하고 클러스터에 등록해보자.
Worker Node 컴포넌트 설정 파일들을 분석해보자.
Kubernetes Control Plane 컴포넌트들을 server 노드에 배포하고 시작해보자.
Kubernetes Control Plane 컴포넌트들의 systemd unit 파일과 설정 파일을 분석해보자.
Kubernetes 클러스터의 핵심 데이터 저장소인 etcd를 Control Plane 노드에 구성하고 시작해보자.
Kubernetes Secret 데이터를 암호화하기 위한 encryption-config.yaml 설정 파일을 생성하고 Control Plane에 배포해보자.
OpenSSL을 사용하여 각 컴포넌트를 위한 kubeconfig 파일을 생성하고 배포해보자.
kubeconfig의 개념과 구성 요소, Node Authorizer의 동작 원리를 이해해보자.
OpenSSL을 사용하여 Root CA 인증서와 각 컴포넌트 인증서를 생성하고 배포해보자.
Kubernetes 클러스터의 인증서 생성을 위한 OpenSSL 설정 파일(ca.conf)의 구조를 분석해보자.
Kubernetes 클러스터 구성에 필요한 TLS, mTLS, X.509, PKI 개념을 이해해보자.
클러스터 구성에 필요한 모든 머신 정보를 Machine Database에 정리하고, SSH 키 기반 인증과 호스트명 설정을 통해 자동화된 스크립트 실행 기반을 마련해보자.
Jumpbox에 Kubernetes The Hard Way 저장소를 클론하고, 클러스터 구성에 필요한 모든 바이너리(kubectl, kube-apiserver, etcd 등)를 다운로드하여 역할별로 분류해보자.
VirtualBox와 Vagrant를 사용하여 Kubernetes 실습을 위한 4대의 가상 머신(jumpbox, server, node-0, node-1)을 구성하고 초기 설정을 완료해보자.
Kubernetes The Hard Way를 따라 자동화 도구 없이 쿠버네티스 클러스터를 손으로 직접 구성해보자.
CNI의 배경과 개념, 플러그인 구조, 설정, 동작 방식(VXLAN 오버레이, VTEP, 라우팅), 그리고 Pod 네트워킹 구조에 대해 알아보자.
ConfigMap 일반 mount와 subPath mount의 업데이트 반영 차이를 inode 관점에서 분석해보자.
PVC 리사이징, 볼륨 스냅샷/복원, 그리고 Pod 수명 주기에 종속되는 Ephemeral PersistentVolume을 알아보자.
관리자가 PV를 수동으로 생성하는 정적 프로비저닝과, 노드 로컬 PV의 생성/요청/해제/재활용 과정을 알아보자.
영속 스토리지의 핵심 추상화인 PV, PVC, StorageClass 개념과 동적 프로비저닝, 접근 모드, CSI 드라이버를 알아보자.
ConfigMap, Secret, Downward API 데이터를 볼륨으로 컨테이너에 파일로 주입하는 방법과 projected 볼륨을 알아보자.
image 볼륨으로 컨테이너 이미지의 파일을 다른 컨테이너에 마운트하고, hostPath 볼륨의 동작과 위험성을 알아보자.
emptyDir 볼륨으로 컨테이너 재시작 간 데이터를 유지하고, init 컨테이너로 초기화하며, 컨테이너 간 파일을 공유하는 방법을 알아보자.
Kubernetes Pod에서 볼륨이 필요한 이유와 마운트 기초, 볼륨 타입 개요를 알아보자.
Downward API를 이용해 파드 메타데이터와 컨테이너 리소스 정보를 어플리케이션에 전달하는 방법을 알아보자.
Secret을 이용해 민감 데이터를 관리하고 파드에 전달하는 방법과 보안 고려사항을 알아보자.
ConfigMap을 이용해 설정 데이터를 파드에서 분리하고 환경 변수로 주입하는 방법을 알아보자.
Kubernetes 파드에서 컨테이너의 커맨드, 인자, 환경 변수를 설정하는 방법을 알아보자.
NodeResourcesFit 전략, 리소스 단편화 문제, 스케줄러 성능 튜닝, 멀티 프로필 구성을 알아보자.
파드가 실행될 노드를 제어하기 위한 다양한 설정과 스케줄링 게이트에 대해 알아보자.
Kubernetes 스케줄러의 파드 배치 프로세스와 선점 메커니즘에 대해 알아보자.
Kubernetes에서의 파드 스케줄링 개념에 대해 알아보자.
kubeconfig 파일의 전체 필드 스펙을 상세히 살펴보자.
여러 Kubernetes 클러스터를 하나의 kubeconfig로 관리해보자.
Kubernetes 클러스터 접근 설정 파일인 kubeconfig의 개념, 구조, 사용법에 대해 알아보자.
Kubernetes 클러스터의 인증서 인프라에 대해 알아보자.
쿠버네티스에서 스왑 비활성화가 권장되는 이유와 최신 NodeSwap 기능을 살펴본다.