쿠버네티스의 확장성을 활용하여 현대적인 아키텍처 패턴을 도입하고
프로덕션 문제를 효과적으로 처리하는 방법을 배운다!
쿠버네티스는 현대적인 클라우드 네이티브 컨테이너 오케스트레이션 도구이며, 전 세계적으로 가장 인기 있는 오픈소스 프로젝트 중 하나입니다. 쿠버네티스는 강력하고 매우 유연한 기술이며 쿠버네티스 엔지니어는 업계 전반에서 수요가 많습니다. 이 책은 쿠버네티스에서 최신 클라우드 네이티브 애플리케이션을 배포, 보호, 운영하기 위한 포괄적인 안내서입니다. 기초적인 내용부터 쿠버네티스 모범 사례에 이르기까지 이 책은 애플리케이션 구성을 위한 필수적인 요소를 다룹니다. 프로덕션 환경에서 클러스터를 실행하기 위한 현실적인 기술, 클러스터 리소스에 대한 관찰 가능성을 설정하기 위한 팁 및 중요 문제 해결을 위한 기법도 함께 살펴봅니다. 마지막으로 쿠버네티스를 확장하고 커스터마이즈하는 방법과 서비스 메시, 서버리스 도구 등을 클러스터에 배포하기 위한 팁을 설명합니다. 이 책을 끝까지 공부하면 쿠버네티스에서 최신 애플리케이션을 자신 있게 실행하고 확장하기 위한 도구를 갖추게 될 것입니다.
Contents
[1부] 쿠버네티스 설치하기
ㆍ 01장: 쿠버네티스와 통신하기
기술 요구사항
컨테이너 오케스트레이션 소개
__컨테이너 오케스트레이션이란?
__컨테이너 오케스트레이션의 장점
__일반적인 오케스트레이션 도구
쿠버네티스의 아키텍처
__쿠버네티스 노드 유형
__쿠버네티스 컨트롤 플레인
__쿠버네티스 API 서버
__쿠버네티스 스케줄러
__쿠버네티스 컨트롤러 매니저
__etcd
__쿠버네티스 워커 노드
__kubelet
__kube-proxy
__컨테이너 런타임
__애드온
쿠버네티스 인증 및 권한
__네임스페이스
__사용자
__인증 방법
__TLS와 보안을 위한 쿠버네티스의 인증서 인프라
__권한 부여 옵션
__RBAC
__ABAC
kubectl과 YAML 사용하기
__kubectl과 kubeconfig 설정
__명령형imperative 커맨드와 선언형declarative 커맨드
__kubectl 기본 커맨드 소개
__YAML 파일에 쿠버네티스 리소스 작성하기
요약
질문
더 읽을 거리
ㆍ 02장: 쿠버네티스 클러스터 설정하기
기술 요구사항
신규 클러스터 생성 옵션
minikube로 클러스터 쉽게 시작하기
__minikube 설치하기
__minikube에서 클러스터 생성하기
관리형 쿠버네티스 서비스
__관리형 쿠버네티스 서비스의 장점
__관리형 쿠버네티스 서비스의 단점
AWS의 EKS(Elastic Kubernetes Service)
__시작하기
구글 클라우드의 GKE(Google Kubernetes Engine)
__시작하기
마이크로소프트 애저의 AKS(Azure Kubernetes Service)
__시작하기
프로그램 방식의 클러스터 생성 도구
__Kubeadm
__Kops
__Kubespray
Kubeadm으로 클러스터 생성하기
__Kubeadm 설치하기
__마스터 노드 시작하기
__워커 노드 시작하기
__kubectl 설정하기
Kops를 사용하여 클러스터 생성하기
__macOS에 설치하기
__리눅스에 설치하기
__윈도우에 설치하기
__Kops에 대한 자격 증명 설정하기
__상태 저장소 설정하기
__클러스터 생성하기
완전히 처음부터 클러스터 생성하기
__노드 프로비저닝
__TLS를 위한 쿠버네티스 인증 생성하기
__설정 파일 생성하기
__etcd 클러스터 생성과 암호화 구성하기
__컨트롤 플레인 컴포넌트 부트스트랩하기
__워커 노드 부트스트랩하기
요약
질문
더 읽을 거리
ㆍ 03장: 쿠버네티스에서 애플리케이션 컨테이너 실행하기
기술 요구사항
파드란?
파드 구현하기
__파드 패러다임
__파드 네트워크
__파드 스토리지
__네임스페이스
__파드의 라이프사이클
__파드 리소스 스펙 이해하기
요약
질문
더 읽을 거리
[2부] 쿠버네티스 애플리케이션 구성 및 배포
ㆍ 04장: 애플리케이션 스케일링 및 배포하기
기술 요구 사항
파드의 문제점과 해결책 이해하기
__파드 컨트롤러
레플리카셋 사용하기
__레플리카
__셀렉터
__템플릿
__레플리카셋 테스트
배포 제어하기
__명령형 커맨드로 배포 제어
수평형 파드 오토스케일러의 활용하기
데몬셋 구현하기
스테이트풀셋 이해하기
잡 사용하기
__크론잡
종합 정리
요약
질문
더 읽을 거리
ㆍ 05장: 서비스 및 인그레스 - 외부 시스템과 통신하기
기술 요구 사항
서비스와 클러스터 DNS 이해하기
__클러스터 DNS
__서비스 프락시 종류
ClusterIP 구현
__프로토콜
NodePort 사용하기
로드밸런서 서비스 설정하기
ExternalName 서비스 생성하기
인그레스 구성하기
__인그레스 컨트롤러
요약
질문
더 읽을 거리
ㆍ 06장: 쿠버네티스 애플리케이션 구성하기
기술 요구 사항
모범 사례를 활용한 컨테이너화된 애플리케이션 구성
__컨피그맵 이해하기
__시크릿 이해하기
컨피그맵 구현하기
__텍스트 값에서 컨피그맵 생성하기
__파일에서 컨피그맵 생성하기
__볼륨으로 컨피그맵 마운트하기
__환경 변수로 컨피그맵 마운트하기
시크릿 사용하기
__파일에서 시크릿 생성하기
수동 선언적으로 시크릿 생성하기
__볼륨으로 시크릿 마운트하기
__시크릿을 환경 변수로 마운트하기
__암호화된 시크릿 구현하기
__시크릿의 암호화 여부 확인하기
__클러스터 암호화 비활성화하기
요약
질문
더 읽을 거리
ㆍ 07장: 쿠버네티스의 스토리지
기술 요구 사항
볼륨과 퍼시스턴트 볼륨의 차이점 이해
볼륨
퍼시스턴트 볼륨
__퍼시스턴트 볼륨 클레임
__파드에 퍼시스턴트 볼륨 클레임(PVC) 연결하기
클라우드 스토리지가 없는 퍼시스턴트 볼륨
__Rook 설치하기
__rook-ceph-block 스토리지 클래스
__Rook Ceph 파일 시스템
요약
질문
더 읽을 거리
ㆍ 08장: 파드 할당 제어하기
기술 요구 사항
파드 할당에 대한 사용 사례 확인하기
__쿠버네티스 노드 상태 할당 제어하기
__다양한 노드 유형이 필요한 애플리케이션
__특정 데이터 규정 준수가 필요한 애플리케이션
__다중 장애 도메인
노드 셀렉터와 노드 네임 사용하기
테인트와 톨러레이션 구현하기
다중 테인트와 톨러레이션
노드 어피니티로 파드 제어하기
__requiredDuringSchedulingIgnoredDuringExecution 노드 어피니티 사용하기
__preferredDuringSchedulingIgnoredDuringExecution 노드 어피니티 사용하기
__다중 노드 어피니티
인터-파드 어피니티와 안티-어피니티 사용하기
__파드 어피니티
__파드 안티-어피니티
__결합된 어피니티와 안티-어피니티
__파드 어피니티와 안티-어피니티 제한 사항
__파드 어피니티와 안티-어피니티 네임스페이스
요약
질문
더 읽을 거리
[3부] 프로덕션 환경에서 쿠버네티스 실행하기
ㆍ 09장: 쿠버네티스의 관찰 가능성
기술 요구 사항
쿠버네티스 관찰 가능성 이해하기
__쿠버네티스 클러스터 및 애플리케이션 상태에 대한 중요 사항 이해하기
기본 관찰 도구 사용하기
__쿠버네티스의 지표
__쿠버네티스의 로깅
__쿠버네티스 대시보드 설치하기
__쿠버네티스의 경고와 추적
최상의 에코시스템을 활용하여 쿠버네티스 관찰 가능성 향상시키기
__프로메테우스와 그라파나 소개
__쿠버네티스에서 EFK 스택 구현하기
__예거를 사용하여 분산 추적 구현하기
__타사 도구
요약
질문
더 읽을 거리
ㆍ 10장: 쿠버네티스 문제 해결하기
기술 요구 사항
분산 애플리케이션의 장애 모드 이해하기
네트워크가 안정적입니다
__지연 시간이 0입니다
__대역폭이 무한합니다
__네트워크가 안전합니다
__토폴로지가 변경되지 않습니다
__관리자가 한 명뿐입니다
__전송비가 0입니다
__네트워크가 동종입니다
쿠버네티스 클러스터 문제 해결하기
__사례 연구 - 쿠버네티스 파드 배치 실패
쿠버네티스에서 애플리케이션 문제 해결하기
__사례 연구 1 - 서비스가 응답하지 않음
__사례 연구 2 - 잘못된 파드 시작 커맨드
__사례 연구 3 - 로그가 있는 파드 애플리케이션 오작동
요약
질문
더 읽을 거리
ㆍ 11장: 쿠버네티스의 템플릿 코드 생성 및 CI/CD
기술 요구 사항
쿠버네티스에서 템플릿 코드 생성을 위한 옵션 이해하기
__Helm
__Kustomize
Helm 및 Kustomize를 사용하여 쿠버네티스에서 템플릿 구현하기
__쿠버네티스와 함께 Helm 사용하기
__Helm 차트 설치 및 제거하기
__쿠버네티스와 함께 Kustomize 사용하기
클러스터 내부 및 외부 관점에서 쿠버네티스의 CI/CD 패러다임 이해하기
__클러스터 외 CI/CD
__클러스터 내 CI/CD
쿠버네티스를 사용하여 클러스터 내 및 클러스터 외 CI/CD 구현하기
__AWS Codebuild로 쿠버네티스 CI 구현
__FluxCD로 쿠버네티스 CI 구현하기
요약
질문
더 읽을 거리
ㆍ 12장: 쿠버네티스 보안 및 규정 준수
기술 요구 사항
쿠버네티스의 보안 이해하기
쿠버네티스에 대한 CVE 및 보안 감사 검토하기
__CVE-2016-1905 이해 - 부적절한 승인 제어
__CVE-2018-1002105 이해 - 백엔드로의 연결 업그레이드
__2019년 보안 감사 결과 이해하기
클러스터 구성 및 컨테이너 보안을 위한 도구 구현하기
__승인 컨트롤러 사용하기
__파드 보안 정책 활성화하기
__네트워크 정책 사용하기
쿠버네티스에서 침입 감지, 런타임 보안 및 규정 준수 처리하기
__팔코 설치하기
__팔코의 기능 이해하기
__팔코를 규정 준수 및 런타임 보안 사용 사례에 매핑하기
요약
질문
더 읽을 거리
[4부] 쿠버네티스 확장하기
ㆍ 13. CRD로 쿠버네티스 확장하기
기술 요구 사항
CRD로 쿠버네티스를 확장하는 방법
__커스텀 리소스 정의 작성하기
__커스텀 리소스 버전 정의 이해하기
__커스텀 리소스 정의 테스트하기
쿠버네티스 오퍼레이터를 통한 자체 관리 기능
__오퍼레이터의 제어 루프 매핑하기
__커스텀 리소스 정의를 위한 오퍼레이터 설계하기
클라우드별 쿠버네티스 익스텐션 사용하기
__cloud-controller-manager 컴포넌트 이해하기
__cloud-controller-manager 설치하기
__cloud-controller-manager 기능 확인하기
__쿠버네티스에서 external-dns 사용하기
__cluster-autoscaler 애드온 사용하기
에코시스템과 통합하기
__클라우드 네이티브 컴퓨팅 재단(CNCF) 소개
요약
질문
더 읽을 거리
ㆍ 14장: 서비스 메시 및 서버리스
기술 요구 사항
사이드카 프락시 사용
__NGINX를 사이드카 리버스 프락시로 사용하기
__사이드카 프락시로 Envoy 사용
쿠버네티스에 서비스 메시 추가
__쿠버네티스에서 Istio 설정
쿠버네티스에서 서버리스 구현
__쿠버네티스에서 FaaS용 Knative 사용
__쿠버네티스에서 FaaS용 OpenFaaS 사용
요약
질문
더 읽을 거리
ㆍ 15장: 쿠버네티스의 스테이트풀 워크로드
기술 요구 사항
쿠버네티스의 스테이트풀 애플리케이션 이해
__인기 있는 쿠버네티스 기반 스테이트풀 애플리케이션
__쿠버네티스에서 스테이트풀 애플리케이션을 실행하는 전략 이해
쿠버네티스에 객체 스토리지 배포
__Minio 오퍼레이터 설치
__Krew와 Minio kubectl 플러그인 설치
__Minio 오퍼레이터 시작
__Minio 테넌트 생성
__Minio 콘솔 접속
쿠버네티스에서 DB 실행
__쿠버네티스에서 CockroachDB 실행
__SQL로 CockroachDB 테스트
쿠버네티스에서 메시징과 큐 구현
__쿠버네티스에 RabbitMQ 배포
요약
질문
더 읽을 거리
Author
알렉산더 라울,김정민,이주현,김상민
알렉산더 라울은 래크너(Rackner)의 CEO입니다. 래크너는 많은 투자를 받은 스타트업부터 포춘 및 글로벌 500 선정 기업에 이르기까지 다양한 고객을 대상으로 쿠버네티스와 클라우드를 구축하고 운영 및 보안 관리해주는 혁신적인 컨설팅 회사입니다. 래크너에서 저자는 대형 쿠버네티스 기반 플랫폼을 구축하고 관리했으며, 규모가 큰 조직을 대상으로 엔드 투 엔드 DevSecOps를 구현했습니다. 기술적인 배경과 학력(메릴랜드 대학의 항공우주학 학사)뿐만 아니라 클라우드와 쿠버네티스에 대한 비즈니스와 전략 논의는 물론, 관련 기술 도입에 관한 문제에도 정통합니다. 알렉산더는 워싱턴 D.C.에 살고 있으며 고객과 일하지 않는 시간에는 등산이나 스키, 달리기를 즐겨합니다.
알렉산더 라울은 래크너(Rackner)의 CEO입니다. 래크너는 많은 투자를 받은 스타트업부터 포춘 및 글로벌 500 선정 기업에 이르기까지 다양한 고객을 대상으로 쿠버네티스와 클라우드를 구축하고 운영 및 보안 관리해주는 혁신적인 컨설팅 회사입니다. 래크너에서 저자는 대형 쿠버네티스 기반 플랫폼을 구축하고 관리했으며, 규모가 큰 조직을 대상으로 엔드 투 엔드 DevSecOps를 구현했습니다. 기술적인 배경과 학력(메릴랜드 대학의 항공우주학 학사)뿐만 아니라 클라우드와 쿠버네티스에 대한 비즈니스와 전략 논의는 물론, 관련 기술 도입에 관한 문제에도 정통합니다. 알렉산더는 워싱턴 D.C.에 살고 있으며 고객과 일하지 않는 시간에는 등산이나 스키, 달리기를 즐겨합니다.