Top

쿠버네티스 시작하기 2/e [인프라의 미래 속으로]

  • 원서명Kubernetes Up and Running, 2nd Edition: Dive into the Future of Infrastructure (ISBN 9781492046530)
  • 지은이브렌던 번스(Branden Burns), 조 베다(Joe Beda), 켈시 하이타워(Kelsey Hightower)
  • 옮긴이이준, 김희곤, 이한선, 이해원, 이설민, 박재민, 문규태
  • ISBN : 9791161754383
  • 30,000원
  • 2020년 07월 31일 펴냄
  • 페이퍼백 | 360쪽 | 188*235mm
  • 시리즈 : 소프트웨어 아키텍처

책 소개

요약

구글에서 설계하고 개발한 쿠버네티스의 탄생 배경부터 이를 사용할 때 알아야 할 핵심 개념(파드, 디플로이먼트, 서비스 등)을 설명한다. 『쿠버네티스 시작하기』의 2판으로 쿠버네티스 버전이 업데이트됨에 따라 새롭게 릴리즈된 내용(RBAC, 로드밸런서 등)이 추가됐다. 쿠버네티스를 처음 접하는 독자가 고급 사용자로 거듭날 수 있도록 돕는 좋은 지침서가 될 것이다.

추천의 글

“클라우드 네이티브 시스템과 관련해 세계에서 가장 존경받는 세 사람이 쓴 이 책은 쿠버네티스 개념의 기초를 탄탄히 세워주며, 스스로 탐구하는 데 도움이 되는 예제를 제공한다.”

- 리즈 라이스(Liz Rice)/ 아쿠아 시큐리티

이 책에서 다루는 내용

■ 쿠버네티스의 동작 방식을 살펴보기 위해 간단한 클러스터 생성 및 실행
■ 쿠버네티스, 파드, 서비스, 인그레스, 레플리카셋을 사용한 애플리케이션 배포 방법
■ 쿠버네티스에서 실행되고 있는 컨테이너화된 마이크로서비스와 스토리지의 연계
■ 데몬셋, 잡, 컨피그맵, 시크릿과 같은 쿠버네티스 특수 객체
■ 쿠버네티스에서 실제 애플리케이션을 개발하고 배포하는 방법과 관련한 실용적인 예제

이 책의 대상 독자

분산 시스템을 처음 접하든, 아니면 수년간 클라우드 네이티브 시스템을 배포한 경험이 있는 사용자든 관계없이 컨테이너와 쿠버네티스는 새로운 수준의 속도, 민첩성, 신뢰성, 효율성을 달성하는 데 도움이 될 수 있다. 이 책은 쿠버네티스 클러스터 오케스트레이터, 도구와 API를 사용해 분산 애플리케이션의 개발, 배포 및 유지 관리를 개선하는 방법을 설명한다. 쿠버네티스를 사용해본 경험이 없는 상태에서 이 책을 최대한 활용하려면, 서버 기반 애플리케이션에 대한 빌드 및 배포 지식을 갖추고 있어야 한다. 필수 사항은 아니지만 로드밸런서 및 네트워크 스토리지 같은 개념에 익숙하다면 내용을 이해하는 데 도움이 된다. 마찬가지로 리눅스, 리눅스 컨테이너, 도커에 대한 경험 역시 필수는 아니지만, 경험이 있다면 이 책을 최대한 활용하는 데 있어 큰 도움이 될 것이다

이 책의 구성

