쿠버네티스 인 액션 (그림과 상세한 설명으로 명확하게 이해하는)

쿠버네티스 인 액션 (그림과 상세한 설명으로 명확하게 이해하는)

$48.48
Description
쿠버네티스를 이용해 애플리케이션을 효과적으로 개발하고 운영할 수 있는 방법을 초보자도 쉽게 이해할 수 있도록 설명한다. 쿠버네티스 아키텍처와 각 객체의 개념을 명확히 정립할 수 있도록 예제와 그림을 곁들였다. 후반부에는 쿠버네티스의 내부 구조 및 동작 원리도 쉽게 설명하고 있어 쿠버네티스의 안팎을 모두 살필 수 있다.
저자

마르코룩샤

간단한웹애플리케이션에서부터전체ERP시스템,프레임워크,미들웨어소프트웨어에이르기까지개발경력만20년이상인전문소프트웨어엔지니어다.1985년여섯살때아버지가사준중고ZX스펙트럼컴퓨터로프로그래밍에첫발을내디뎠다.초등학교에서는로고프로그래밍대회에서전국챔피언이됐고여름코딩캠프에참석해파스칼프로그래밍을배웠다.이후다양한프로그래밍언어를사용해소프트웨어를개발했다.
웹이상대적으로성숙하지않았던고등학생때동적웹사이트를만들기시작했다.그후슬로베니아류블랴나대학교(UniversityofLjubljana)에서컴퓨터과학을공부하면서지역기업의의료와통신산업용소프트웨어개발로분야를옮겼다.마침내JBoss미들웨어제품을기반으로한구글앱엔진API를오픈소스로구현하면서레드햇에서일하게됐다.아울러CDI/Weld,Infinispan/JBossData-Grid등의프로젝트에도참여했다.
2014년말부터레드햇의클라우드지원팀에서근무하고있다.쿠버네티스의새로운개발관련기술에대한최신정보를유지하고,회사의미들웨어소프트웨어가쿠버네티스와오픈시프트의기능을최대한활용할수있도록보장하는업무를맡고있다.

목차

1부.쿠버네티스개요

1장.쿠버네티스소개

1.1쿠버네티스와같은시스템이필요한이유
1.1.1모놀리스애플리케이션에서마이크로서비스로전환
1.1.2애플리케이션에일관된환경제공
1.1.3지속적인배포로전환:데브옵스와노옵스
1.2컨테이너기술소개
1.2.1컨테이너이해
1.2.2도커컨테이너플랫폼소개
1.2.3도커의대안으로rkt소개
1.3쿠버네티스소개
1.3.1쿠버네티스의기원
1.3.2넓은시각으로쿠버네티스바라보기
1.3.3쿠버네티스클러스터아키텍처이해
1.3.4쿠버네티스에서애플리케이션실행
1.3.5쿠버네티스사용의장점
1.4요약

2장.도커와쿠버네티스첫걸음

2.1도커를사용한컨테이너이미지생성,실행,공유하기
2.1.1도커설치와HelloWorld컨테이너실행하기
2.1.2간단한node.js애플리케이션생성하기
2.1.3이미지를위한Dockerfile생성
2.1.4컨테이너이미지생성
2.1.5컨테이너이미지실행
2.1.6실행중인컨테이너내부탐색하기
2.1.7컨테이너중지와삭제
2.1.8이미지레지스트리에이미지푸시
2.2쿠버네티스클러스터설치
2.2.1Minikube를활용한단일노드쿠버네티스클러스터실행하기
2.2.2구글쿠버네티스엔진을활용한관리형쿠버네티스클러스터사용하기
2.2.3kubectl의alias와명령줄자동완성설정하기
2.3쿠버네티스에첫번째애플리케이션실행하기
2.3.1Node.js애플리케이션구동하기
2.3.2웹애플리케이션에접근하기
2.3.3시스템의논리적인부분
2.3.4애플리케이션수평확장
2.3.5애플리케이션이실행중인노드검사하기
2.3.6쿠버네티스대시보드소개
2.4요약

2부.쿠버네티스핵심개념

3장.파드:쿠버네티스에서컨테이너실행

