개발자를 위한 쿠버네티스 [쿠버네티스 환경에서 컨테이너와 애플리케이션 개발 및 운영 가이드]
- 원서명Kubernetes for Developers: Use Kubernetes to develop, test, and deploy your applications with the help of containers (ISBN 9781788834759)
- 지은이조셉 헥(Joseph Heck)
- 옮긴이이준
- ISBN : 9791161752785
- 35,000원
- 2019년 03월 22일 펴냄
- 페이퍼백 | 456쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 클라우드 컴퓨팅
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
요약
쿠버네티스는 구글에서 개발하고 오픈소스로 공개한 컨테이너 오케스트레이션 플랫폼이다. 쿠버네티스를 이용하면 컨테이너화된 애플리케이션을 손쉽게 배포하고 관리 및 운영할 수 있기 때문에 클라우드 환경에서 핵심 소프트웨어로 자리 잡고 있다.
이 책은 쿠버네티스를 이해하기 위한 기본 콘셉트를 잘 설명하고 있다. 또한 예제를 통해 개발 과정에서 필요한 소스코드를 관리, 빌드, 테스트 및 배포하는 방법을 알려주고 운영 과정에서 필요한 로깅 및 모니터링 방법을 상세하게 설명한다. 클라우드 환경에서 데브옵스(DevOps)를 실현할 수 있는 좋은 지침서가 될 것이다.
이 책에서 다루는 내용
■ 소프트웨어를 컨테이너로 빌드하는 방법
■ 쿠버네티스 내에서 컨테이너 형태로 실행되는 소프트웨어 배포 및 디버깅 방법
■ 쿠버네티스를 통한 인프라 선언 및 컨피그레이션 추가 방법
■ 내/외부 서비스를 활용해 애플리케이션 간 상호작용 방법
■ 쿠버네티스가 서비스를 관리할 수 있도록 코드에 피드백을 추가하는 방법
■ 운영 환경에서 통합 테스팅을 통한 모니터링 및 지표 측정 방법
이 책의 대상 독자
개발 중인 코드를 테스트하고 실행하는 데 관심이 있거나 책임이 있는 풀스택 또는 백엔드 소프트웨어 개발자인 경우, 쿠버네티스를 사용해서 해당 프로세스를 간단하고 일관성 있게 만들 수 있다. 쿠버네티스 환경에서 코드를 빌드하고 테스트, 배포, 실행하는 방법에 대한 Node.js 및 파이썬 개발자 중심의 예제를 찾고 있다면 이 책이 완벽한 가이드를 제공해줄 것이다.
이 책의 구성
1장, ‘개발자를 위한 쿠버네티스 설정’에서는 kubectl, 미니큐브(minikube) 및 도커(Docker) 설치 방법, kubectl과 미니큐브를 통한 설치 검증 방법을 제공한다. 또한 쿠버네티스에서의 노드, 팟, 레플리카셋 및 디플로이먼트 개념을 소개한다.
2장, ‘쿠버네티스에서 코드 패키징 방법’에서는 파이썬과 Node.js 예제를 통해 쿠버네티스를 사용하기 위해 컨테이너 내에 코드를 패키징하는 방법을 설명한다.
3장, ‘쿠버네티스에서 코드와 상호작용’에서는 컨테이너를 실행하는 방법과 컨테이너에 액세스하는 방법을 다루고 쿠버네티스의 서비스, 라벨과 셀렉터의 개념을 소개한다.
4장, ‘선언형 인프라스트럭처’에서는 선언형 구조로 애플리케이션을 표현하는 방법에 대해 다루고, 컨피그맵, 어노테이션 및 시크릿 등의 쿠버네티스 개념을 활용해 이를 확장하는 방법을 소개한다.
5장, ‘팟과 컨테이너의 라이프사이클’에서는 컨테이너와 팟의 라이프사이클에 대해 살펴보고 쿠버네티스가 코드를 실행하는 방식에 영향을 주기 위해 애플리케이션의 훅을 노출하는 방법과 코드를 정상적으로 종료하는 방법을 소개한다.
6장, 쿠버네티스에서 백그라운드 프로세스’에서는 생성 쿠버네티스에서 배치 프로세스 콘셉트인 잡과 크론잡에 대해 설명하고 쿠버네티스에서 Persistent Volume, Persistent Volume Claim 및 Stateful set을 통해 퍼시스턴스(Persistence) 속성을 지원하는 방법을 소개한다.
7장, ‘모니터링과 메트릭’에서는 모니터링 방법을 다루고 프로메테우스와 그라파나를 활용해 쿠버네티스와 애플리케이션에 대한 메트릭을 캡처하고 간단한 대시보드를 통해 이를 보여주는 방법을 소개한다.
8장, ‘로깅 및 추적’에서는 일래스틱서치, 플루언트디, 키바나를 사용해 로그를 수집하는 방법에 대해 설명하고 예거(Jaeger)를 활용해 분산 추적을 설정하고 사용하는 방법을 소개한다.
9장, ‘통합 테스팅’에서는 쿠버네티스를 활용하는 테스트 전략에 대해 다루고, 통합 및 엔드 투 엔드 테스트에서 쿠버네티스를 활용하는 방법을 살펴본다.
10장, ‘일반적인 문제 트러블 슈팅과 다음 단계’에서는 쿠버네티스를 처음 시작할 때 직면할 수 있는 일반적인 문제 상황에 대해 리뷰해보고 해결 방법에 대해 설명한다. 또한 개발자와 개발 프로세스에 관심을 가질 수 있는 쿠버네티스 에코시스템 내의 몇 가지 프로젝트를 간략히 소개한다.
목차
목차
- 1장. 개발을 위한 쿠버네티스 환경 설정
- 개발을 위한 필수 도구
- 추가 도구
- 로컬 환경에 쿠버네티스 클러스터 구성 및 실행
- 클러스터 재설정 및 재시작
- 미니큐브의 구성 요소 확인
- 도커 확인
- 도커 이미지 삭제와 정리
- 쿠버네티스 개념-컨테이너
- 쿠버네티스 리소스-팟
- 네임스페이스
- 팟과 컨테이너를 위한 코드 작성
- 쿠버네티스 리소스-노드
- 네트워크
- 컨트롤러
- 쿠버네티스 리소스-레플리카셋
- 쿠버네티스 리소스-디플로이먼트
- 쿠버네티스 리소스 표현
- 요약
- 개발을 위한 필수 도구
- 2장. 쿠버네티스에서 코드 패키징 방법
- 컨테이너 이미지
- 컨테이너 레지스트리
- 컨테이너 만들기
- 도커파일 명령어
- 예제-Python/Flask 컨테이너 이미지
- 컨테이너 빌드하기
- 컨테이너 실행하기
- 애플리케이션으로부터 로그 얻기
- 예제-Node.js/Express 컨테이너 이미지
- 컨테이너 빌드하기
- 컨테이너 실행하기
- 애플리케이션으로부터 로그 얻기
- 컨테이너 이미지에 태그 달기
- 요약
- 컨테이너 이미지
- 3장. 쿠버네티스에서 코드와 상호작용
- 컨테이너 내부에서 실행되는 소프트웨어 개발을 위한 실용적인 팁
- 실행 가능한 코드를 위한 옵션 얻기
- 컨테이너 이미지 빌드를 위한 실용적인 팁
- 프로그램의 결과 전송
- 로그
- 하나 이상의 컨테이너로 구성된 팟
- 로그 스트리밍
- 이전 로그 확인
- 타임스탬프
- 디버깅 기법
- 대화형으로 이미지 배포하기
- 실행 중인 팟에 접속하기
- 컨테이너에서 두 번째 프로세스 실행하기
- 쿠버네티스 콘셉트 - 라벨
- 라벨의 구성
- 쿠버네티스 콘셉트 - 셀렉터
- 라벨 확인
- kubectl 커맨드를 사용해 라벨과 함께 리소스 정보 목록화하기
- 자동 생성되는 라벨과 셀렉터
- 쿠버네티스 리소스 - 서비스
- 서비스 리소스 정의
- 엔드포인트
- 서비스 타입 - ExternalName
- 헤드리스 서비스
- 팟 내부에서 서비스 디스커버리하기
- 서비스를 위한 DNS
- 쿠버네티스 클러스터 외부로 서비스 노출하기
- 서비스 타입 - LoadBalancer
- 서비스 타입 - NodePort
- 미니큐브 서비스
- 예제 서비스 - 레디스
- 레디스 서비스 찾기
- 파이썬에서 레디스 사용하기
- Flask 디플로이먼트 업데이트
- 디플로이먼트와 롤 아웃
- 롤 아웃 히스토리
- 롤 아웃 실행 취소
- kubectl set 커맨드를 통한 업데이트
- 요약
- 컨테이너 내부에서 실행되는 소프트웨어 개발을 위한 실용적인 팁
- 4장. 선언형 인프라스트럭처
- 명령형 커맨드 대 선언형 커맨드
- YAML
- 간단한 디플로이먼트 생성
- 첫 번째 애플리케이션 선언
- 이미지 풀 정책
- 추적 감시
- 쿠버네티스 리소스 - 어노테이션
- 팟에서 라벨과 어노테이션 노출하기
- 쿠버네티스 리소스 - 컨피그맵
- 컨피그맵 생성
- 컨피그맵 관리
- 컨테이너 이미지에 컨피그레이션 노출하기
- 컨피그맵의 디펜던시
- 쿠버네티스 리소스 - 시크릿
- 컨테이너에 시크릿 노출하기
- 시크릿과 보안 - 시크릿은 얼마나 안전한가?
- 예제 - 컨피그맵을 포함한 Python/Flask 디플로이먼트
- 부가 메뉴 - JSONPATH
- Python/Flask 내에서 컨피그맵 사용하기
- 요약
- 명령형 커맨드 대 선언형 커맨드
- 5장. 팟과 컨테이너의 라이프사이클
- 팟의 라이프사이클
- 컨테이너의 라이프사이클
- 디플로이먼트, 레플리카셋 그리고 팟
- 현재 상태 정보 얻기
- 프로브
- 활성 프로브
- 준비 프로브
- 파이썬 예제에 프로브 추가하기
- Node.js 예제에 프로브 추가하기
- 컨테이너 라이프사이클 훅
- 초기화 컨테이너
- 빠른 대화형 테스트
- 우아한 종료 방법
- 파이썬에서 SIGTERM
- Node.js에서 SIGTERM
- 요약
- 팟의 라이프사이클
- 6장. 쿠버네티스에서 백그라운드 프로세싱
- 잡
- 크론잡
- 파이썬과 셀러리를 이용한 워커큐 예제
- 셀러리 워커 예제
- 쿠버네티스에서 제공하는 퍼시스턴스
- 볼륨
- 퍼시스턴스 볼륨과 퍼시스턴스 볼륨 클레임
- 스테이트풀 세트
- 스테이트풀 세트를 활용한 Node.js 예제
- 사용자 정의 리소스
- 요약
- 7장. 모니터링과 메트릭
- 쿠버네티스의 빌트인 메트릭
- 쿠버네티스 콘셉트 - QoS
- 컨테이너에 대한 요청 및 한계값 선정
- 프로메테우스를 통한 메트릭 캡처
- 헬름 설치
- 헬름을 통한 프로메테우스 설치
- 프로메테우스를 통한 메트릭 보기
- 그라파나 설치
- 프로메테우스를 사용해 애플리케이션 메트릭 보기
- 프로메테우스를 통한 플라스크 메트릭
- 프로메테우스를 통한 Node.js 메트릭
- 프로메테우스에서 서비스 시그널
- 요약
- 8장. 로깅 및 추적
- 쿠버네티스 콘셉트 - 데몬셋
- 일래스틱서치, 플루언트디, 키바나 설치 및 활용
- EFK를 활용한 로그 통합
- 키바나를 통한 로그 시각화
- 애플리케이션별 필터링
- 루씬 쿼리 언어
- 운영 환경에서 키바나 실행하기
- 예거를 활용한 분산 추적
- 스팬과 트레이스
- 예거의 분산 추적 아키텍처
- 예거 테스트하기
- 예제 - 애플리케이션에 추적 기능 추가하기
- 팟에 트레이싱 콜렉터 추가하기
- 트레이스 생성을 위한 라이브러리 및 코드 추가
- 추적 추가 시 고려 사항
- 요약
- 9장. 통합 테스팅
- 쿠버네티스를 활용한 테스팅 전략
- 테스팅에 필요한 리소스 검토
- 쿠버네티스를 활용한 테스팅 패턴
- 배츠를 통한 간단한 검증
- 예제 - 파이썬을 활용한 통합 테스트
- 파이테스트와 파이테스트-디펜던시
- 파이테스트 픽스처와 파이썬-쿠버네티스 클라이언트
- 상태 변경 대기
- 디플로이먼트에 액세스
- 예제 - Node.js를 활용한 통합 테스트
- 모카와 차이를 활용한 Node.js 테스트와 디펜던시
- 클러스터 상태 확인
- kubectl을 활용한 배포
- 사용 가능한 팟이 될 때까지 대기하기
- 디플로이먼트와 상호작용
- 쿠버네티스를 활용한 지속적인 통합
- 예제 - Travis.CI와 미니큐브 사용하기
- 예제 - 젠킨스와 쿠버네티스 플러그인 사용하기
- 요약
- 쿠버네티스를 활용한 테스팅 전략
- 10장. 일반적인 문제 트러블 슈팅 및 다음 단계
- 일반적인 에러와 해결 방법
- 데이터 유효성 검사 에러
- ErrImagePull 에러 메시지
- CrashLoopBackOff 에러 메시지
- No endpoints available for service 에러 메시지
- PodInitializing에서 멈춰 있는 경우
- 개발자를 위한 새로운 프로젝트
- 린터스
- 헬름
- 케이소넷
- 브리게이드
- 스카폴드
- img
- 드래프트
- ksync
- 텔레프레즌스
- 쿠버네티스 프로젝트와 상호작용하기
- 슬랙
- 유튜브
- 스택 오버플로우
- 메일링 리스트 및 포럼
- 요약
- 일반적인 에러와 해결 방법
도서 오류 신고
정오표
정오표
[p.24 : 오탈자]
kubernets-developers에서 찾아볼 수 있다.
->
kubernetes-developers에서 찾아볼 수 있다.
[p.148 : 아래서 5행]
스테이트풀셋(StatefulSet) 기능을
->
스테이트풀 세트(StatefulSet) 기능을
[p.148 : 아래서 4행]
스테이트풀셋(StatefulSet)에 대해서는
->
스테이트풀 세트(StatefulSet)에 대해서는