1장, ‘쿠버네티스 소개’는 쿠버네티스의 장점을 상위 수준 개념으로 소개하며, 쿠버네티스를 처음 접하는 경우 이 책의 내용을 모두 읽어야 하는 이유를 이해할 수 있다.
2장, ‘컨테이너 생성 및 실행’은 컨테이너 및 컨테이너화된 애플리케이션 개발 방법을 자세하게 소개한다. 이전에 도커(Docker)를 사용해본 경험이 있다면, 2장이 매우 유용할 것이다. 이미 도커에 대한 전문가라면 다시 한번 리뷰할 수 있는 기회가 될 것이다.
3장, ‘쿠버네티스 클러스터 배포’는 쿠버네티스를 배포하는 방법을 설명한다. 이 책은 쿠버네티스 사용 방법에 중점을 두고 있지만, 클러스터를 본격적으로 사용하기에 앞서 클러스터를 구동하고 이를 실행해야 한다. 이 책에서 운영 환경 구성을 위해 클러스터를 실행하는 방법을 다루지는 않지만, 3장에서 설명하는 클러스터를 생성하는 몇 가지 쉬운 방법을 통해 쿠버네티스 사용법을 알 수 있다.
4장, ‘공통 kubectl 커맨드’는 쿠버네티스 클러스터와 상호작용하는 데 사용되는 몇 가지 공통 커맨드를 소개한다.
5장부터는 쿠버네티스를 사용해 애플리케이션을 배포하는 방법을 자세히 살펴본다. 파드(5장), 라벨 및 애노테이션(6장), 서비스(7장), 인그레스(8장), 레플리카셋(9장)은 쿠버네티스에서 서비스를 배포하는 데 필요한 핵심 기본 사항이다. 그런 다음, 완전한 애플리케이션의 생명주기와 밀접한 관련이 있는 디플로이먼트(10장)를 살펴본다.
이후에는 쿠버네티스에서 데몬셋(11장), 잡(12장), 컨피그맵 및 시크릿(13장) 같이 좀 더 쿠버네티스에 특화된 객체를 다룬다. 이 개념은 대부분의 운영 환경 애플리케이션에 필수적이지만, 쿠버네티스를 학습하는 단계에서는 일단 건너뛰고 더 많은 경험과 전문 지식을 쌓고 난 후에 살펴보는 것이 더 도움이 될 수 있다.
15장에서는 쿠버네티스와 스토리지를 연계하는 방법을 살펴볼 것이다. 16장에서는 쿠버네티스의 확장을 설명한다. 마지막으로 쿠버네티스에 실제 애플리케이션을 개발 및 배포하는 방법(17장)과 애플리케이션을 소스 제어로 구성하는 방법(18장)을 사례를 통해 설명한다.

저자/역자 소개

지은이의 말

쿠버네티스는 프로세스를 재기동하기 위해 새벽 3시에 잠에서 깨는 모든 시스템 관리자에게 감사의 말을 전한다. 모든 개발자는 자신의 개발 환경에서 잘 실행되던 코드가 실제 운영 환경에서는 제대로 실행되지 않던 경험을 해봤을 것이다. 시스템 아키텍트는 아직 업데이트되지 않은 호스트 이름으로 인해, 운영 환경의 서비스에 잘못된 부하 테스트를 지시했던 경험도 있을 것이다. 쿠버네티스 개발에 영감을 준 것은 이러한 고통의 시간과 끔찍한 오류였다. 한마디로 요약하면, 쿠버네티스는 분산 시스템의 구축, 배포 및 유지 관리를 근본적으로 단순화하려는 노력의 산물이다. 쿠버네티스는 신뢰할 수 있는 시스템을 구축하려는 수십 년 동안의 실제 경험에서 영감을 얻었으며, 이러한 작업을 수행할 때 행복감까지는 아니더라도 적어도 즐거운 경험을 할 수 있도록 처음부터 설계됐다. 여러분이 이 책의 내용을 즐기길 바란다.

지은이 소개

브렌던 번스(Branden Burns)

짧은 기간 동안 소프트웨어 산업 경력을 쌓은 후, 인간처럼 움직이는 로봇 팔에 대한 운동 계획을 연구해 로보틱스 분야에서 박사 학위를 취득했다. 그 후 잠시 동안 컴퓨터과학 교수로 활동했다. 결국 시애틀로 돌아와 구글에 합류해 저지연 색인을 사용한 웹 검색 인프라 업무를 담당했다. 구글에 있는 동안 조 베다(Joe Beda), 크레이그 맥룩키(Craig McLuckie) 와 함께 쿠버네티스 프로젝트를 탄생시켰다. 현재 마이크로소프트 애저(Microsoft Azure)의 엔지니어링 임원으로 재직 중이다.

조 베다(Joe Beda)

