[Kubernetes] Cluster: Kubespray를 이용해 클러스터 구성하기 - 8. 오프라인 배포: kubespray-offline - 3. contrib/offline vs. kubespray-offline
Kubespray 공식 contrib/offline 스크립트와 kubespray-offline 프로젝트를 비교하며, 각각의 구조와 커버리지 차이를 파악해보자.
Kubespray 공식 contrib/offline 스크립트와 kubespray-offline 프로젝트를 비교하며, 각각의 구조와 커버리지 차이를 파악해보자.
RKE2가 무엇이고, K3s 및 기존 프로비저닝 도구와 어떻게 다른지 살펴보자.
Vagrant로 환경을 준비하고, RKE2 서버 노드를 설치한 뒤 기본 상태를 확인해보자.
RKE2 서버 노드에서 생성된 디렉터리, static pod manifest, 보안 설정을 표준 Kubernetes와 비교해 살펴보자.
RKE2 에이전트 노드를 설치하고 서버 노드에 조인한 뒤, 샘플 파드 배포로 클러스터를 확인한다.
RKE2 클러스터의 인증서 구조와 갱신 메커니즘을 확인해보자.
RKE2 클러스터의 수동 업그레이드 절차를 이해하고 Installation Script 방식으로 확인해보자.
system-upgrade-controller를 이용한 RKE2 클러스터 자동 업그레이드 방식을 이해해 보자.
K3s 컨트롤 플레인 노드를 제거 후 재설치하는 과정에서 발생한 Split Brain 문제의 원인과 해결 과정을 정리한다.
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 명령어의 동작 원리와 각 단계를 살펴보자.
노드 정보, 인증서, kubeconfig, Static Pod, 애드온 등 kubeadm init을 통해 구성된 컨트롤 플레인 컴포넌트를 상세히 확인해보자.
Flannel CNI를 설치하고, iptables와 conntrack을 통해 Kubernetes 네트워킹이 Linux에서 어떻게 구현되는지 확인해보자.
kubeadm init을 실행하여 컨트롤 플레인을 구성하고, kubectl 편의 도구를 설치해보자.
kubeadm을 사용한 클러스터 구성을 위해 필요한 사전 설정, CRI(containerd) 설치, kubeadm/kubelet/kubectl 설치를 수행해보자.
kubeadm init 명령어의 동작 원리와 각 단계를 살펴보자.
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를 설치하고 클러스터에 등록해보자.
CNI의 동작 원리와 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를 따라 자동화 도구 없이 쿠버네티스 클러스터를 손으로 직접 구성해보자.
Kubernetes 스케줄러의 파드 배치 프로세스와 선점 메커니즘에 대해 알아보자.
Kubernetes에서의 파드 스케줄링 개념에 대해 알아보자.
kubeconfig 파일의 전체 필드 스펙을 상세히 살펴보자.
여러 Kubernetes 클러스터를 하나의 kubeconfig로 관리해보자.
Kubernetes 클러스터 접근 설정 파일인 kubeconfig의 개념, 구조, 사용법에 대해 알아보자.
Kubernetes 클러스터의 인증서 인프라에 대해 알아보자.
쿠버네티스에서 스왑 비활성화가 권장되는 이유와 최신 NodeSwap 기능을 살펴본다.