만들고, 망가뜨리고, 고치며 체득하는 운영 역량과 실무 감각
[간단한 책 소개]
클러스터 장애, OOMKilled, kubectl 디버깅까지, 실제 문제 해결 과정을 경험하자.
만들고, 망가뜨리고, 고치며 체득하는 운영 실무 감각 & 문제 해결 능력!
풍부한 만화와 도해 & 실습 위주의 접근과 단계적 구성으로 쉽게 실전 감각을 키우자!
쿠버네티스는 현대 IT 인프라의 핵심 기술로, 애플리케이션을 안정적으로 운영할 수 있는 강력한 도구다. 그러나 안정적이라는 특징 때문에 트러블슈팅 경험을 쌓기가 쉽지 않다. 이 책에서는 고장난 쿠버네티스를 고치면서, 자연스럽게 문제를 마주하고 해결하는 과정을 경험한다. 컨테이너를 만들고, 클러스터에 애플리케이션을 배포한 뒤 장애를 일으켜 복구하는 시나리오를 반복하면서 쿠버네티스의 동작 원리를 몸으로 익힌다. OOMKilled 오류나 서비스 연결 문제처럼 현업에서 자주 발생하는 상황을 그대로 재현해 보며, 실제 운영에 필요한 감각을 키운다. 단순한 구축과 운영을 넘어 시스템 내부 상태를 들여다보고 한 단계 높은 운영 역량을 갖추기 위해 ‘관측 가능성’과 ‘모니터링’처럼 문제를 조기에 감지할 수 있는 도구와 방법도 설명한다. 풍부한 만화와 도해로 난해한 개념을 시각적으로 풀어내고 실습으로 이론과 실제를 긴밀히 연결하여, 쿠버네티스의 원리를 깊이 이해하고 실제 문제 해결 능력을 체득할 수 있게 구성했다.
1부 쿠버네티스 만들어 보기
1장 도커 컨테이너 만들어 보기
1.1 쿠버네티스는 왜 도커가 필요한가?
1.2 도커 알아보기
____1.2.1 도커란?
____1.2.2 컨테이너란?
____1.2.3 왜 컨테이너인가?
____1.2.4 그래서 도커란?
____1.2.5 준비: 도커 환경 만들기
____1.2.6 컨테이너 실행하기
____1.2.7 컨테이너의 틀이 되는 도커 이미지
____1.2.8 컨테이너 이미지의 설계서인 Dockerfile
____1.2.9 도커 이미지 빌드하기
____1.2.10 직접 만든 도커 이미지로 컨테이너 실행하기
____1.2.11 도커 이미지 공개하기
____1.2.12 Dockerfile 작성 팁
1.3 [만들기] 나만의 http server 컨테이너 실행하기
2장 쿠버네티스 클러스터 만들어 보기
2.1 쿠버네티스란?
____2.1.1 컨테이너를 쉽게 만들고 파기할 수 있게 된 이후의 상황
____2.1.2 쿠버네티스의 특징
____2.1.3 쿠버네티스 아키텍처 개요
____2.1.4 다양한 쿠버네티스 클러스터 구축 방법
2.2 [만들고 고치기] 쿠버네티스 클러스터 만들고 지우기
3장 전체적인 설명
3.1 학습 흐름
3.2 사용하는 애플리케이션에 대해
4장 쿠버네티스 클러스터 위에 애플리케이션 만들기
4.1 쿠버네티스 클러스터 위에 애플리케이션 실행하기
____4.1.1 리소스의 사양을 담은 매니페스트
____4.1.2 컨테이너를 실행하기 위한 최소 구성 리소스: Pod
____4.1.3 리소스가 만들어지는 공간: 네임스페이스
4.2 [만들기] Pod 만들기
____4.2.1 준비: Pod를 만들기 전에 쿠버네티스 클러스터가 준비되었는지 확인하기
____4.2.2 매니페스트 사용해 보기
____4.2.3 매니페스트를 쿠버네티스 클러스터에 적용하기
2부 애플리케이션을 망가뜨리면서 배우는 쿠버네티스
5장 트러블 슈팅 가이드와 kubectl 명령어 사용법
5.1 트러블 슈팅 가이드
____5.1.1 트러블 슈팅에 도움이 되는 Pod의 STATUS 컬럼
5.2 kubectl로 현황 파악하기
____5.2.1 리소스 확인하기: kubectl get
____5.2.2 리소스 상세 정보 출력하기: kubectl describe
____5.2.3 컨테이너의 로그 출력하기: kubectl logs
5.3 kubectl 명령어로 상세 정보 출력하기
____5.3.1 디버그용 사이드카 컨테이너 시작하기: kubectl debug
____5.3.2 컨테이너를 그 자리에서 실행하기 kubectl run
____5.3.3 컨테이너에 로그인하기: kubectl exec
____5.3.4 포트 포워딩으로 애플리케이션에 접속하기
5.4 장애를 해결하기 위한 kubectl 명령어
____5.4.1 매니페스트를 그 자리에서 편집하기: kubectl edit
____5.4.2 리소스를 삭제하기: kubectl delete
5.5 터미널을 더 편리하게 사용하기 위한 팁
____5.5.1 자동 완성 설정하기
____5.5.2 kubectl의 별명 설정하기
____5.5.3 리소스 이름 축약하기
____5.5.4 kubectl 작업을 도와주는 도구
____5.5.5 kubectl 플러그인 사용해 보기
5.6 [고치기] 디버그해 보기
____5.6.1 준비: Pod가 실행 중인 것을 확인하기
____5.6.2 애플리케이션 망가뜨리기
____5.6.3 애플리케이션 조사하기
6장 쿠버네티스 리소스 만들고 망가뜨리기
6.1 Pod의 라이프사이클 알기
6.2 Pod의 다중화를 위한 ReplicaSet과 Deployment
____6.2.1 ReplicaSet
____6.2.2 Deployment
____6.2.3 [만들고 고치기] Deployment를 만들고 망가뜨리기
6.3 Pod로의 접속을 도와주는 Service
____6.3.1 Service의 Type 알기
____6.3.2 Service를 사용한 DNS
____6.3.3 [망가뜨리기] Service 망가뜨리기
6.4 Pod의 외부에서 정보를 읽어들이는 ConfigMap
____6.4.1 환경 변수로 읽어들이기
____6.4.2 볼륨을 통해 설정 파일 읽어들이기
____6.4.3 [망가뜨리기] ConfigMap 설정으로 인한 장애!
6.5 기밀 데이터를 다루기 위한 Secret
____6.5.1 환경 변수로 읽어들이기
____6.5.2 볼륨을 사용해서 컨테이너의 설정 파일 읽어들이기
6.6 한 번만 실행하는 태스크를 위한 Job
6.7 Job을 정기적으로 실행하는 CronJob
7장 무상태 애플리케이션을 안전하게 만들기
7.1 애플리케이션의 헬스 체크
____7.1.1 Readiness probe
____7.1.2 Liveness probe
____7.1.3 Startup probe
____7.1.4 [망가뜨리기] State는 Running이지만…
7.2 애플리케이션에 적절한 리소스 지정하기
____7.2.1 Resource requests로 컨테이너의 리소스 사용량 요구하기
____7.2.2 Resource limits로 컨테이너의 리소스 사용량 제어하기
____7.2.3 리소스의 단위
____7.2.4 Pod의 Quality of Service(QoS) 클래스
____7.2.5 [망가뜨리기] 또 Pod가 고장났다
7.3 Pod 스케줄링의 편리한 기능 이해하기
____7.3.1 Node selector로 노드 지정하기
____7.3.2 Affinity와 Anti-affinity로 Pod 스케줄링을 유연하게 지정하기
____7.3.3 Pod 분산을 위한 Pod Topology Spread Constraints 설정하기
____7.3.4 Taint와 Toleration
____7.3.5 Tips: Pod Priority와 Preemption
____7.3.6 [망가뜨리기] Pod 스케줄링 실패
7.4 애플리케이션 스케일링하기
____7.4.1 수평 스케일링
____7.4.2 수직 스케일링
7.5 노드 정지에 대비하기
____7.5.1 애플리케이션의 가용성을 보증하는 PodDisruptionBudget(PDB)
8장 전체 복습: 애플리케이션 고치기
8.1 준비 환경 만들기
8.2 애플리케이션 환경 구축하기
8.3 애플리케이션 업데이트하기
8.4 정상 상태 확인하기
8.5 원인 조사하기
3부 고장나도 움직이는 쿠버네티스
9장 쿠버네티스의 구조와 아키텍처 이해하기
9.1 쿠버네티스의 아키텍처에 대하여
9.2 아키텍처 개요
9.3 쿠버네티스 클러스터의 핵심인 컨트롤 플레인
9.4 애플리케이션 실행을 담당하는 워커 노드
9.5 쿠버네티스 클러스터에 접근하기 위한 CLI: kubectl
9.6 kubectl apply 이후 컨테이너가 실행될 때까지의 흐름
9.7 [만들고, 망가뜨리기] 쿠버네티스는 부서지지 않는다?
____9.7.1 준비: 클러스터 구축하기
____9.7.2 hello-server 실행하기
____9.7.3 컨트롤 플레인 정지하기
9.8 쿠버네티스를 확장하는 방법
10장 쿠버네티스 개발 워크플로 이해하기
10.1 쿠버네티스에 배포하기
____10.1.1 Push형 배포 방법: CIOps
____10.1.2 Pull형 배포 방법: GitOps
10.2 쿠버네티스 매니페스트 관리
____10.2.1 Helm
____10.2.2 Jsonnet
____10.2.3 자체 템플릿
____10.2.4 Kustomize
____10.2.5 [만들기] Kustomize로 매니페스트를 이해하기 쉽게 만들기
11장 옵저버빌리티와 모니터링 다루기
11.1 관측 가능성에 대해 알아보자
____11.1.1 정보 수집하기: 로그
____11.1.2 측정값 처리하기: 메트릭스
____11.1.3 통신 추적하기: 트레이스
11.2 모니터링에 대해 알아보기
____11.2.1 정보를 시각화하기: 대시보드
____11.2.2 이상 경보: 알림
11.3 [만들기] 모니터링 시스템 구축하기
____11.3.1 Prometheus/Grafana 설치하기
____11.3.2 메트릭스 수집 애플리케이션 실행하기
____11.3.3 메트릭스 수집을 위한 설정
____11.3.4 Prometheus에 접속하기
____11.3.5 Grafana에 접속하기
12장 이 책 이후의 학습에 대하여
12.1 자격증 취득하기
12.2 쿠버네티스에서의 애플리케이션 운영 지식 넓히기
12.3 쿠버네티스의 장애 대응에 강해지기
12.4 쿠버네티스 커미터 되기
12.5 실력을 향상시키는 방법
____12.5.1 공식 문서 읽기
____12.5.2 내부 구현 코드 읽기
____12.5.3 책으로 쿠버네티스에 대한 지식 넓히기
____12.5.4 직접 쿠버네티스 클러스터 구축하기
____12.5.5 커스텀 컨트롤러 만들기
ㆍ지은이 타카하시 아오이
ㆍ옮긴이 이동규
ㆍ감수 이가라시 아야
저작권 안내
연관 프로그램
독자의견 남기기