브렌던번스,조베다,켈시하이타워,라클런이븐슨
저자:브렌던번스(BrendanBurns)
짧은기간동안소프트웨어산업경력을쌓은후,인간처럼움직이는로봇팔에대한운동계획을연구해로보틱스분야에서박사학위를취득했다.그후잠시동안컴퓨터과학교수로활동했다.결국시애틀로돌아와구글에합류해저지연색인을사용한웹검색인프라에대한업무를담당했다.구글에있는동안조베다,크레이크맥룩키(CraigMcLuckie)와함께쿠버네티스프로젝트를탄생시켰다.현재마이크로소프트애저(MicrosoftAzure)의엔지니어링임원으로재직중이다.
저자:조베다(JoeBeda)
마이크로소프트에서인터넷익스플로러관련업무를담당하며경력을시작했다.마이크로소프트에서7년,구글에서10년간GUI프레임워크,실시간음성및채팅,전화,광고용머신러닝,클라우드컴퓨팅분야에서경력을쌓았다.가장주목할만한업적은구글재직시브렌던,크레이그맥룩키와함께구글컴퓨트엔진(GoogleComputeEngine)을처음시작해쿠버네티스를만든것이다.또한크레이그와함께설립한스타트업기업인헵티오(Heptio)가VM웨어(VMWare)에인수됐으며,현재VM웨어의수석엔지니어로재직중이다.
저자:켈시하이타워(KelseyHightower)
구글의클라우드플랫폼을담당하는구글의수석디벨로퍼애드보킷(principaldeveloperadvocate)이다.구글의쿠버네티스엔진,클라우드펑션(CloudFunctions),애피지(apigee)의API게이트웨이등을포함한구글클라우드의수많은제품을개발및개선하는데도움을줬다.또한대부분의시간을글로벌<포춘지>선정1000대경영진및개발자와함께보내며,이들이구글의기술과플랫폼을제대로이해하고활용해비즈니스를성장시키는데도움을줬다.클라우드친화적인애플리케이션을구축하고제공하는데있어소프트웨어개발자와운영전문가를도울수있는프로젝트를유지관리하는데크게기여한오픈소스컨트리뷰터다.뛰어난저자겸기조연설자로,쿠버네티스커뮤니티의활동을도운공로로CNCFTop앰버서더상(CNCFTopAmbassadorAward)을수상했다.멘토이자기술고문으로창업자가자신의비전을현실로바꿀수있게도와주고있다.
저자:라클런이븐슨(LachlanEvenson)
애저오픈소스팀의수석프로그램매니저다.쿠버네티스커뮤니티의매우활동적인회원이며운영위원회와릴리스리더로활동중이다.수많은클라우드네이티브프로젝트에대한깊은운영지식을보유하고있으며,클라우드네이티브에코시스템에서오픈소스프로젝트를구축하고기여하는데많은시간을보내왔다.
역자:이준
경희대학교컴퓨터공학과를졸업하고동대학에서네트워크분야석사학위를받았다.졸업후네트워크장비개발업체에서소프트웨어개발자로근무하며경력을쌓았다.이후자동차회사에서커넥티드카서비스를위한클라우드인프라및플랫폼기획/개발/운영업무를담당했으며,현재통신회사에서SRE업무를담당하고있다.다양한유형의클라우드환경에서컨테이너를효율적으로관리하기위한쿠버네티스및이를안정적으로운영하기위한모니터링기술에관심이있으며,이러한관심사를반영해번역한책으로는『개발자를위한쿠버네티스』(에이콘,2019),『쿠버네티스시작하기2/e』(에이콘,2020),『헬름배우기』(에이콘,2021)등이있다.
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장.레플리카셋
__조정루프
__파드와레플리카셋의관계
____기존컨테이너수용
____컨테이너격리
__레플리카셋을통한설계
__레플리카셋명세
____파드템플릿
____라벨
__레플리카셋생성
__레플리카셋검사
____파드에서레플리카셋찾기
____레플리카셋에대한파드집합찾기
__레플리카셋확장
____kubectlscale을사용한명령형확장
____kubectlapply를사용한선언형확장
____레플리카셋자동확장
__레플리카셋삭제
__요약
10장.디플로이먼트
__첫번째디플로이먼트
__디플로이먼트내부
__디플로이먼트생성
__디플로이먼트관리
__디플로이먼트업데이트
____디플로이먼트확장
____컨테이너이미지업데이트
____롤아웃이력
__디플로이먼트전략
____재생성전략
____롤링업데이트전략
____서비스안정을위한느린롤아웃
__디플로이먼트삭제
__디플로이먼트모니터링
__요약
11장.데몬셋
__데몬셋스케줄러
__데몬셋생성
__데몬셋을특정노드로제한
____노드에라벨추가
____노드셀렉터
__데몬셋업데이트
__데몬셋삭제
__요약
12장.잡
__잡객체
__잡패턴
____원샷
____병렬
____작업대기열
__크론잡
__요약
13장.컨피그맵과시크릿
__컨피그맵
____컨피그맵생성
____컨피그맵사용
__시크릿
____시크릿생성
____시크릿사용
____사설컨테이너레지스트리
__명명규칙
__컨피그맵과시크릿관리
____조회
____생성
____업데이트
__요약
14장.쿠버네티스를위한역할기반접근제어
__역할기반접근제어
____쿠버네티스에서의ID
____역할과역할바인딩의이해
____쿠버네티스에서의역할과역할바인딩
__RBAC을관리하기위한기술
____can-i를통한권한부여테스트
____소스컨트롤에서RBAC관리
__고급주제
____클러스터역할조합
____바인딩을위한그룹사용
__요약
15장.서비스메시
__암호화와상호TLS를통한인증
__트래픽셰이핑
__내부검사
__서비스메시가정말로필요한가?
__서비스메시구현체에대한내부검사
__서비스메시환경
__요약
16장.스토리지솔루션과쿠버네티스의연계
__외부서비스가져오기
____셀렉터가없는서비스
____외부서비스의제약사항:상태검사
__신뢰할수있는싱글톤실행
____MySQL싱글톤실행
____동적볼륨프로비저닝
__스테이트풀셋을통한쿠버네티스네이티브스토리지
____스테이트풀셋의속성
____스테이트풀셋을통한몽고DB수동복제
____몽고DB클러스터생성자동화
____영구볼륨과스테이트풀셋
____마지막단계:준비프로브
__요약
17장.쿠버네티스확장
__쿠버네티스확장의의미
__확장지점
__사용자정의리소스를위한패턴
____저스트데이터
____컴파일러
____오퍼레이터
____시작하기
__요약
18장.공통프로그래밍언어에서쿠버네티스접근하기
__쿠버네티스API:클라이언트의관점
____OpenAPI와생성된클라이언트라이브러리
____kubectlx는어떤가?
__쿠버네티스API프로그래밍
____클라이언트라이브러리설치
____쿠버네티스API에인증
____쿠버네티스API에접근
____모두합치기:파이썬,자바,.NET에서파드나열과생성
____객체생성과패치
____변경사항에대한쿠버네티스API지켜보기
____파드와상호작용
__요약
19장.쿠버네티스에서애플리케이션보안
__SecurityContext이해
____SecurityContext문제
__파드보안
____파드보안이란?
____파드보안표준적용
__서비스계정관리
__역할기반접근제어
__런타임클래스
__네트워크정책
__서비스메시
__보안벤치마크도구
__이미지보안
__요약
20장.쿠버네티스클러스터에대한정책과거버넌스
__정책과거버넌스가중요한이유
__승인흐름
__게이트키퍼를통한정책과거버넌스
____개방형정책에이전트란?
____게이트키퍼설치
____정책구성
____제약조건템플릿이해
____제약조건생성
____감사
____변형
____데이터복제
____메트릭
____정책라이브러리
__요약
21장.멀티클러스터애플리케이션배포
__시작에앞서
__로드밸런싱접근방식으로맨위에서부터시작하기
__멀티클러스터를위한애플리케이션구축
____복제된사일로:가장단순한교차지역모델
____샤딩:지역데이터
____더나은유연성:마이크로서비스라우팅
__요약
22장.애플리케이션구성
__알아야할원칙
____신뢰성있는원천데이터로서의파일시스템
____코드리뷰의역할
____피처게이트
__소스컨트롤에서의애플리케이션관리
____파일시스템레이아웃
____정기버전관리
__개발,테스트,배포를위한애플리케이션구조화
____목표
____릴리스진행
__템플릿을통한애플리케이션매개변수화
____헬름과템플릿을통한매개변수화
____매개변수화를위한파일시스템레이아웃
__전세계에애플리케이션배포
____전세계배포를위한아키텍처
____전세계배포구현
____전세계배포를위한대시보드와모니터링
__요약
부록.쿠버네티스클러스터구축
이책에서다루는내용
-간단한클러스터를생성해쿠버네티스동작방식살펴보기
-쿠버네티스를통한애플리케이션배포방법자세히알아보기
-데몬셋,잡,컨피그맵및시크릿과같은쿠버네티스의특수객체처리하기
-완전한애플리케이션의라이프사이클을관리하는디플로이먼트고찰하기
-애플리케이션배포의보안강화하기
-멀티클러스터애플리케이션을배포하고프로그래밍언어를통해쿠버네티스에액세스하기
이책의대상독자
분산시스템을처음접하든,아니면수년간클라우드네이티브시스템을배포한경험이있는사용자든관계없이컨테이너와쿠버네티스는새로운수준의속도,민첩성,신뢰성,효율성을달성하는데도움이될수있다.이책은쿠버네티스클러스터오케스트레이터,도구와API를사용해분산애플리케이션의개발,배포,보안,유지관리를개선하는방법을설명한다.쿠버네티스에대한사전경험이없는상태에서이책을최대한활용하려면서버기반애플리케이션에대한빌드와배포지식을갖추고있어야한다.또한로드밸런서와네트워크스토리지같은개념에익숙하다면내용을이해하는데도움이된다.마찬가지로리눅스,리눅스컨테이너,도커에대한경험역시필수는아니지만경험이있다면이책을최대한활용하는데있어큰도움이될것이다.
이책의구성
1장,쿠버네티스소개에서는쿠버네티스의장점을상위수준개념으로소개하며,쿠버네티스를처음접하는경우이책의나머지부분을모두읽어야하는이유를설명한다.
2장,컨테이너생성과실행에서는컨테이너및컨테이너화된애플리케이션개발방법을자세히소개한다.이전에도커(Docker)를사용해본경험이있다면2장이매우유용할것이다.이미도커전문가라면다시한번리뷰할수있는기회가될것이다.
3장,쿠버네티스클러스터배포에서는쿠버네티스를배포하는방법을설명한다.이책의내용대부분은쿠버네티스사용방법에중점을두고있지만클러스터를본격적으로사용하기에앞서클러스터를구동하고이를실행해야한다.운영환경구성을위해클러스터를실행하는방법은이책에서다루지않지만3장에서클러스터를생성하는쉬운방법을통해쿠버네티스사용방법을이해할수있다.
4장,공통kubectl명령에서는쿠버네티스클러스터와상호작용하는데사용되는공통명령을소개한다.
5장부터는쿠버네티스를사용한애플리케이션배포방법을자세히살펴보는데,파드(5장),라벨과애노테이션(6장),서비스(7장),인그레스(8장),레플리카셋(9장)을다룬다.이들은쿠버네티스에서서비스를배포하는데필요한핵심사항들이다.그런다음완전한애플리케이션의생명주기와밀접하게관련이있는디플로이먼트(10장)를살펴본다.
이후에는쿠버네티스에서데몬셋(11장),잡(12장),컨피그맵과시크릿(13장)같은좀더쿠버네티스에특화된객체를다룬다.이개념들은대부분의운영환경애플리케이션에필수적이지만쿠버네티스를학습하는단계에서는일단건너뛰고더많은경험과전문지식을쌓고난후에살펴보는것이더도움이될수있다.
다음으로역할기반접근제어(14장)를소개하고서비스메시(15장)및쿠버네티스와스토리지연계(16장)를살펴본다.쿠버네티스확장(17장)과프로그래밍언어에서쿠버네티스접근(18장)을살펴본다.그런다음쿠버네티스에서애플리케이션보안(19장),쿠버네티스정책과거버넌스(20장)에초점을맞춰설명한다.마지막으로멀티클러스터에서애플리케이션을개발하고배포하는방법(21장)에대한몇가지예제와소스컨트롤시스템에서애플리케이션을구성하는방법(22장)을살펴보는것으로마무리한다.
지은이의말
쿠버네티스는프로세스를재기동하고자새벽3시에잠에서깨는모든시스템관리자에게감사의말을전한다.모든개발자는자신의개발환경에서잘실행되던코드가실제운영환경에서는제대로실행되지않는경험을해봤을것이다.시스템아키텍트는아직업데이트되지않은호스트이름으로인해운영환경의서버에잘못된부하테스트를지시한경험도있을것이다.쿠버네티스개발에영감을준것은이러한고통스러운시간과끔찍한오류였다.한마디로요약하면,쿠버네티스는분산시스템의구축,배포및유지관리를근본적으로단순화하려는노력의산물이다.쿠버네티스는신뢰할수있는시스템을구축하려는수십년동안의실제경험에서영감을얻었으며,이러한작업을수행할때행복감까지는아니더라도적어도즐거운경험을할수있도록처음부터설계됐다.여러분이이책의내용을즐기길바란다.
옮긴이의말
클라우드컴퓨팅분야의발전과함께최근많은기업이온프레미스자원을클라우드로전환해IT인프라환경을베어메탈에서가상머신으로전환했다.그결과인프라자원을공유함으로써좀더효율적으로사용하고비용을절감할수있었다.이러한장점에도높은오버헤드,보안취약점,낮은성능등여러단점이부각됐다.이처럼가상머신의한계를느끼게된사용자들은좀더안전하고경량화된도커/컨테이너기술에관심을갖게됐으며,최근많은기업이애플리케이션의개발과배포환경을가상머신에서격리기반의도커/컨테이너로변경하고있다.이처럼기업내에서도커/컨테이너전환이점점더가속화되고관리해야하는컨테이너의수가많아지면서컨테이너오케스트레이션(ContainerOrchestration)기술의필요성이대두됐다.컨테이너오케스트레이션이란컨테이너의배포,관리,확장,네트워킹등을자동화하는기술을의미한다.
초기에는컨테이너오케스트레이션을위한여러관리도구가등장했지만오늘날에는쿠버네티스가사실상의업계표준으로자리매김했다.쿠버네티스는구글에서개발해오픈소스로공개한관리시스템이며,수백또는수천개의컨테이너를관리하는구글의기술과경험이집약돼있다.따라서대규모환경에서도커/컨테이너를효율적으로관리할수있는쿠버네티스에대한체계적인이해와학습이필요한시점이다.이책은세번째개정을통해최근에개념이추가된쿠버네티스보안,서비스메시등을포함해쿠버네티스학습에필요한필수요소를예제와함께다루고있으며,실제운영환경에정책을정의하고컨테이너화된애플리케이션을배포하는것은물론보안을강화하며관리할수있는방법까지도설명하고있다.이책이클라우드환경에쿠버네티스도입을꿈꾸는모든담당자에게큰도움이되길바란다.