[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로 확인해보자.
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 관점에서 분석해보자.
NodeResourcesFit 전략, 리소스 단편화 문제, 스케줄러 성능 튜닝, 멀티 프로필 구성을 알아보자.
파드가 실행될 노드를 제어하기 위한 다양한 설정과 스케줄링 게이트에 대해 알아보자.
Kubernetes 스케줄러의 파드 배치 프로세스와 선점 메커니즘에 대해 알아보자.
Kubernetes에서의 파드 스케줄링 개념에 대해 알아보자.
kubeconfig 파일의 전체 필드 스펙을 상세히 살펴보자.
여러 Kubernetes 클러스터를 하나의 kubeconfig로 관리해보자.
Kubernetes 클러스터 접근 설정 파일인 kubeconfig의 개념, 구조, 사용법에 대해 알아보자.
Kubernetes 클러스터의 인증서 인프라에 대해 알아보자.
쿠버네티스에서 스왑 비활성화가 권장되는 이유와 최신 NodeSwap 기능을 살펴본다.