마이크로소프트에서 인터넷 익스플로러 관련 업무를 담당하며 경력을 시작했다. 마이크로 소프트에서 7년, 구글에서 10년간 GUI 프레임워크, 실시간 음성 및 채팅, 전화, 광고용 머신러닝, 클라우드 컴퓨팅 분야에서 업적을 쌓아왔다. 가장 주목할 만한 업적은 구글 재직 시 브렌던, 크레이그 맥룩키와 함께 구글 컴퓨트 엔진(Google Compute Engine)을 처음 시작해 쿠버네티스를 만든 것이다. 또한 크레이그와 함께 설립한 스타트업 기업인 헵티오(Heptio)는 VM웨어(VMWare)에 인수됐으며, 현재는 VM웨어의 수석 엔지니어로 재직 중이다.

켈시 하이타워(Kelsey Hightower)

구글의 클라우드 플랫폼을 담당하는 구글의 수석 디벨로퍼 아드보캇이다. 구글의 쿠버네티스 엔진, 클라우드 펑션(Cloud Functions), 애피지(apigee)의 API 게이트웨이 등을 포함한 구글 클라우드의 수많은 제품을 개발 및 개선하는 데 도움을 줬다. 또한 대부분의 시간을 글로벌 포춘지 선정 1000대 경영진 및 개발자와 함께 보내며, 이들이 구글의 기술과 플랫폼을 제대로 이해하고 활용해 비즈니스를 성장시키는 데 도움을 줬다. 클라우스 네이티브 애플리케이션을 구축하고 제공하는 데 있어서 소프트웨어 개발자와 운영 전문가를 도울 수 있는 프로젝트를 유지 관리하는 데 크게 기여한 오픈소스 컨트리뷰터다. 뛰어난 저자 겸 기조연설자로, 쿠버네티스 커뮤니티의 활동을 도운 공로로 CNCF Top 앰배서더 상(CNCF Top Ambassador Award)을 수상했다. 멘토이자 기술 고문으로 창업자가 자신의 비전을 현실로 바꾸도록 도와주고 있다.

옮긴이의 말

클라우드 컴퓨팅 분야의 발전과 함께 최근 클라우드 네이티브 아키텍처(cloud native architecture)가 각광을 받고 있다. 클라우드 네이티브 아키텍처는 애플리케이션에 기존 레거시 환경에 비해 더 많은 유연성과 확장성을 제공할 수 있는데, 이를 실현해줄 수 있는 도구가 바로 쿠버네티스다. 쿠버네티스는 컨테이너 오케스트레이션(container orchestration) 도구로서 컨테이너화된 애플리케이션에 대해 자동 배포 및 확장 등의 기능을 제공하는 오픈소스 기반 관리 시스템이다. 따라서 기존 시스템을 클라우드 네이티브 아키텍처로 진화시키려면 쿠버네티스에 대한 체계적인 이해와 학습이 필요한 시점이다. 이 책은 최근 릴리즈된 RBAC(Role Based Access Control)를 포함해 쿠버네티스 학습에 필요한 필수 요소를 예제와 함께 다루고 있으며, 실제 환경에 컨테이너화된 애플리케이션을 배포하고 관리할 수 있는 방법까지 설명하고 있다. 이 책이 클라우드 네이티브 아키텍처로의 전환을 꿈꾸는 모든 담당자에게 큰 도움이 되길 바란다.

대표역자 이준

옮긴이 소개

현대/기아자동차 클라우드기술연구모임

이준(대표역자)

경희대학교 컴퓨터공학과를 졸업하고 동 대학에서 네트워크 분야 석사 학위를 받았다. 졸업 후 네트워크 장비 개발 업체에서 소프트웨어 개발자로 근무하며 경력을 쌓았다. 현재 기아자동차에 재직 중이며 커넥티드카 서비스를 위한 클라우드 인프라 및 플랫폼 설계 업무를 담당하고 있다. 역서로는 『개발자를 위한 쿠버네티스』(에이콘, 2019), 『Go 프로그래밍 개발 환경에서 의존성 주입 실습』(에이콘, 2020)이 있다.

김희곤