3.1파드소개
3.1.1파드가필요한이유
3.1.2파드이해하기
3.1.3파드에서컨테이너의적절한구성
3.2YAML또는JSON디스크립터로파드생성
3.2.1기존파드의YAML디스크립터살펴보기
3.2.2파드를정의하는간단한YAML정의작성하기
3.2.3kubectlcreate명령으로파드만들기
3.2.4애플리케이션로그보기
3.2.5파드에요청보내기
3.3레이블을이용한파드구성
3.3.1레이블소개
3.3.2파드를생성할때레이블지정
3.3.3기존파드레이블수정
3.4레이블셀렉터를이용해파드부분집합나열
3.4.1레이블셀렉터를사용한파드나열
3.4.2레이블셀렉터에서여러조건사용
3.5레이블과셀렉터를이용해파드스케줄링제한
3.5.1워커노드분류에레이블사용
3.5.2특정노드에파드스케줄링
3.5.3하나의특정노드로스케줄링
3.6파드에어노테이션달기
3.6.1오브젝트의어노테이션조회
3.6.2어노테이션추가및수정
3.7네임스페이스를사용한리소스그룹화
3.7.1네임스페이스의필요성
3.7.2다른네임스페이스와파드살펴보기
3.7.3네임스페이스생성
3.7.4다른네임스페이스의오브젝트관리
3.7.5네임스페이스가제공하는격리이해
3.8파드중지와제거
3.8.1이름으로파드삭제
3.8.2레이블셀렉터를이용한파드삭제
3.8.3네임스페이스를삭제한파드제거
3.8.4네임스페이스를유지하면서네임스페이스안에있는모든파드삭제
3.8.5네임스페이스에서(거의)모든리소스삭제
3.9요약

4장.레플리케이션과그밖의컨트롤러:관리되는파드배포

4.1파드를안정적으로유지하기
4.1.1라이브니스프로브소개
4.1.2HTTP기반라이브니스프로브생성
4.1.3동작중인라이브니스프로브확인
4.1.4라이브니스프로브의추가속성설정
4.1.5효과적인라이브니스프로브생성
4.2레플리케이션컨트롤러소개
4.2.1레플리케이션컨트롤러의동작
4.2.2레플리케이션컨트롤러생성
4.2.3레플리케이션컨트롤러작동확인
4.2.4레플리케이션컨트롤러의범위안팎으로파드이동하기
4.2.5파드템플릿변경
4.2.6수평파드스케일링
4.2.7레플리케이션컨트롤러삭제
4.3레플리케이션컨트롤러대신레플리카셋사용하기
4.3.1레플리카셋과레플리케이션컨트롤러비교
4.3.2레플리카셋정의하기
4.3.3레플리카셋생성및검사
4.3.4레플리카셋의더욱표현적인레이블셀렉터사용하기
4.3.5레플리카셋정리
4.4데몬셋을사용해각노드에서정확히한개의파드실행하기
4.4.1데몬셋으로모든노드에파드실행하기
4.4.2데몬셋을사용해특정노드에서만파드를실행하기
4.5완료가능한단일태스크를수행하는파드실행
4.5.1잡리소스소개
4.5.2잡리소스정의
4.5.3파드를실행한잡보기
4.5.4잡에서여러파드인스턴스실행하기
4.5.5잡파드가완료되는데걸리는시간제한하기
4.6잡을주기적으로또는한번실행되도록스케줄링하기
4.6.1크론잡생성하기
4.6.2스케줄된잡의실행방법이해
4.7요약

5장.서비스:클라이언트가파드를검색하고통신을가능하게함

5.1서비스소개
5.1.1서비스생성
5.1.2서비스검색
5.2클러스터외부에있는서비스연결
5.2.1서비스엔드포인트소개
5.2.2서비스엔드포인트수동구성
5.2.3외부서비스를위한별칭생성
5.3외부클라이언트에서비스노출
5.3.1노드포트서비스사용
5.3.2외부로드밸런서로서비스노출
5.3.3외부연결의특성이해
5.4인그레스리소스로서비스외부노출
5.4.1인그레스리소스생성
5.4.2인그레스로서비스액세스
5.4.3하나의인그레스로여러서비스노출
5.4.4TLS트래픽을처리하도록인그레스구성
5.5파드가연결을수락할준비가됐을때신호보내기
5.5.1레디니스프로브소개
5.5.2파드에레디니스프로브추가
5.5.3실제환경에서레디니스프로브가수행해야하는기능
5.6헤드리스서비스로개별파드찾기
5.6.1헤드리스서비스생성
5.6.2DNS로파드찾기
5.6.3모든파드검색-준비되지않은파드도포함
5.7서비스문제해결
5.8요약

