Top

개발자를 위한 쿠버네티스 [쿠버네티스 환경에서 컨테이너와 애플리케이션 개발 및 운영 가이드]

  • 원서명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장, ‘일반적인 문제 트러블 슈팅과 다음 단계’에서는 쿠버네티스를 처음 시작할 때 직면할 수 있는 일반적인 문제 상황에 대해 리뷰해보고 해결 방법에 대해 설명한다. 또한 개발자와 개발 프로세스에 관심을 가질 수 있는 쿠버네티스 에코시스템 내의 몇 가지 프로젝트를 간략히 소개한다.

저자/역자 소개

지은이의 말

개발자가 기능을 개발하고 작성한 코드의 실행에 대해 책임감을 갖는 것은 점점 보편화되고 있다. 많은 기업들이 전문 지식을 갖고 도움을 줄 수 있는 (일반적으로 SRE 또는 데브옵스로 분류되는) 운영 조직을 유지하고 있지만, 최근에는 개발자들에게 지식 및 책임 범위의 확대를 종종 요구한다.
한동안, 코드로 인프라를 관리할 수 있게 하는 기술의 변화가 있었다. 몇 년 전만 해도 Puppet은 운영자에 의해 사용되고 Chef는 개발자에 의해 사용된다고 경계를 지어 설명할 수 있었다. 그러나 이러한 모든 것이 클라우드의 출현과 성장으로 바뀌었고, 이러한 변화는 최근 도커 기술의 성장으로 가속화됐다. 컨테이너는 개발에 대한 유연성을 제공할 뿐만 아니라, 일정 수준 이상의 통제와 격리 환경을 제공하기 때문에 매우 매력적인 기술이라 할 수 있다. 컨테이너를 사용하면 손쉬운 수평적 확장뿐만 아니라 책임의 격리를 위해 한 번에 한 개 이상의 컨테이너를 빠르게 생성할 수 있다.
쿠버네티스는 구글에서 시작됐으며, 현재는 CNCF(Cloud Native Computing Foundation)에 의해 호스팅되고 있는 오픈소스 프로젝트다. 쿠버네티스는 구글이 소프트웨어를 컨테이너 환경에 실행하고 운영했던 경험을 담고 있으며 사용자들이 이를 활용할 수 있도록 공개했다. 쿠버네티스는 컨테이너를 실행하고, 컨테이너를 서비스로 그룹화해 수평적으로 확장하는 것은 물론이며, 컨테이너가 상호작용하는 방식에 대한 통제 및 외부에 노출시키는 수단을 제공한다.
쿠버네티스는 API 및 커맨드라인 도구를 통해 선언형 구조를 제공한다. 쿠버네티스는 로컬 랩톱에 설치하거나 클라우드 서비스 제공업체에서도 사용이 가능하다. 쿠버네티스 사용 시 장점은 로컬에서 실행하거나, 회사의 소규모 랩 또는 대규모 클라우드 제공업체 등 실행 환경에 관계없이 동일하게 동작하는 툴을 사용할 수 있다는 것이다. 자바가 어디에서나 실행되는 것과 마찬가지로 랩톱, 회사의 데이터 센터, 아마존 웹 서비스(AWS, Amazon Web Services) 마이크로소프트 애저(Microsoft Azure) 또는 구글(Google)과 같은 클라우드 서비스 제공업체에서 실행하는 것과 관계없이 일관된 툴 집합을 제공한다.
이 책은 쿠버네티스를 활용해 코드 개발, 유효성 검증, 실행을 위한 가이드를 제공한다. 또한 쿠버네티스 사용 방법과 이를 개발 워크플로우에 통합할 수 있는 방법에 대한 예제 그리고 샘플 설명에 초점을 맞춘다. 예제를 통해 쿠버네티스 환경에서 코드를 실행하기 위한 일반적인 태스크를 학습한다.

지은이 소개

조셉 헥(Joseph Heck)

스타트업과 대기업에서 다양한 개발 경험과 관리 경험을 했다. 모바일 및 데스크톱 애플리케이션에서 클라우드 기반 분산 시스템에 이르기까지 다양한 종류의 솔루션 설계, 개발, 배포 경험이 있다.
소프트웨어 빌드, 검증, 배포 및 실행 방법을 개선하기 위한 멘토로 활동해, 관련 팀을 만들고 이끈 경험이 있다. 쿠버네티스를 비롯한 많은 프로젝트와 협업하고 있으며, 오픈소스 분야에서 다양한 활동을 이어 오고 있다.

옮긴이의 말

최근 소프트웨어 개발 분야는 개발의 생산성을 높이고 빠르게 변화하는 환경에 효과적으로 대응하기 위해 개발과 운영을 결합한 데브옵스(DevOps) 및 마이크로서비스 아키텍처(Microservice Architecture) 등의 개념이 등장했고, 전 세계적으로 개발자들의 많은 관심을 받고 있다.
마이크로서비스 아키텍처는 컨테이너(Container) 기술을 통해 좀 더 쉽게 구현할 수 있으며, 쿠버네티스는 컨테이너 중심의 환경을 제공하는 컨테이너 오케스트레이션 플랫폼이다. 개발자는 쿠버네티스를 마이크로서비스 플랫폼으로 이용해 애플리케이션을 빠르고 쉽게 배포할 수 있고, 스케일링하며, 관리할 수 있다.
이 책은 쿠버네티스에 대한 개념뿐만 아니라 애플리케이션을 컨테이너화하고 쿠버네티스를 통해 관리하고 운영할 수 있는 방법을 예제와 함께 소개해 쿠버네티스를 처음 접하는 사람이 잘 이해할 수 있는 방식으로 정리돼 있다. 따라서 쿠버네티스에 대한 기본적인 지식을 이해하고 애플리케이션을 개발, 빌드, 테스트, 배포 그리고 운영까지 할 수 있는 데브옵스 환경을 구축하는 데 좋은 지침서가 될 것이다.

옮긴이 소개

이준

경희대학교 컴퓨터공학과를 졸업하고 동 대학에서 네트워크 분야 석사 학위를 받았다. 졸업 후 네트워크 장비 개발 업체에서 소프트웨어 개발자로 근무하며 경력을 쌓았다. 현재 기아자동차에 재직 중이며 커넥티드 카 서비스를 위한 클라우드 인프라 및 플랫폼 설계 업무를 담당하고 있다.

목차

목차
  • 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.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.24 : 오탈자]
kubernets-developers에서 찾아볼 수 있다.
->
kubernetes-developers에서 찾아볼 수 있다.

[p.148 : 아래서 5행]
스테이트풀셋(StatefulSet) 기능을 ->
스테이트풀 세트(StatefulSet) 기능을

[p.148 : 아래서 4행]
스테이트풀셋(StatefulSet)에 대해서는 ->
스테이트풀 세트(StatefulSet)에 대해서는