통계학 석사 학위 취득 후 현대자동차에 입사해 줄곧 IT 기획업무를 담당했다. 전사 PI (Process Innovation) 및 ERP 구축 프로젝트를 통해 IT 인프라에 발을 들였고, 현재 현대자동차 그룹의 클라우드 전략 및 구축 업무를 리딩하고 있다.

이한선

전기전자컴퓨터공학전공, KT에서 클라우드 POD 인프라 아키텍처와 데이터센터 네트워크/DNS 설계, OpenStack 기반 SDDC, 국내 클라우드 최초 GSLB/LB/FW/VPN/VXLAN 자동화 기능을 구현했다. 현재 기아자동차에서 AWS 기반 해외 커넥티드카 아키텍처 설계와 대규모 트래픽 환경에서의 쿠버네티스 CNI와 인그레스 설계에 집중하고 있다.

이해원

경북대학교 컴퓨터공학과를 졸업하고 LG CNS에서 커머스, 클라우드 분야의 플랫폼 개발자로 경력을 쌓았다. 개발 생산성 향상을 위해 오픈소스를 활용하는 것에 관심이 많고, 최근에는 엔터프라이즈 애자일이 주요 관심사다. 현재는 기아자동차에서 커넥티드카 서비스를 위한 클라우드 매니지먼트 플랫폼 설계 업무를 담당하고 있다.

이설민

엔씨소프트에서 대규모 트래픽을 경험하며 게임 DBA로 실무를 시작했고, 이후에는 인프라 기술 PM으로서 게임 인프라 아키텍처 설계 및 운영 업무를 담당했다. 신뢰성 있는 서비스를 위한 효율적인 아키텍처 설계 및 AI 기술에 관심이 많으며 현재는 현대자동차에서 커넥티드카 서비스를 위한 데이터베이스 총괄 및 클라우드 기술 관련 업무를 진행하고 있다.

박재민

대학에서 통계학을 졸업하고 대기업 그룹사 SI회사에서 DBA로 근무하며 경력을 쌓았다. 현재 기아자동차에 재직하며 전사 빅데이터 클라우드 인프라 및 데이터베이스 기획 업무를 담당하고 있다.

문규태

서울과학기술대학교 글로벌융합산업공학과 ITM 전공을 졸업했다. 현재 현대자동차에 재직 중이며 엔터프라이즈 IT 서비스를 위한 클라우드 인프라 및 플랫폼 설계 업무를 담당하고 있다.

목차