6장.볼륨:컨테이너에디스크스토리지연결

6.1볼륨소개
6.1.1예제의볼륨설명
6.1.2사용가능한볼륨유형소개
6.2볼륨을사용한컨테이너간데이터공유
6.2.1emptyDir볼륨사용
6.2.2깃리포지터리를볼륨으로사용하기
6.3워커노드파일시스템의파일접근
6.3.1hostPath볼륨소개
6.3.2hostPath볼륨을사용하는시스템파드검사하기
6.4퍼시스턴트스토리지사용
6.4.1GCE퍼시스턴트디스크를파드볼륨으로사용하기
6.4.2기반퍼시스턴트스토리지로다른유형의볼륨사용하기
6.5기반스토리지기술과파드분리
6.5.1퍼시스턴트볼륨과퍼시스턴트볼륨클레임소개
6.5.2퍼시스턴트볼륨생성
6.5.3퍼시스턴트볼륨클레임생성을통한퍼시스턴트볼륨요청
6.5.4파드에서퍼시스턴트볼륨클레임사용하기
6.5.5퍼시스턴트볼륨과퍼시스턴트볼륨클레임사용의장점이해하기
6.5.6퍼시스턴트볼륨재사용
6.6퍼시스턴트볼륨의동적프로비저닝
6.6.1스토리지클래스리소스를통한사용가능한스토리지유형정의하기
6.6.2퍼시스턴트볼륨클레임에서스토리지클래스요청하기
6.6.3스토리지클래스를지정하지않은동적프로비저닝
6.7요약

7장.컨피그맵과시크릿:애플리케이션설정

7.1컨테이너화된애플리케이션설정
7.2컨테이너에명령줄인자전달
7.2.1도커에서명령어와인자정의
7.2.2쿠버네티스에서명령과인자재정의
7.3컨테이너의환경변수설정
7.3.1컨테이너정의에환경변수지정
7.3.2변숫값에서다른환경변수참조
7.3.3하드코딩된환경변수의단점
7.4컨피그맵으로설정분리
7.4.1컨피그맵소개
7.4.2컨피그맵생성
7.4.3컨피그맵항목을환경변수로컨테이너에전달
7.4.4컨피그맵의모든항목을한번에환경변수로전달
7.4.5컨피그맵항목을명령줄인자로전달
7.4.6컨피그맵볼륨을사용해컨피그맵항목을파일로노출
7.4.7애플리케이션을재시작하지않고애플리케이션설정업데이트
7.5시크릿으로민감한데이터를컨테이너에전달
7.5.1시크릿소개
7.5.2기본토큰시크릿소개
7.5.3시크릿생성
7.5.4컨피그맵과시크릿비교
7.5.5파드에서시크릿사용
7.5.6이미지를가져올때사용하는시크릿이해
7.6요약

8장.애플리케이션에서파드메타데이터와그외의리소스에액세스하기

8.1DownwardAPI로메타데이터전달
8.1.1사용가능한메타데이터이해
8.1.2환경변수로메타데이터노출하기
8.1.3downwardAPI볼륨에파일로메타데이터전달
8.2쿠버네티스API서버와통신하기
8.2.1쿠버네티스RESTAPI살펴보기
8.2.2파드내에서API서버와통신
8.2.3앰배서더컨테이너를이용한API서버통신간소화
8.2.4클라이언트라이브러리를사용해API서버와통신
8.3요약

9장.디플로이먼트:선언적애플리케이션업데이트

9.1파드에서실행중인애플리케이션업데이트
9.1.1오래된파드를삭제하고새파드로교체
9.1.2새파드기동과이전파드삭제
9.2레플리케이션컨트롤러로자동롤링업데이트수행
9.2.1애플리케이션의초기버전실행
9.2.2kubectl을이용한롤링업데이트
9.2.3kubectlrolling-update를더이상사용하지않는이유
9.3애플리케이션을선언적으로업데이트하기위한디플로이먼트사용하기
9.3.1디플로이먼트생성
9.3.2디플로이먼트업데이트
9.3.3디플로이먼트롤백
9.3.4롤아웃속도제어
9.3.5롤아웃프로세스일시중지
9.3.6잘못된버전의롤아웃방지
9.4요약

10장.스테이트풀셋:복제된스테이트풀애플리케이션배포하기

