쿠버네티스 환경: Google Kubernetes Engine(GKE), 일부 kind(Kubernetes in Docker)를 사용
쿠버네티스 버전: 1.18.16-gke.2100(kind의 경우: 1.18.15)
kubectl 버전: v1.18.16





쿠버네티스의 기본 구조
쿠버네티스 마스터: 전체를 관리하는 '두뇌' 역할
API 엔드포인트 제공
컨테이너 스케줄링
쿠버네티스 노드: 실제 일을 하는 '손발' 역할
도커 호스트와 비슷한 개념
실제로 컨테이너를 실행시킴
쿠버네티스 클러스터 관리 도구
kubectl: 명령줄 도구
매니페스트 파일: YAML 또는 JSON 형식의 설정 파일
주로 YAML 형식 사용 (가독성이 좋음)
파일 확장자: .yaml, .yml, .json
관리 과정
API 특징

컨테이너 서비스 디스커버리와 클러스터 외부에서도 접속이 가능한 엔드포인트 등을 제공하는 리소스
목적: 다른 리소스의 동작 제어
주요 리소스: LimitRange, HorizontalPodAutoscaler, PodDisruptionBudget, 커스텀 리소스 데피니션
특징: 리소스 사용량 제어, 자동 스케일링 등 관리 기능 제공
예를 들어, 파드를 오토 스케일링시키기 위해 사용하는 HorizontalPodAutoscaler(HPA)는 디플로이먼트 리소스를 조작해 레플리카 수를 변경함으로써 오토 스케일링을 구현

네임스페이스의 개념
기본 네임스페이스:
네임스페이스 사용의 장점
보안과 네트워크 정책
네임스페이스 분리에 대한 조언
클러스터로 환경 분리를 권장하는 이유

쿠버네티스에서 클러스터 조작은 모두 쿠버네티스 마스터의 API를 통해 이루어진다.
직접 API에 요청을 보내거나 클라이언트 라이브러리를 사용하여 클러스터를 조작함
수동으로 조작하는 경우에는 CLI 도구인 ‘kubectl’을 사용하는 것이 일반적


kubectl이 쿠버네티스 마스터와 통신할 때는 접속 대상의 서버 정보, 인증 정보 등이 필요
kubectl은 kubeconfig(기본 위치는 ~/.kube/config)에 쓰여 있는 정보를 사용하여 접속
kubeconfig도 매니페스트와 동일한 형식으로 작성
kubeconfig 파일의 중요성
이유: kubeconfig 파일은 kubectl이 클러스터에 연결하고 작업을 수행하는 데 필요한 모든 정보를 담고 있어 매우 중요합니다. 이 파일이 없으면 kubectl은 클러스터와 통신할 수 없습니다.
kubeconfig 파일의 구조
이유: 이 구조는 쿠버네티스의 일관된 설정 방식을 따르며, 사용자가 쉽게 이해하고 수정할 수 있도록 설계되었습니다.
kubeconfig의 주요 섹션
a. clusters: 접속 대상 클러스터 정보를 정의합니다.
b. users: 인증 정보를 정의합니다.
c. contexts: cluster와 user, 네임스페이스를 조합하여 정의합니다.
이유: 이렇게 분리된 구조를 통해 여러 클러스터, 사용자, 네임스페이스 조합을 쉽게 관리할 수 있습니다.
kubeconfig 설정 변경 방법
이유: 직접 편집은 유연성을 제공하지만, kubectl 명령어를 사용하면 오류를 줄이고 일관성을 유지할 수 있습니다.
컨텍스트 관리
이유: 컨텍스트 관리 기능을 통해 여러 환경이나 권한 사이를 쉽게 전환할 수 있어, 복잡한 멀티 클러스터 환경에서도 효율적으로 작업할 수 있습니다.
인증 방식
이유: 다양한 인증 방식을 지원함으로써 조직의 보안 정책이나 인프라 구조에 맞는 유연한 인증 설정이 가능합니다.

kubectx/kubens의 필요성
이유: 이는 왜 이 도구들이 필요한지, 어떤 문제를 해결하는지 설명합니다. 복잡한 환경에서 작업 효율성을 높이는 데 중요합니다.
kubectx/kubens의 장점
자동 완성 기능 제공
컨텍스트 변경 시 컨텍스트명 지정이 매우 쉬움

kubectl을 사용하여 실제 매니페스트를 기반으로 컨테이너를 기동해보자. 여기서는 하나의 컨테이너를 가진 파드를 sample-pod라는 이름으로 생성





kubectl apply 사용의 두 가지 주요 이유
- 일관성 유지
이유: 이는 코드의 복잡성을 줄이고, 오류 가능성을 낮추며, 일관된 워크플로우를 유지할 수 있게 합니다.
b) 변경 사항 감지의 정확성
이유: 이는 리소스 관리의 정확성과 일관성을 보장하기 위해 중요합니다.
kubectl apply의 동작 방식
세 가지 정보를 비교하여 변경 사항을 결정합니다:
이전에 적용한 매니페스트
현재 클러스터에 등록된 리소스 상태
이번에 적용할 매니페스트
이유: 이 복잡한 비교 과정은 리소스의 상태를 정확하게 추적하고 변경할 수 있게 합니다.
'last-applied-configuration' 어노테이션
이유: 이 어노테이션은 apply가 변경 사항을 정확히 계산하는 데 필요합니다.
kubectl create의 문제점
이유: 이는 리소스 관리의 일관성과 정확성을 해칠 수 있어 주의가 필요합니다.
경고메시지:
이유: 이 경고는 잠재적인 문제를 사용자에게 알려주어 오류를 예방합니다.
책에서의 접근 방식
이유: 이는 일관된 학습 환경을 제공하고, 각 예제를 독립적으로 이해할 수 있게 합니다.