목차
  • 1장. 쿠버네티스 소개
    • 속도
    • 불변성의 가치
    • 선언형 컨피규레이션
    • 자가 치유 시스템
    • 서비스와 팀의 확장
      • 분리
      • 애플리케이션 및 클러스터의 손쉬운 확장
      • 마이크로 서비스를 통한 개발 팀 확장
      • 일관성 및 확장에 대한 고려사항 분리
    • 인프라 추상화
    • 효율성
    • 요약

  • 2장. 컨테이너 생성 및 실행
    • 컨테이너 이미지
      • 도커 이미지 포맷
    • 도커를 활용한 애플리케이션 이미지 빌드하기
      • 도커파일
      • 이미지 크기 최적화하기
      • 이미지 보안
    • 다단계 이미지 빌드
    • 원격 레지스트리에 이미지 저장
    • 도커 컨테이너 런타임
      • 도커로 컨테이너 실행하기
      • kuard 애플리케이션 탐색하기
      • 리소스 사용량 제한하기
    • 정리
    • 요약

  • 3장. 쿠버네티스 클러스터 배포
    • 퍼블릭 클라우드 제공자 환경에 쿠버네티스 설치하기
      • 구글 쿠버네티스 엔진
      • 애저 쿠버네티스 서비스에 쿠버네티스 설치하기
      • 아마존 웹 서비스에 쿠버네티스 설치하기
      • 미니큐브를 통해 로컬 환경에 쿠버네티스 설치하기
    • 도커 환경에서 쿠버네티스 실행하기
    • 라즈베리파이에서 쿠버네티스 실행하기
    • 쿠버네티스 클라이언트
      • 클러스터 상태 확인
      • 쿠버네티스 워커 노드 조회하기
    • 클러스터 컴포넌트
      • 쿠버네티스 프록시
      • 쿠버네티스 DNS
      • 쿠버네티스 UI
    • 요약

  • 4장. 공통 kubectl 커맨드
    • 네임스페이스
    • 컨텍스트
    • 쿠버네티스 API 객체 조회
    • 쿠버네티스 객체 생성, 수정, 삭제
    • 객체 라벨링과 애노테이션
    • 디버깅 커맨드
    • 커맨드 자동완성
    • 클러스터 조회의 대안들
    • 요약

  • 5장. 파드
    • 쿠버네티스에서의 파드
    • 파드에 대한 생각
    • 파드 매니페스트
      • 파드 생성
      • 파드 매니페스트 생성
    • 파드 실행하기
      • 파드 조회하기
      • 파드 세부사항
      • 파드 삭제하기
    • 파드에 접근하기
      • 포트 포워딩 사용하기
      • 로그를 통해 더 많은 정보 얻기
      • exec를 사용해 컨테이너에서 커맨드 실행하기
      • 컨테이너 내외부로 파일 복사하기
    • 상태 검사
      • 활성 프로브
      • 준비 프로브
      • 상태 검사 타입
    • 리소스 관리
      • 리소스 요청: 최소 필요 리소스
      • 리소스 제한으로 리소스 사용량 제한
    • 볼륨을 통한 데이터 보존
      • 파드에 볼륨 사용하기
      • 파드에서 볼륨을 사용하는 다양한 방법
      • 원격 디스크를 사용한 데이터 보존
    • 종합
    • 요약

  • 6장. 라벨과 애노테이션
    • 라벨
      • 라벨 적용하기
      • 라벨 수정하기
      • 라벨 셀렉터
    • API 객체의 라벨 셀렉터
      • 쿠버네티스 아키텍처의 라벨
    • 애노테이션
      • 애노테이션 정의
    • 정리
    • 요약

  • 7장. 서비스 탐색
    • 서비스 탐색이란 무엇인가?
    • 서비스 객체
    • 서비스 DNS
    • 준비 검사
    • 클러스터 외부로의 서비스
    • 클라우드 연계
    • 고급 세부 정보
      • 엔드포인트
      • 수동 서비스 탐색
      • kube-proxy와 클러스터 IP
      • 클러스터 IP 환경 변수
    • 다른 환경과 연결
    • 정리
    • 요약

  • 8장. 인그레스를 통한 HTTP 로드밸런싱
    • 인그레스 스펙과 인그레스 컨트롤러
    • 컨투어 설치
      • DNS 설정
      • 로컬 hosts 파일 설정
    • 인그레스의 사용
      • 가장 간단한 사용법
      • 호스트 이름의 사용
      • 경로 사용
      • 정리
    • 심화된 인그레스 주제와 문제
      • 다중 인그레스 컨트롤러 실행
      • 다중 인그레스 객체
      • 인그레스와 네임스페이스
      • 경로 재작성
      • TLS 제공
    • 인그레스의 대체 구현
    • 인그레스의 미래
    • 요약

  • 9장. 레플리카셋
    • 조정 루프
    • 파드와 레플리카셋의 관계
      • 기존 컨테이너 수용
      • 컨테이너 격리
    • 레플리카셋을 통한 설계
    • 레플리카셋 명세
      • 파드 템플릿
      • 라벨
    • 레플리카셋 생성
    • 레플리카셋 검사
      • 파드에서 레플리카셋 찾기
      • 레플리카셋에 대한 파드 집합 찾기
    • 레플리카셋 확장
      • kubectl scale을 사용한 명령형 확장
      • kubectl apply를 사용한 선언형 확장
      • 레플리카셋 자동확장
    • 레플리카셋 삭제
    • 요약

  • 10장. 디플로이먼트
    • 디플로이먼트 시작하기
      • 디플로이먼트 내부
    • 디플로이먼트 생성
    • 디플로이먼트 관리
    • 디플로이먼트 업데이트
      • 디플로이먼트 확장
      • 컨테이너 이미지 업데이트
      • 롤아웃 이력
    • 디플로이먼트 전략
      • 재생성 전략
      • 롤링업데이트 전략
    • 서비스 안정을 위한 느린 롤아웃
    • 디플로이먼트 삭제
    • 디플로이먼트 모니터링
    • 요약

  • 11장. 데몬셋
    • 데몬셋 스케줄러
    • 데몬셋 생성
    • 데몬셋을 특정 노드로 제한
      • 노드에 라벨 추가
      • 노드 셀렉터
    • 데몬셋 업데이트
      • 데몬셋의 롤링업데이트
    • 데몬셋 삭제
    • 요약

  • 12장. 잡
    • 잡 객체
    • 잡 패턴
      • 원샷
      • 병렬
    • 작업 대기열
    • 크론잡
    • 요약

  • 13장. 컨피그맵과 시크릿
    • 컨피그맵
      • 컨피그맵 생성
      • 컨피그맵 사용
    • 시크릿
      • 시크릿 생성
      • 시크릿 사용
      • 사설 도커 레지스트리
    • 명명 규칙
    • 컨피그맵과 시크릿 관리
      • 조회
      • 생성
      • 업데이트
    • 요약

  • 14장. 쿠버네티스를 위한 역할 기반 접근 제어
    • 역할 기반 접근 제어
      • 쿠버네티스에서의 ID
      • 역할 및 역할 바인딩의 이해
      • 쿠버네티스에서의 역할 및 역할 바인딩
    • RBAC를 관리하기 위한 기술
      • can-i를 통한 권한 부여 테스트
      • 소스 제어에서 RBAC 관리
    • 고급 주제
      • 클러스터 역할 조합
      • 바인딩을 위한 그룹 사용
    • 요약

  • 15장. 스토리지 솔루션과 쿠버네티스의 연계
    • 외부 서비스 가져오기
      • 셀렉터가 없는 서비스
      • 외부 서비스의 제약사항: 상태 검사
    • 신뢰할 수 있는 싱글톤 실행
      • MySQL 싱글톤 실행
      • 동적 볼륨 프로비저닝
    • 스테이트풀셋을 통한 쿠버네티스 네이티브 스토리지
      • 스테이트풀셋의 속성
      • 스테이트풀셋을 통한 몽고DB 수동 복제
      • 몽고DB 클러스터 생성 자동화
      • 영구 볼륨과 스테이트풀셋
      • 마지막 단계: 준비 프로브
    • 요약

  • 16장. 쿠버네티스 확장
    • 쿠버네티스 확장의 의미
    • 확장 지점
    • 사용자 정의 리소스를 위한 패턴
      • 저스트 데이터
      • 컴파일러
      • 오퍼레이터
      • 시작하기
    • 요약

  • 17장. 실제 애플리케이션 배포
    • 주피터
    • 파스
      • 사전 준비
      • parse-server 빌드
      • parse-server 배포
      • 파스 테스트
    • 고스트
      • 고스트 구성
    • 레디스
      • 레디스 구성
      • 레디스 서비스 생성
      • 레디스 배표
      • 레디스 클러스터로 사용
    • 요약

  • 18장. 애플리케이션 구성
    • 알아야 할 원칙
      • 신뢰성 있는 원천 데이터로서의 파일시스템
      • 코드 리뷰의 역할
      • 피처 게이트 및 가드
    • 소스 제어에서의 애플리케이션 관리
      • 파일시스템 레이아웃
      • 정기 버전 관리
    • 개발, 테스트 및 배포를 위한 애플리케이션 구조화
      • 목표
      • 릴리스 진행
    • 템플릿을 통한 애플리케이션 매개변수화
      • 헬름 및 템플릿을 통한 매개변수화
      • 매개변수화를 위한 파일시스템 레이아웃
    • 전 세계에 애플리케이션 배포
      • 전 세계 배포를 위한 아키텍처
      • 전 세계 배포 구현
      • 전 세계 배포를 위한 대시보드 및 모니터링
    • 요약

  • 부록A. 라즈베리파이 쿠버네티스 클러스터 구축
    • 부품 목록
    • 이미지 굽기
    • 첫 번째 부팅: 마스터 노드
      • 네트워크 설정
      • 쿠버네티스 설치
      • 클러스터 설정
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안