10.1스테이트풀파드복제하기
10.1.1개별스토리지를갖는레플리카여러개실행하기
10.1.2각파드에안정적인아이덴티티제공하기
10.2스테이트풀셋이해하기
1

출판사 서평

★이책에서다루는내용★
■쿠버네티스내부구조
■클러스터상에서컨테이너배포
■클러스터보안
■중단없이애플리케이션갱신

★이책의대상독자★
도커나컨테이너오케스트레이션시스템에익숙하지않은초,중급소프트웨어개발자를대상으로한다.
주로애플리케이션개발자를대상으로설명하지만,운영관점에서애플리케이션관리개요도제공한다.이는다수서버환경에서컨테이너화된애플리케이션을실행하고관리하는데관심이있는모든사용자에게적합하다.컨테이너기술을배우고여러개의관련된컨테이너를규모에맞게조정하고자하는입문자나고급소프트웨어엔지니어들은쿠버네티스환경에서애플리케이션을개발하고컨테이너화하며실행하는데필요한전문지식을얻게될것이다.
이전의컨테이너기술이나쿠버네티스관련경험을필요로하진않는다.주제를점진적으로상세히설명하고있으며,비전문가개발자가이해하기에어려운애플리케이션소스코드는사용하지않았다.그러나최소한프로그래밍,컴퓨터네트워킹,리눅스의기본명령실행과같은기본적인지식과HTTP처럼잘알려진프로토콜에관해이해하고있어야한다.

★이책의구성★
이책은18장을세부분으로나눠설명한다.
1부는도커와쿠버네티스를간략하게소개하고,쿠버네티스클러스터를설치하는방법과간단한애플리케이션을실행하는방법등을소개한다.1부에는두개의장이있다.
1장에서는쿠버네티스가무엇이고어떻게생겨났으며규모에맞게애플리케이션을관리해야하는오늘날의문제를해결하는데어떻게도움이되는지설명한다.
2장에서는컨테이너이미지를빌드해쿠버네티스클러스터에서실행하는방법의실습튜토리얼을제공한다.또한로컬에서단일노드쿠버네티스클러스터를실행하는방법과클라우드에서다중노드클러스터를실행하는방법을설명한다.

2부에서는쿠버네티스에서애플리케이션을실행하기위해반드시이해해야하는핵심개념을소개한다.2부의각장은다음과같다.
3장에서는쿠버네티스의기본구성블록인파드(Pod)를소개하고,레이블(label)을통해파드와기타쿠버네티스의오브젝트를정리하는방법을설명한다.
4장에서는컨테이너를자동으로다시시작해쿠버네티스가애플리케이션을정상적으로유지하는방법을알려준다.또한관리되는파드(managedpod)를적절히실행하고,수평확장하며,클러스터노드장애에내성을갖게하고사전정의된시간또는주기적으로실행하는방법을알아본다.
5장에서는파드가제공하는서비스를클러스터내외부클라이언트에게노출시키는방법을보여준다.또한클러스터에서실행중인파드가클러스터내부나외부에상주하는지에관계없이서비스를검색하고액세스하는방법을보여준다.
6장에서는같은파드에서실행되는여러개의컨테이너가파일을공유하는방법과퍼시스턴트스토리지(persistentstorage)를관리하고파드가접근할수있게하는방법을설명한다.
7장에서는설정데이터와자격증명과같은중요정보를파드내부에서실행되는애플리케이션에전달하는방법을보여준다.
8장에서는애플리케이션이실행중인쿠버네티스환경관련정보를얻는방법과클러스터상태를변경하기위해쿠버네티스와통신하는방법을설명한다.
9장에서는디플로이먼트(Deployment)개념을소개하고쿠버네티스환경에서애플리케이션을실행하고업데이트하는적절한방법을안내한다.
10장에서는안정적인아이덴티티와상태를필요로하는스테이트풀(stateful)애플리케이션을실행하는방법을소개한다.

