코어 쿠버네티스

도서명:코어 쿠버네티스
저자/출판사:제이 비아스 , 크리스 러브/위키북스
쪽수:392쪽
출판일:2023-07-28
ISBN:9791158393946
목차
▣ 01장: 왜 쿠버네티스인가?
1.1 사전 준비 - 몇 가지 핵심 용어 검토하기
1.2 인프라 드리프트 문제와 쿠버네티스
1.3 컨테이너와 이미지
1.4 쿠버네티스의 핵심 기초
__1.4.1 쿠버네티스에서 모든 인프라 규칙은 평범한 YAML로 관리된다
1.5 쿠버네티스의 기능
1.6 쿠버네티스 컴포넌트와 아키텍처
__1.6.1 쿠버네티스 API
__1.6.2 예제 1: 온라인 소매업체
__1.6.3 예제 2: 온라인 기부 솔루션
1.7 쿠버네티스를 사용하지 말아야 하는 경우
요약
▣ 02장: 왜 파드인가?
2.1 웹 애플리케이션 예제
__2.1.1 웹 애플리케이션 인프라
__2.1.2 운영 요구사항
2.2 파드란 무엇인가?
__2.2.1 다양한 리눅스 네임스페이스
__2.2.2 쿠버네티스, 인프라, 파드
__2.2.3 노드 API 객체
__2.2.4 웹 애플리케이션과 컨트롤 플레인
2.3 kubectl로 웹 애플리케이션 생성하기
__2.3.1 쿠버네티스 API 서버: kube-apiserver
__2.3.2 쿠버네티스 스케줄러: kube-scheduler
__2.3.3 인프라 컨트롤러
2.4 확장, 고가용성 애플리케이션, 컨트롤 플레인
__2.4.1 자동 확장
__2.4.2 비용 관리
요약
▣ 03장: 파드 생성하기
3.1 kind로 쿠버네티스 기본 요소 살펴보기
3.2 리눅스 기본 요소란 무엇인가?
__3.2.1 리눅스 기본 요소는 리소스 관리 도구다
__3.2.2 모든 것은 파일(또는 파일 디스크립터)이다
__3.2.3 파일들은 합성이 가능하다
__3.2.4 kind 설정
3.3 쿠버네티스에서 리눅스 기본 요소 사용하기
__3.3.1 파드 실행을 위한 전제 조건
__3.3.2 간단한 파드 실행하기
__3.3.3 파드의 리눅스 의존성 탐색하기
3.4 처음부터 파드 만들기
__3.4.1 chroot를 사용해 격리 프로세스 생성하기
__3.4.2 마운트를 사용해 작업을 위한 프로세스 데이터 제공하기
__3.4.3 unshare를 통한 프로세스 보****
__3.4.4 네트워크 네임스페이스 생성하기
__3.4.5 프로세스 상태 확인하기
__3.4.6 cgroup을 통한 CPU 조정하기
__3.4.7 리소스 스탠자 생성하기
3.5 현실에서 파드 사용하기
__3.5.1 네트워킹 문제
__3.5.2 iptables를 활용하여 kube-proxy의 쿠버네티스 서비스 구현 방법 이해하기
__3.5.3 kube-dns 파드 사용하기
__3.5.4 기타 문제 고려하기
요약
▣ 04장: 파드 내 프로세스에서 cgroups 사용하기
4.1 파드는 준비 작업이 완료될 때까지 유휴 상태다
4.2 리눅스의 프로세스와 스레드
__4.2.1 sytemd와 init 프로세스
__4.2.2 프로세스의 cgroups
__4.2.3 일반 파드에 대한 cgroups 구현
4.3 cgroups 테스트하기
4.4 kubelet의 cgroups 관리 방법
4.5 kubelet의 리소스 관리 방법 자세히 알아보기
__4.5.1 왜 OS는 쿠버네티스에서 스왑을 사용할 수 없는가?
__4.5.2 해킹: 가난한 자의 우선순위 조절 방법
__4.5.3 해킹: init 컨테이너로 HugePages 편집하기
__4.5.4 QoS 클래스가 중요한 이유와 동작 방법
__4.5.5 리소스 설정을 통한 QoS 클래스 생성하기
4.6 프로메테우스, cAdvisor, API 서버로 리눅스 커널 모니터링하기
__4.6.1 메트릭은 게시 비용이 저렴하며 매우 가치가 높다
__4.6.2 프로메테우스가 필요한 이유는 무엇인가?
__4.6.3 로컬 프로메테우스 모니터링 서비스 생성하기
__4.6.4 프로메테우스에서 시스템 장애 특성화하기
요약
▣ 05장: 컨테이너 네트워크 인터페이스(CNI), 그리고 네트워크를 통한 파드 제공
5.1 쿠버네티스에 SDN이 필요한 이유
5.2 쿠버네티스 SDN의 서비스 측면 구현하기: kube-proxy
__5.2.1 kube-proxy 데이터 플레인
__5.2.2 NodePort 서비스
5.3 CNI 공급자
5.4 두 개의 CNI 네트워킹 플러그인 살펴보기: Calico와 Antrea
__5.4.1 CNI 플러그인의 아키텍처
__5.4.2 CNI를 사용해 보자
__5.4.3 Calico CNI 공급자 설치
__5.4.4 OVS와 Antrea를 통한 쿠버네티스 네트워킹
__5.4.5 다른 OS상의 CNI 공급자와 kube-proxy에 대한 참고사항
요약
▣ 06장: 대규모 네트워크 오류 해결하기
6.1 Sonobuoy - 클러스터 기능 확인을 위한 도구
__6.1.1 실제 클러스터에서 파드의 데이터 경로 추적하기
__6.1.2 Antrea CNI 공급자로 클러스터 설정하기
6.2 arp와 ip 명령어를 통한 다양한 공급자의 CNI 라우팅 검사
__6.2.1 IP 터널이란 무엇이며, 왜 CNI 공급자들이 IP 터널을 이용하는가?
__6.2.2 CNI의 네트워크 인터페이스를 통해 얼마나 많은 패킷이 흐르는가?
__6.2.3 경로
__6.2.4 CNI 특화 도구 - OVS (Open vSwitch)
__6.2.5 tcpdump를 이용한 활성 컨테이너의 데이터 경로 추적
6.3 kube-proxy와 iptables
__6.3.1 iptables-save와 diff 도구
__6.3.2 네트워크 정책이 CNI 규칙을 수정하는 방법 살펴보기
__6.3.3 이러한 정책들은 어떻게 구현되는가?
6.4 인그레스 컨트롤러
6.4 인그레스 컨트롤러
__6.4.1 인그레스 컨트롤러를 탐색하기 위한 Contour와 kind 설정
__6.4.2 간단한 웹 서버 파드 설정하기
요약
▣ 07장: 파드 스토리지와 CSI
7.1 빠른 우회 방법: 리눅스의 가상 파일시스템(VFS)
7.2 세 가지 스토리지 유형에 대한 쿠버네스트 요구사항
7.3 kind 클러스터에 PVC 생성하기
7.4 컨테이너 스토리지 인터페이스(CSI)
__7.4.1 인트리 공급자 문제
__7.4.2 쿠버네티스 내부에서 동작하는 명세로서의 CSI
__7.4.3 CSI - 스토리지 드라이버 작동 방식
__7.4.4 바인드 마운팅
7.5 몇 가지 실행 중인 CSI 드라이버에 대한 간략한 개요
__7.5.1 컨트롤러
__7.5.2 노드 인터페이스
__7.5.3 리눅스가 아닌 OS의 CSI
요약
▣ 08장: 스토리지 구현과 모델링
8.1 더 넓은 쿠버네티스 생태계의 축소판 - 동적 스토리지
__8.1.1 즉각적인 스토리지 관리 - 동적 프로비저닝
__8.1.2 로컬 스토리지와 emptyDir 비교
__8.1.3 PersistentVolume
__8.1.4 컨테이너 스토리지 인터페이스(CSI)
8.2 동적 프로비저닝은 CSI에서 혜택을 얻지만 직교적이다
__8.2.1 StorageClasses
__8.2.2 데이터 센터 항목으로 되돌아가기
8.3 스토리지에 대한 쿠버네티스 유스케이스
__8.3.1 시크릿 - 임시적인 파일 공유
8.4 동적 스토리지 공급자는 일반적으로 어떻게 보이는가?
8.5 시스템 제어와/또는 데이터 액세스를 위한 hostPath
__8.5.1 hostPath, CSI 및 CNI: 표준 유스케이스
__8.5.2 카산드라: 실제 쿠버네티스 애플리케이션 스토리지의 예
__8.5.3 고급 스토리지 기능과 쿠버네티스 스토리지 모델
8.6 더 읽을거리
요약
▣ 09장: 파드 실행: kubelet의 동작 방법
9.1 kubelet과 노드
9.2 kubelet의 핵심
__9.2.1 컨테이너 런타임: 표준과 규약
__9.2.2 kubelet 구성과 API
9.3 파드를 생성하고 실제 동작 살펴보기
__9.3.1 kubelet 바이너리 시작하기
__9.3.2 시작 이후: 노드 수명주기
__9.3.3 etcd의 임대와 잠금, 그리고 노드 임대의 진화
__9.3.4 kubelet의 파드 수명주기 관리
__9.3.5 CRI, 컨테이너, 이미지: 서로 어떻게 관련되어 있는가
__9.3.6 kubelet은 컨테이너를 실행하지 않는다: 그것은 CRI의 일이다
__9.3.7 Pause 컨테이너: 깨달음의 순간
9.4 컨테이너 런타임 인터페이스(CRI)
__9.4.1 컨테이너 런타임의 위치를 쿠버네티스에 알려주기
__9.4.2 CRI 루틴
__9.4.3 CRI와 관련된 kubelet의 추상화: GenericRuntimeManager
__9.4.4 CRI는 어떻게 호출되는가?
9.5 kubelet의 인터페이스
__9.5.1 Runtime 내부 인터페이스
__9.5.2 kubelet이 이미지를 가져오는 방법 - ImageService 인터페이스
__9.5.3 kubelet에 ImagePullSecrets 제공하기
9.6 더 읽을거리
요약
▣ 10장: 쿠버네티스의 DNS
10.1 DNS(그리고 CoreDNS)의 간략한 소개
__10.1.1 NXDOMAIN, 레코드, CNAME 레코드
__10.1.2 파드는 내부 DNS를 필요로 한다
10.2 왜 디플로이먼트 대신 스테이트풀셋을 사용하는가?
__10.2.1 헤드리스 서비스를 갖는 DNS
__10.2.2 스테이트풀셋 내의 영구적인 DNS 레코드
__10.2.3 파드의 DNS 속성 탐색을 위해 폴리글랏 디플로이먼트 사용하기
10.3 resolv.conf 파일
__10.3.1 간단한 라우팅 관련 참고사항
__10.3.2 CoreDNS: ClusterFirst 파드 DNS의 업스트림 해석기
__10.3.3 CoreDNS 플러그인 구성 해킹하기
요약
▣ 11장: 컨트롤 플레인의 핵심
11.1 컨트롤 플레인 살펴보기
11.2 API 서버 세부사항
__11.2.1 API 객체와 사용자 정의 API 객체
__11.2.2 사용자 정의 리소스 정의(CRD)
__11.2.3 스케줄러 세부사항
__11.2.4 스케줄링 다시 살펴보기
11.3 컨트롤러 매니저
__11.3.1 스토리지
__11.3.2 서비스 계정과 토큰
11.4 쿠버네티스 클라우드 컨트롤러 매니저(CCM)
11.5 더 읽을거리
요약
▣ 12장. etcd와 컨트롤 플레인
12.1 참을성 없는 사람들을 위한 참고사항
__12.1.1 프로메테우스를 통한 etcd 성능의 시각화
__12.1.2 etcd 튜닝 시점 파악하기
__12.1.3 예제: etcd의 빠른 상태 점검
__12.1.4 etcd v3 vs. v2
12.2 데이터 저장소로서의 etcd
__12.2.1 감시: 다른 데이터베이스에서 쿠버네티스를 실행할 수 있는가?
__12.2.2 엄격한 일관성
__12.2.3 fsync 오퍼레이션은 etcd를 일관성 있게 만든다
12.3 쿠버네티스를 위한 etcd 인터페이스 살펴보기
12.4 etcd는 사실을 정확하게 유지한다
__12.4.1 etcd 사전 기록 로그
__12.4.2 쿠버네티스에 미치는 영향
12.5 CAP 정리
12.6 클라이언트 수준의 로드 밸런싱과 etcd
__12.6.1 크기 제한: 걱정해야(하지 말아야) 하는 사항
12.7 eted 암호화
12.8 글로벌 규모에서 etcd의 성능 및 내결함성
12.9 고도로 분산된 etcd의 하트비트 시간
12.10 kind 클러스터에 etcd 클라이언트 설정하기
__12.10.1 리눅스가 아닌 환경에서 etcd 실행하기
요약
▣ 13장: 컨테이너와 파드 보****
13.1 폭발 반경
__13.1.1 취약점
__13.1.2 침입
13.2 컨테이너 보****
__13.2.1 컨테이너와 사용자 정의 소프트웨어 업데이트 계획
__13.2.2 컨테이너 심사
__13.2.3 컨테이너 사용자 - 루트 사용자로 실행하지 마라
__13.2.4 가장 작은 컨테이너를 사용하라
__13.2.5 컨테이너 출처
__13.2.6 컨테이너를 위한 린터
13.3 파드 보****
__13.3.1 보****컨텍스트
__13.3.2 에스컬레이션된 권한과 기능
__13.3.3 파드 보****정책(PSP)
__13.3.4 자동으로 서비스 계정 토큰을 마운트하지 마라
__13.3.5 유사 루트 파드
__13.3.6 보****외곽
요약
▣ 14장: 노드와 쿠버네티스 보****
14.1 노드 보****
__14.1.1 TLS 인증서
__14.1.2 불변 OS 대 노드 패치하기
__14.1.3 격리된 컨테이너 런타임
__14.1.4 리소스 공격
__14.1.5 CPU 단위
__14.1.6 메모리 단위
__14.1.7 스토리지 단위
__14.1.8 호스트 네트워크 vs. 파드 네트워크
__14.1.9 파드 예제
14.2 API 서버 보****
__14.2.1 역할 기반 액세스 제어(RBAC)
__14.2.2 RBAC API 정의
__14.2.3 리소스와 하위 리소스
__14.2.4 Subjects와 RBAC
__14.2.5 RBAC 디버깅
14.3 Authn, Authz, Secret
__14.3.1 IAM 서비스 계정: 클라우드 API 보****
__14.3.2 클라우드 리소스 액세스
__14.3.3 전용 API 서버
14.4 네트워크 보****
__14.4.1 네트워크 정책
__14.4.2 로드 밸런서
__14.4.3 OPA(Open Policy Agent)
__14.4.4 멀티테넌시
14.5 쿠버네티스 팁
요약
▣ 15장: 애플리케이션 설치하기
15.1 쿠버네티스 앱에 대한 생각
__15.1.1 애플리케이션의 범위는 사용하는 도구에 영향을 미친다
15.2 마이크로서비스 앱들은 수천 라인의 구성 코드가 필요하다
15.3 실제 환경의 Guestbook 앱 설치에 대한 재고
15.4 Carvel 툴킷 설치
__15.4.1 1부: 리소스를 별도 파일로 모듈화
__15.4.2 2부: ytt를 이용한 애플리케이션 파일 패치
__15.4.3 3부: Guestbook을 단일 애플리케이션으로 관리하고 배치하기
__15.4.4 4부: 애플리케이션 패키징 및 관리를 위한 kapp 오퍼레이터 구성
15.5 쿠버네티스 오퍼레이터 다시 살펴보기
15.6 Tanzu 커뮤니티 에디션: Carvel 툴킷의 전체 예제
요약