쿠버네티스 완벽 가이드
도서명:쿠버네티스 완벽 가이드
저자/출판사:마사야,아오야마/길벗
쪽수:848쪽
출판일:2021-07-30
ISBN:9791165216283
목차
1장 도커 복습과 Hello, Kubernetes
__1.1 도커 복습
____1.1.1 도커 컨테이너란?
____1.1.2 도커 컨테이너 설계
____1.1.3 도커 파일 작성법
____1.1.4 도커 이미지 빌드
____1.1.5 이미지 레이어 통합과 이미지 축소화
____1.1.6 도커 레지스트리로 이미지 업로드
____1.1.7 컨테이너 기동
__1.2 쿠버네티스의 세계로
2장 왜 쿠버네티스가 필요할까?
__2.1 쿠버네티스란?
__2.2 쿠버네티스의 역사
__2.3 쿠버네티스를 사용하면 무엇을 할 수 있을까?
____2.3.1 선언적 코드를 사용한 관리(IaC)
____2.3.2 스케일링/오토 스케일링
____2.3.3 스케줄링
____2.3.4 리소스 관리
____2.3.5 자동화된 복구
____2.3.6 로드 밸런싱과 서비스 디스커버리
____2.3.7 데이터 관리
__2.4 정리
3장 쿠버네티스 환경 선택
__3.1 쿠버네티스 환경의 종류
__3.2 로컬 쿠버네티스
____3.2.1 미니큐브
____3.2.2 Docker Desktop for Mac/Windows
____3.2.3 kind
____3.2.4 로컬 쿠버네티스 정리
__3.3 쿠버네티스 구축 도구
____3.3.1 쿠버네티스 서비스 수준 목표(SLO)
____3.3.2 큐브어드민
____3.3.3 플라넬
____3.3.4 랜처
____3.3.5 그 외 구축 도구
____3.3.6 그 외 엔터프라이즈 솔루션
__3.4 퍼블릭 클라우드 관리형 쿠버네티스 서비스
____3.4.1 GKE
____3.4.2 AKS
____3.4.3 EKS
__3.5 쿠버네티스 플레이그라운드
__3.6 정리
4장 API 리소스와 kubectl
__4.1 이 책을 읽기 위한 준비
____4.1.1 kubectl 설치와 자동 완성 기능 설정
____4.1.2 쿠버네티스(GKE) 클러스터 생성
__4.2 쿠버네티스 기초
__4.3 쿠버네티스와 리소스
____4.3.1 워크로드 API 카테고리
____4.3.2 서비스 API 카테고리
____4.3.3 컨피그 & 스토리지 API 카테고리
____4.3.4 클러스터 API 카테고리
____4.3.5 메타데이터 API 카테고리
__4.4 네임스페이스로 가상적인 클러스터 분리
__4.5 커맨드 라인 인터페이스(CLI) 도구 kubectl
____4.5.1 인증 정보와 컨텍스트(config)
____4.5.2 kubectx/kubens를 사용한 전환
____4.5.3 매니페스트와 리소스 생성/삭제/갱신
____4.5.4 리소스 생성에도 kubectl apply를 사용해야 하는 이유
____4.5.5 [1.18 Beta2] Server-side apply
____4.5.6 파드 재기동
____4.5.7 generateName으로 임의의 이름을 가진 리소스 생성
____4.5.8 리소스 상태 체크와 대기(wait)
____4.5.9 매니페스트 파일 설계
____4.5.10 어노테이션과 레이블
____4.5.11 [1.18 Alpha] Prune을 사용한 리소스 삭제: -prune 옵션
____4.5.12 편집기로 편집: edit
____4.5.13 리소스 일부 정보 업데이트: set
____4.5.14 로컬 매니페스트와 쿠버네티스 등록 정보 비교 출력: diff
____4.5.15 사용 가능한 리소스 종류의 목록 가져오기: api-resources
____4.5.16 리소스 정보 가져오기: get
____4.5.17 리소스 상세 정보 가져오기: describe
____4.5.18 실제 리소스 사용량 확인: top
____4.5.19 컨테이너에서 명령어 실행: exec
____4.5.20 [1.18 Alpha] 파드에 디버깅용 임시 컨테이너 추가: debug
____4.5.21 로컬 머신에서 파드로 포트 포워딩: port-forward
____4.5.22 컨테이너 로그 확인: logs
____4.5.23 스턴을 사용한 로그 확인
____4.5.24 컨테이너와 로컬 머신 간의 파일 복사: cp
____4.5.25 kubectl 플러그인과 패키지 관리자: plugin/krew
____4.5.26 kubectl에서 디버깅
____4.5.27 kubectl의 기타 팁
__4.6 정리
5장 워크로드 API 카테고리
__5.1 워크로드 API 카테고리 개요
__5.2 파드
____5.2.1 파드 디자인 패턴
____5.2.2 파드 생성
____5.2.3 두 개의 컨테이너를 포함한 파드 생성
____5.2.4 컨테이너 로그인과 명령어 실행
____5.2.5 ENTRYPOINT 명령/CMD 명령과 command/args
____5.2.6 파드명 제한
____5.2.7 호스트의 네트워크 구성을 사용한 파드 기동
____5.2.8 파드 DNS 설정과 서비스 디스커버리
____5.2.9 정적 호스트명 해석 설정: /etc/hosts
____5.2.10 작업 디렉터리 설정
__5.3 레플리카셋/레플리케이션 컨트롤러
____5.3.1 레플리카셋 생성
____5.3.2 파드 정지와 자동화된 복구
____5.3.3 레플리카셋과 레이블
____5.3.4 레플리카셋과 스케일링
____5.3.5 일치성 기준 조건과 집합성 기준 조건
__5.4 디플로이먼트
____5.4.1 디플로이먼트 생성
____5.4.2 디플로이먼트 업데이트(레플리카셋이 생성되는) 조건
____5.4.3 변경 롤백
____5.4.4 디플로이먼트 변경 일시 중지
____5.4.5 디플로이먼트 업데이트 전략
____5.4.6 상세 업데이트 파라미터
____5.4.7 디플로이먼트 스케일링
____5.4.8 매니페스트를 사용하지 않고 디플로이먼트 생성
__5.5 데몬셋
____5.5.1 데몬셋 생성
____5.5.2 데몬셋 업데이트 전략
__5.6 스테이트풀셋
____5.6.1 스테이트풀셋 생성
____5.6.2 스테이트풀셋 스케일링
____5.6.3 스테이트풀셋의 라이프사이클
____5.6.4 스테이트풀셋 업데이트 전략
____5.6.5 영구 볼륨 데이터 저장 확인
____5.6.6 스테이트풀셋 삭제와 영구 볼륨 삭제
__5.7 잡
____5.7.1 레플리카셋과의 차이점과 잡의 용도
____5.7.2 잡 생성
____5.7.3 restartPolicy에 따른 동작 차이
____5.7.4 태스크와 작업 큐 병렬 실행
____5.7.5 [1.18 Alpha] 일정 기간 후 잡 삭제
____5.7.6 매니페스트를 사용하지 않고 잡을 생성
__5.8 크론잡
____5.8.1 크론잡 생성
____5.8.2 크론잡 일시 정지
____5.8.3 크론잡을 임의의 시점에 실행
____5.8.4 동시 실행 제어
____5.8.5 실행 시작 기한 제어
____5.8.6 크론잡 이력
____5.8.7 매니페스트를 사용하지 않고 크론잡 생성
__5.9 정리
6장 서비스 API 카테고리
__6.1 서비스 API 카테고리 개요
__6.2 쿠버네티스 클러스터 네트워크와 서비스
____6.2.1 파드에 트래픽 로드 밸런싱
____6.2.2 클러스터 내부 DNS와 서비스 디스커버리
____6.2.3 클러스터 내부 DNS와 클러스터 외부 DNS
____6.2.4 [1.18 Stable] 노드 로컬 DNS 캐시
__6.3 ClusterIP 서비스
____6.3.1 ClusterIP 서비스 생성
____6.3.2 ClusterIP 가상 IP 정적 지정
__6.4 ExternalIP 서비스
____6.4.1 ExternalIP 서비스 생성
__6.5 NodePort 서비스
____6.5.1 NodePort 서비스 생성
____6.5.2 NodePort 주의점
__6.6 LoadBalancer 서비스
____6.6.1 LoadBalancer 서비스 생성
____6.6.2 로드 밸런서에 할당되는 가상 IP 정적 지정
____6.6.3 로드 밸런서 방화벽 정책 설정
____6.6.4 GKE와 클라우드 서비스에서 주의할 점
__6.7 그 외 서비스 기능
____6.7.1 세션 어피니티
____6.7.2 노드 간 통신 제외와 발신 측 IP 주소 유지
____6.7.3 [1.18 Alpha] 토폴로지를 고려한 서비스 전송
__6.8 헤드리스 서비스(None)
____6.8.1 헤드리스 서비스 생성
____6.8.2 헤드리스 서비스로 파드명 이름 해석
____6.8.3 스테이트풀셋 외의 파드명으로 이름 해석
__6.9 ExternalName 서비스
____6.9.1 ExternalName 서비스 생성
____6.9.2 외부 서비스와 느슨한 결합 확보
____6.9.3 외부 서비스와 내부 서비스 간의 전환
__6.10 None-Selector 서비스
____6.10.1 None-Selector 서비스 생성
__6.11 인그레스
____6.11.1 리소스와 컨트롤러
____6.11.2 인그레스 리소스와 인그레스 컨트롤러
____6.11.3 인그레스 종류
____6.11.4 인그레스 컨트롤러 배포
____6.11.5 인그레스 리소스 생성을 위한 사전 준비
____6.11.6 인그레스 리소스 생성
____6.11.7 X-Forwarded-For 헤더에 의한 클라이언트 IP 주소 참조
____6.11.8 인그레스 클래스에 의한 인그레스 분리
____6.11.9 [1.18 Beta] 인그레스의 GA 승격을 위한 변경
__6.12 정리
7장 컨피그 & 스토리지 API 카테고리
__7.1 컨피그 & 스토리지 API 카테고리 개요
__7.2 환경 변수 사용
____7.2.1 정적 설정
____7.2.2 파드 정보
____7.2.3 컨테이너 정보
____7.2.4 시크릿 리소스 기밀 정보
____7.2.5 컨피그맵 리소스 설정값
____7.2.6 환경 변수 이용 시 주의 사항
__7.3 시크릿
____7.3.1 시크릿 분류
____7.3.2 일반적인 범용 용도의 시크릿(Opaque)
____7.3.3 TLS 타입 시크릿
____7.3.4 도커 레지스트리 타입의 시크릿
____7.3.5 기본 인증 타입의 시크릿
____7.3.6 SSH 인증 타입의 시크릿
____7.3.7 시크릿 사용
__7.4 컨피그맵
____7.4.1 컨피그맵 생성
____7.4.2 컨피그맵 사용
____7.4.3 시크릿과 컨피그맵의 공통 주제
__7.5 영구 볼륨 클레임
____7.5.1 볼륨, 영구 볼륨, 영구 볼륨 클레임의 차이
__7.6 볼륨
____7.6.1 emptyDir
____7.6.2 hostPath
____7.6.3 downwardAPI
____7.6.4 projected
__7.7 영구 볼륨(PV)
____7.7.1 영구 볼륨 종류
____7.7.2 영구 볼륨 생성
__7.8 영구 볼륨 클레임
____7.8.1 영구 볼륨 클레임 설정
____7.8.2 영구 볼륨 클레임 생성
____7.8.3 파드에서 사용
____7.8.4 동적 프로비저닝
____7.8.5 영구 볼륨을 블록 장치로 사용
____7.8.6 영구 볼륨 클레임 조정을 사용한 볼륨 확장
____7.8.7 [1.18 Alpha] 영구 볼륨 클레임 조정을 사용한 볼륨 온라인 확장
____7.8.8 [1.17 Beta] [1.16 Alpha] 영구 볼륨 스냅샷과 클론
____7.8.9 스테이트풀셋에서 영구 볼륨 클레임(volumeClaimTemplate)
__7.9 volumeMounts에서 사용 가능한 옵션
____7.9.1 읽기 전용(ReadOnly) 마운트
____7.9.2 subPath
__7.10 정리
8장 클러스터 API 카테고리와 메타데이터 API 카테고리
__8.1 클러스터 API 카테고리와 메타데이터 API 카테고리의 개요
__8.2 노드
__8.3 네임스페이스
____8.3.1 네임스페이스 생성
____8.3.2 네임스페이스를 지정한 리소스 획득
__8.4 정리
9장 리소스 관리와 오토 스케일링
__9.1 리소스 제한
____9.1.1 CPU/메모리 리소스 제한
____9.1.2 [1.18 Beta] Ephemeral 스토리지 리소스 제어
____9.1.3 시스템에 할당된 리소스와 Eviction 매니저
____9.1.4 GPU 등의 리소스 제한
____9.1.5 오버커밋과 리소스 부족
____9.1.6 여러 컨테이너 사용 시 리소스 할당
__9.2 Cluster Autoscaler와 리소스 부족
__9.3 LimitRange를 사용한 리소스 제한
____9.3.1 기본으로 생성되는 LimitRange
____9.3.2 컨테이너에 대한 LimitRange
____9.3.3 파드에 대한 LimitRange
____9.3.4 영구 볼륨 클레임에 대한 LimitRange
__9.4 QoS Class
____9.4.1 BestEffort
____9.4.2 Guaranteed
____9.4.3 Burstable
__9.5 리소스 쿼터를 사용한 네임스페이스 리소스 쿼터 제한
____9.5.1 생성 가능한 리소스 수 제한
____9.5.2 리소스 사용량 제한
__9.6 HorizontalPodAutoscaler
____9.6.1 [1.18 Beta] HorizontalPodAutoscaler 스케일링 동작 설정
__9.7 VerticalPodAutoscaler
__9.8 정리
10장 헬스 체크와 컨테이너 라이프사이클
__10.1 헬스 체크
____10.1.1 세 가지 헬스 체크 방법(Liveness/Readiness/Startup Probe)
____10.1.2 세 가지 헬스 체크 방식
____10.1.3 헬스 체크 간격
____10.1.4 헬스 체크 생성
____10.1.5 Liveness Probe 실패
____10.1.6 Readiness Probe 실패
____10.1.7 [1.18 Beta] [1.16 Alpha] Startup Probe를 사용한 지연 체크와 실패
__10.2 컨테이너 라이프사이클과 재기동(restartPolicy)
____10.2.1 Always
____10.2.2 OnFailure
____10.2.3 Never
__10.3 초기화 컨테이너
__10.4 기동 직후와 종료 직전에 임의의 명령어를 실행(postStart/preStop)
__10.5 파드의 안전한 정지와 타이밍
__10.6 리소스를 삭제했을 때의 동작
__10.7 정리
11장 메인터넌스와 노드 정지
__11.1 노드 정지와 파드 정지
__11.2 스케줄링 대상에서 제외와 복귀(cordon/uncordon)
__11.3 노드 배출 처리로 인한 파드 축출(drain)
__11.4 PodDisruptionBudget(PDB)을 사용한 안전한 축출
__11.5 정리
12장 유연한 고급 스케줄링
__12.1 필터링과 스코어링
__12.2 매니페스트에서 지정하는 스케줄링
__12.3 빌트인 노드 레이블과 레이블 추가
__12.4 nodeSelector(가장 단순한 노드 어피니티)
__12.5 노드 어피니티
__12.6 matchExpressions 오퍼레이터와 집합성 기준 조건
____12.6.1 In/NotIn 오퍼레이터
____12.6.2 Exits/DoesNotExit 오퍼레이터
____12.6.3 Gt/Lt 오퍼레이터
__12.7 노드 안티어피니티
__12.8 인터파드 어피니티
____12.8.1 특정 파드와 반드시 동일한 노드에서 기동
____12.8.2 특정 파드와 반드시 같은 존에 기동하고 가능하다면 같은 노드에 기동
__12.9 인터파드 안티어피니티
__12.10 여러 조건을 조합한 파드 스케줄링
__12.11 [1.18 Beta] TopologySpreadConstraints를 사용한 토폴로지 균형
__12.12 테인트와 톨러레이션
____12.12.1 테인트 부여
____12.12.2 톨러레이션을 지정한 파드 기동
____12.12.3 NoExecute 일정 시간 허용
____12.12.4 여러 개의 테인트와 톨러레이션
____12.12.5 [1.18 GA] [1.13 Beta] 장애 시 부여되는 테인트와 축출
____12.12.6 쿠버네티스가 부여하는 그 외 테인트
__12.13 PriorityClass를 이용한 파드 우선순위와 축출
____12.13.1 PriorityClass 생성
____12.13.2 [1.15 Alpha] 우선순위 축출 비활성화
____12.13.3 PriorityClass와 PodDisruptionBudget의 경합
__12.14 기타 스케줄링
__12.15 정리
13장 보****
__13.1 서비스 어카운트
____13.1.1 서비스 어카운트 생성
____13.1.2 서비스 어카운트와 토큰
____13.1.3 토큰 자동 마운트
____13.1.4 클라이언트 라이브러리와 인증
____13.1.5 도커 레지스트리 인증 정보 자동 설정
__13.2 RBAC
____13.2.1 롤과 클러스터롤
____13.2.2 롤바인딩과 클러스터롤바인딩
____13.2.3 RBAC 테스트
__13.3 보****컨텍스트
____13.3.1 특수 권한 컨테이너 생성
____13.3.2 Capabilities 부여
____13.3.3 root 파일 시스템의 읽기 전용 설정
__13.4 파드 보****컨텍스트
____13.4.1 실행 사용자 변경
____13.4.2 root 사용자로 실행 제한
____13.4.3 파일 시스템 그룹 지정
____13.4.4 sysctl을 사용한 커널 파라미터 설정
__13.5 [1.18 Beta] 파드 보****정책
____13.5.1 파드 보****정책 활성화
____13.5.2 파드 보****정책으로 파드 생성 권한 부여
____13.5.3 파드 보****정책과 레플리카셋 실행
____13.5.4 파드 보****정책 비활성화
__13.6 네트워크 정책
____13.6.1 네트워크 정책 활성화
____13.6.2 네트워크 정책 생성
____13.6.3 네트워크 정책 사례
__13.7 인증/인가와 어드미션 컨트롤
__13.8 [1.18 Alpha] 파드 프리셋
____13.8.1 파드 프리셋 생성
____13.8.2 파드 프리셋 충돌
____13.8.3 파드 프리셋 제외
__13.9 시크릿 리소스 암호화
____13.9.1 kubesec
____13.9.2 SealedSecret
____13.9.3 ExternalSecret
__13.10 정리
14장 매니페스트 범용화 오픈 소스 소프트웨어
__14.1 매니페스트 범용화
__14.2 헬름
____14.2.1 헬름 설치
____14.2.2 제공되는 차트
____14.2.3 헬름 저장소 추가
____14.2.4 차트 검색
____14.2.5 아티팩트 허브
____14.2.6 차트 설치
____14.2.7 설치한 차트 테스트
____14.2.8 템플릿으로 매니페스트 생성
____14.2.9 헬름 아키텍처
____14.2.10 릴리스 확인
____14.2.11 릴리스 삭제
____14.2.12 커스텀 차트 생성
____14.2.13 차트 패키지화와 헬름 저장소 공개
__14.3 Kustomize
____14.3.1 여러 매니페스트 결합
____14.3.2 네임스페이스 덮어 쓰기
____14.3.3 Prefix와 Suffix 부여
____14.3.4 공통 메타데이터(레이블/어노테이션) 부여
____14.3.5 images로 이미지 덮어 쓰기
____14.3.6 오버레이로 값 덮어 쓰기
____14.3.7 컨피그맵과 시크릿 동적 생성
____14.3.8 Kustomize 관련 kubectl 하위 명령
__14.4 Ksonnet
__14.5 그 외 매니페스트 관련 도구
__14.6 정리
15장 모니터링
__15.1 쿠버네티스에서의 모니터링
__15.2 데이터독
____15.2.1 데이터독 아키텍처
____15.2.2 데이터독 설치
____15.2.3 데이터독 대시보드
____15.2.4 데이터독 메트릭
____15.2.5 실무 모니터링 사례
____15.2.6 데이터독을 사용한 컨테이너 모니터링과 알림 설정
__15.3 프로메테우스
____15.3.1 프로메테우스 아키텍처
____15.3.2 프로메테우스 설치
____15.3.3 대규모 프로메테우스 운용을 지원하는 에코시스템
__15.4 정리
16장 컨테이너 로그 집계
__16.1 컨테이너에서 애플리케이션 로그 출력
__16.2 플루언트디를 사용한 로그 집계
____16.2.1 로그 저장소 선택
____16.2.2 GKE의 경우: 클라우드 로깅
____16.2.3 플루언트디와 플루언트 비트
__16.3 데이터독 로그를 사용한 로그 집계
__16.4 그라파나 로키를 사용한 로그 집계
__16.5 정리
17장 쿠버네티스 환경에서의 CI/CD
__17.1 쿠버네티스 환경에서의 CI/CD
__17.2 깃옵스
__17.3 깃옵스에 적합한 CI 도구
__17.4 CI 시 쿠버네티스 매니페스트 체크 실시
____17.4.1 큐비발
____17.4.2 Conftest
____17.4.3 Open Policy Agent/Gatekeeper
__17.5 깃옵스에 적합한 CD 도구
____17.5.1 ArgoCD
____17.5.2 시크릿 리소스의 매니페스트 암호화
__17.6 개발 환경을 정비하는 도구
____17.6.1 텔레프레전스
____17.6.2 스캐폴드
__17.7 스피네이커
____17.7.1 스피네이커 설치
____17.7.2 스피네이커 시작
__17.8 젠킨스 X
____17.8.1 젠키스 X 설치
____17.8.2 젠키스 X 시작
__17.9 정리
18장 마이크로서비스 아키텍처와 서비스 매시
__18.1 마이크로서비스 아키텍처란?
__18.2 서비스 매시란?
__18.3 이스티오
____18.3.1 이스티오 아키텍처
____18.3.2 이스티오 샘플 애플리케이션
____18.3.3 이스티오 시작
____18.3.4 각종 서비스로 시각화
__18.4 정리
19장 쿠버네티스 아키텍처의 이해
__19.1 쿠버네티스 아키텍처 개요
__19.2 etcd
__19.3 kube-apiserver
__19.4 kube-scheduler
__19.5 kube-controller-manager
__19.6 kubelet
__19.7 kube-proxy
__19.8 CNI 플러그인
__19.9 kube-dns(CoreDNS)
__19.10 cloud-controller-manager
__19.11 기타 구성 요소와 클러스터 체크
__19.12 커스텀 리소스 데피니션과 오퍼레이터
__19.13 정리
20장 쿠버네티스와 미래
__20.1 쿠버네티스와 관련된 표준화
____20.1.1 OCI와 OCI v1.0
____20.1.2 CRI
____20.1.3 CSI
____20.1.4 CNI
__20.2 쿠버네티스와 에코시스템
____20.2.1 쿠버네티스 클러스터를 배포하는 XaaS
____20.2.2 쿠버네티스 클러스터를 배포하는 서버리스
____20.2.3 Kubernetes-native Testbed를 사용한 에코시스템 동작 확인
____20.2.4 구성 커넥터를 이용한 GCP 리소스 생성 및 관리
__20.3 정리
21장 부록
__21.1 kubectl에서 사용되는 리소스****어
__21.2 자주 묻는 질문과 답변
찾아보기