3부는쿠버네티스클러스터의내부를깊이들여다보며몇가지추가적인개념을소개하고1,2부에서배운것을좀더높은수준에서살펴본다.마지막부의구성은다음과같다.
11장은쿠버네티스클러스터를구성하는모든구성요소와각요소의역할을설명한다.또한파드가네트워크를이용해통신하는법과서비스가여러파드를로드밸런싱하는방법을설명한다.
12장에서는인증(authentication)과인가(authorization)를사용해쿠버네티스API서버를안전하게보호하는방법을설명한다.
13장에서는파드가노드의리소스에접근하는방법과클러스터관리자가파드의리소스접근을막는방법을설명한다.
14장에서는애플리케이션이사용할수있는컴퓨팅리소스를제약하고,애플리케이션의서비스품질(QoS,QualityofService)보증을구성하고,개별애플리케이션의리소스사용량을모니터링하는방법을다룬다.또한사용자가너무많은리소스를사용하는것을방지하는방법을알려준다.
15장에서는애플리케이션에서실행중인레플리카(replicas)수를자동으로확장하도록쿠버네티스를설정하는방법과현재클러스터노드수이상으로애플리케이션을수용하기위해클러스터크기를늘리는방법을설명한다.
16장에서는특정노드에만파드가스케줄링되게하거나파드가다른노드로예약되지않게하는방법을알려준다.또한파드가함께스케줄링되거나함께스케줄링되지않게하는방법을살펴본다.
17장에서는애플리케이션을쿠버네티스클러스터에알맞게개발하는방법을알려준다.또한개발중마찰을줄이기위해개발및테스트workflow를설정하는방법관련지침을몇가지제공한다.
18장에서는사용자정의오브젝트(customobjects)로쿠버네티스를확장할수있는방법과다른사람들이어떤방식으로엔터프라이즈급애플리케이션플랫폼을만들었는지를보여준다.
위내용을통해쿠버네티스의각구성요소를알게되고점차적으로kubectl명령줄도구를사용하는법을배우게될것이다.

★추천의글★
“권위있고철저하다.분산되고확장가능한애플케이션의전체라이프사이클을관리하는방법을실습위주로설명한다.”
-안토니오마그나히(AntonioMagnaghi),시스템1

“특히실제사례를다룬부분이좋다.단지개념만적용하는것이아니라실제테스트를해본다.”
-파올로안티노리(PaoloAntinori),레드햇

“쿠버네티스와관련있는기술들의깊이있는토론이다.반드시소장해야하는책이다.”
-알크린커(AlKrinker),USPTO

“쿠버네티스전문가가되기위한필독서로,모든것이담겨있다."
-차바사리(CsabaSari),키메라엔터테인먼트

★옮긴이의말★
2014년구글이쿠버네티스를발표한이래쿠버네티스는빠른속도로가장인기있는기술가운데하나로떠올랐다.
비즈니스민첩성이점점더강조되는컴퓨팅환경에서마이크로서비스아키텍처(MSA)는사실상(defacto)표준이됐고MSA환경을구현하기에가장적합한기술로써쿠버네티스가최근각광을받고있다.
이뿐만아니라쿠버네티스는IoT환경에서의에지컴퓨팅영역,데이터과학분야에서머신러닝workflow배포(kubeflow)지원영역,5G에서통신인프라의가상화(VNF,VirtualNetworkFunction)영역,나아가하이브리드또는멀티클라우드를지원하기위한핵심기술로다양한분야에서도입,활용되고있다.
이런뜨거운열기를반영하듯꽤많은책이출간,번역되고있음에도조금은때가지난것같은이책의재출간판작업을맡게된이유는우선저자의적절한시각화와은유를섞은개념설명에매료됐고,여러사례를기반한상황설정과설명을뒷받침하는실습그리고쿠버네티스의내부구조에대한상세한설명과멀티클라우드와쿠버네티스확장까지아우르는탄탄한구성등으로가히쿠버네티스분야의바이블이라할만한책이기때문이다.이책의번역자들은‘KubernetesKoreaGroup’에서이책을기반으로한스터디모임인‘100일간의kubernetesarchitecture여행’의스터디멤버들로구성됐으며,재출간판에맞춰최대한독자의입장에서쉽고부드럽게읽히도록노력했다.용어는최대한쿠버네티스한글화팀의용어집을따르려노력했고,예제가최신버전의쿠버네티스에서실행하는데문제가없는지확인했으며,독자의이해를돕기위해다양한주석을추가했다.
원서가전체적으로매끄럽게구성돼있지만,개념을설명하는부분에서번역으로전달하기어려운미묘한부분이많았고이런부분을우리말로전달하기위해꽤나많은공을들였다.부디부드럽고매끄럽게읽을수있었다는평을들을수있다면번역자로서더할나위없이보람있을것같다.