서론: Bash로 Kubernetes 접착하기
- 사전 요구사항
- 왜 Bash인가
- 우리가 구축할 것
- 이 책의 구성
- 진입점: setup.sh
- datacenter.sh 시작하기
- 실습
안전 설정, 초기화 및 생명주기 훅
- 전역 Set 옵션
- 셸 스크립트 린팅: shellcheck
- 스크립트 초기화
- 메인 컨트롤러
- 오류 핸들러
- 종료 핸들러
- 모두 합치기
- 실습 문제
종료 코드와 제어된 종료
- script_exit 함수
- 종료 코드 규약
- Bash 안전 패턴 복습
- 업데이트된 스크립트
- 실습
Cron 모드와 IO 리디렉션
- Cron 모드가 하는 일
- 파일 디스크립터
- Cron 모드를 위한 리디렉션
- 오류 핸들러 업데이트
- 종료 핸들러 업데이트
- main에 cron_init 등록
- 업데이트된 스크립트
- 실습
라이브러리 패턴: Bash 코드베이스 구성
- lib/ 디렉토리
- main에서 라이브러리 로딩
- 라이브러리 파일 작성
- 명명 규칙
- 의존성 그래프
- 지금 알아두면 좋은 두 가지 유틸리티 라이브러리
- 실습 문제
터미널 색상과 로깅
- 로깅 라이브러리
- 색상 초기화
- log 함수
- verbose_print — 상세 모드 출력
- init 업데이트
- main 업데이트
- 오류 핸들러 업데이트
- 실습
검증 헬퍼와 바이너리 체크
- lib/script.sh
- check_binary — 필수 도구 감지
- check_required_binaries — 시스템 사전 조건
- is_kind — 모드 감지
- check_arguments — 변수 존재 검증
- check_directories — 경로 검증
- check_files — 파일 존재 검증
- check_repos — 리포지토리 존재 가드
- build_path — PATH 구축
- init 체인에서 헬퍼 사용
- 실습 문제
구성 관리
- 구성 파일
- lib/config.sh
- get_configurations — 대화형 설정
- main에서 구성 읽기
- Docker 네트워크 모드
- 실습 문제
스크립트 잠금: 동시 실행 방지
- 왜 파일이 아닌 디렉토리인가
- lock_init
- 오래된 잠금 처리
- 실습
완전한 매개변수 파싱
- parse_params
- script_usage — 도움말 텍스트
- parse_params를 main에 연결
- 실습 문제
로컬 모드와 Kind 클러스터 관리
- 왜 Kind인가
- lib/kind.sh
- start_env — Kind 클러스터 생성
- stop_env — 클러스터 중지
- delete_env — 클러스터 삭제
- Kind에 이미지 로드
- Docker 환경 전환 불필요
- 실습 문제
Docker 작업
- lib/docker.sh
- safe_docker — 기본 래퍼
- safe_docker_build — 이미지 빌드
- safe_docker_run — 컨테이너 실행
- Kind에 이미지 로드
- Docker Compose 작업
- docker_cleanup — 중단된 컨테이너 및 이미지 제거
- 실습 문제
kubectl로 Kubernetes 관리
- lib/kubectl.sh
- safe_kubectl — 기본 래퍼
- kubectl_install_resource_from_file
- kubectl_install_database — PostgreSQL 설정
- kubectl_restart — 롤링 재시작
- DNS 관리
- 모든 Deployment 재시작
- 실습 문제
Helm: Kubernetes용 패키지 관리
- lib/helm.sh
- safe_helm — 기본 래퍼
- k8s/의 Helm 차트
- helm_install_service — 범용 서비스 설치기
- helm_install_core_service — 템플릿 기반 서비스
- 구성 릴리스 설치
- 업데이트 함수 — 제자리 업그레이드
- Traefik — Ingress 컨트롤러
- 실습 문제
서비스 빌드
- 빌드 파이프라인
- lib/build.sh
- build_service — 핵심 빌드 함수
- 서비스 그룹 함수
- build_images_init — 빌드 디스패처
- lib/install_deps.sh
- check_registry
- 실습 문제
제로부터 프로비저닝
- 시스템 아키텍처
- 완전한 프로비저닝 시퀀스
- 단계별 설명
- 지원 함수
- Kubernetes 클러스터 매개변수
- Kubernetes 매니페스트 참조
- 실습 문제
- 성공의 모습
리로드와 복구 작업
- lib/reload_services.sh
- reload_services — 경량 서비스 갱신
- reload_services_init — 리로드 디스패처
- lib/reload_kubernetes.sh
- reload_all_kubernetes — 전체 클러스터 재구축
- 실습 문제
해체와 정리
- 환경 중지
- 환경 삭제
- 완전한 Kubernetes 해체
- Docker 정리
- 종료 핸들러: 완전한 버전
- 전체 스크립트 종합
- 완전한 main() 함수
- 완전한 init 함수
- 완전한 생명주기
- 당신이 구축한 개발자 경험
- 실습 문제
ArgoCD를 사용한 GitOps
- lib/argocd.sh
- safe_argocd — 기본 래퍼
- helm_install_argocd — 컨트롤러 설치
- argocd_wait_ready — 시작 확인
- argocd_login — CLI 인증
- argocd_create_app — 애플리케이션 등록
- argocd_sync — 동기화 시작
- argocd_wait_healthy — 동기화 완료 대기
- argocd_delete_app — 애플리케이션 제거
- ArgoCD를 datacenter.sh에 통합
- OpenShift에 대한 참고
- 실습 문제
Prometheus와 Grafana를 사용한 메트릭과 대시보드
- lib/monitoring.sh
- helm_install_monitoring — 전체 스택
- monitoring_wait_ready — 시작 확인
- monitoring_port_forward — 로컬 접근
- monitoring_apply_servicemonitor — 서비스 스크랩
- monitoring_get_grafana_password — 자격 증명 조회
- 모니터링을 datacenter.sh에 통합
- kube-prometheus-stack이 제공하는 것
- 실습 문제
OpenTelemetry를 사용한 분산 트레이싱
- lib/otel.sh
- safe_otel — 기본 래퍼
- helm_install_otel_operator — Operator 설치
- otel_wait_ready — Operator 실행 확인
- otel_apply_collector — 컬렉터 배포
- otel_apply_instrumentation — 코드 변경 없는 자동 계측
- otel_wait_collector_ready — 컬렉터 확인
- Grafana Tempo — 트레이스 백엔드
- OTel을 datacenter.sh에 통합
- 트레이스, 메트릭, 로그를 잇기
- 실습 문제
부록: datacenter.sh 명령 참조
- setup.sh
- datacenter.sh
- 종료 코드
- 체인 가능 vs 비체인 가능 매개변수
- 일반 워크플로우
- 문제 해결