Kubernetes Study · 스터디 홈
인프라 0부터 쿠버네티스까지
스터디를 하면서 개념을 그림으로 정리하는 스터디 노트예요. 스터디 과정 하나가 파일 하나이고, 입문에서 시작해 단계별로 깊이를 더해 갑니다.
학습 단계
01입문 완료
쿠버네티스 입문
이게 무엇이고 왜 필요한가 — 비유와 큰 그림 중심
- 1부컨테이너와 오케스트레이션
- 2부쿠버네티스 시작하기노드 · GKE · kubectl · YAML
- 3부Pod라벨 · 사이드카 · 상태 · 프로브 · 리소스
- 4부워크로드 컨트롤러레플리카 · ReplicaSet · Deployment · DaemonSet · Job · StatefulSet
- 5부네트워킹Service · ClusterIP · NodePort · LoadBalancer · DNS · Ingress
- 6부설정과 저장소ConfigMap · Secret · Volume · PV · PVC · StorageClass
- 7부운영 기초Namespace · HPA · 로그 · 처음부터 끝까지 배포
열기 →
02전반 완료
쿠버네티스 전반
실제로 어떻게 쓰고 내부에서 어떻게 도는가 — YAML · 명령어 · 장애 상황 중심
- 1부클러스터 아키텍처etcd · API 서버 · 스케줄러 · 컨트롤러 · kubelet
- 2부리소스 기본기 다시 보기Pod · ReplicaSet · Deployment · Service · Namespace
- 3부스케줄링Taint · Affinity · 리소스 · Static Pod · Priority
- 4부로깅과 모니터링metrics-server · 컴포넌트 · 로그 · Events
- 5부애플리케이션 라이프사이클롤링 업데이트 · ConfigMap · Secret · 멀티 컨테이너 · 오토스케일링
- 6부클러스터 유지보수drain · 업그레이드 · etcd 백업과 복구
- 7부보안 ① 인증과 인가TLS · kubeconfig · RBAC · ServiceAccount · Admission
- 8부보안 ② 워크로드와 네트워크이미지 보안 · SecurityContext · Network Policy
- 9부스토리지CSI · PV · PVC · StorageClass
- 10부네트워크 기초라우팅 · DNS · 네트워크 네임스페이스 · CNI
- 11부쿠버네티스 네트워킹Pod 네트워킹 · Service · CoreDNS · Ingress · Gateway API
- 12부클러스터 설계와 설치HA · etcd HA · kubeadm
- 13부HelmChart · Release · 라이프사이클
- 14부KustomizeTransformer · Patch · Overlay
- 15부쿠버네티스 확장하기CRD · Custom Controller · Operator
- 16부트러블슈팅애플리케이션 · 컨트롤 플레인 · 워커 노드 · 네트워크
- 17부kubectl 실전 도구JSON Path · custom-columns
열기 →
정리 원칙
| 01 입문 | 02 전반 | |
|---|---|---|
| 질문 | 이게 뭐고, 왜 필요한가? | 어떻게 쓰고, 안에서 어떻게 도나? |
| 설명 방식 | 비유 · 큰 그림 · 낯선 단어는 풀어 쓰기 | YAML 필드 · kubectl · 동작 순서 · 장애 대응 |
| 목차 | 학습 순서를 그대로 따라 부(部) 단위로 추가. 각 부는 01 · 02 … 절과 소제목으로 구성 | |
| 중복 | 같은 개념이 다시 나오면 기초는 반복하지 않고 앞 파일로 링크, 새 깊이만 추가 | |
지금까지의 개념 흐름
정리한 개념이 어떤 순서로 이어지는지 보여 줘요. 스터디가 진행되면 오른쪽으로 계속 이어 붙입니다.
서버 · 프로세스→
VM vs 컨테이너→
네임스페이스 · cgroup→
이미지 · 레이어→
원하는 상태 · 제어 루프→
클러스터 구조→
마스터 · 워커 노드→
노드 구성 요소→
GCP · GKE→
kubectl→
YAML 매니페스트→
Pod→
라벨 · 셀렉터→
상태 · 재시작 · 프로브→
requests · limits→
레플리카→
ReplicaSet · Deployment→
DaemonSet · Job · StatefulSet→
Service→
ClusterIP · NodePort · LoadBalancer→
DNS→
Ingress→
ConfigMap · Secret→
Volume→
PV · PVC · StorageClass→
Namespace→
HPA→
로그 · 문제 해결→
처음부터 끝까지 배포→
컨트롤 플레인 해부→
리소스 기본기 · apply→
스케줄링 규칙→
로그 · 지표 · 이벤트→
배포 · 설정 · 확장→
점검 · 업그레이드 · 백업→
인증 · 인가 · 어드미션→
이미지 · Pod 권한 · 네트워크 보안→
CSI · PV · PVC · StorageClass→
라우팅 · DNS · netns · CNI→
Pod · Service · DNS · Ingress · Gateway→
HA · etcd 쿼럼 · kubeadm→
chart · release · values→
base · overlay · patch→
CRD · 컨트롤러 · Operator→
앱 · 컨트롤 플레인 · 노드 · 네트워크 장애→
JSON Path · custom-columns · 손버릇
용어 사전
정리하면서 나온 용어를 모아 둬요. 오른쪽 링크를 누르면 처음 설명한 곳으로 이동합니다.
| 용어 | 한 줄 뜻 | 어디서 |
|---|---|---|
| 컨테이너 | 이미지를 실행한 것. 리눅스 커널 기능으로 격리된 프로세스 | 입문 1부 · 01 |
| 이미지 | 앱 + 실행 환경을 굳힌 읽기 전용 꾸러미. 레이어를 쌓아 만듦 | 입문 1부 · 04 |
| 레이어 | Dockerfile 명령 하나가 만든 변경분. 바뀌지 않으면 캐시 재사용 | 입문 1부 · 04 |
| 레지스트리 | 이미지를 올리고 받는 저장소 (Docker Hub, ECR) | 입문 1부 · 04 |
| 컨테이너 런타임 | 이미지를 받아 컨테이너로 실행하는 프로그램 (containerd, Docker) | 입문 1부 · 01 |
| 가상 머신 (VM) | 하드웨어를 흉내 내 OS를 통째로 하나씩 갖는 가짜 컴퓨터 | 입문 1부 · 02 |
| 하이퍼바이저 | 하드웨어를 쪼개 VM 여러 대를 만들어 주는 소프트웨어 | 입문 1부 · 02 |
| 커널 | OS의 핵심. 하드웨어를 직접 다루고 앱의 요청(시스템 콜)을 처리 | 입문 1부 · 02 |
| 네임스페이스 (리눅스) | 프로세스가 볼 수 있는 범위를 나누는 칸막이 (pid, mnt, net, uts …) | 입문 1부 · 03 |
| cgroup | 프로세스가 쓸 수 있는 CPU · 메모리 양을 제한 | 입문 1부 · 03 |
| OOMKilled | 메모리 한도를 넘어 강제 종료됨. 종료 코드 137 | 입문 1부 · 03 |
| 오케스트레이션 | 여러 서버의 컨테이너 배치 · 복구 · 확장 · 배포를 자동으로 맞추는 일 | 입문 1부 · 05 |
| 원하는 상태 · 제어 루프 | 선언한 상태와 현재 상태를 계속 비교해 차이를 없애는 반복 | 입문 1부 · 05 |
| 선언형 | 과정이 아니라 결과(어떤 상태여야 하는지)를 적는 방식 | 입문 1부 · 05 |
| 롤링 업데이트 | 새 버전을 하나씩 띄우고 옛 버전을 하나씩 내려 중단 없이 교체 | 입문 1부 · 05 |
| 클러스터 | 마스터 노드 + 워커 노드로 묶인 서버 집합 | 입문 2부 · 01 |
| 노드 | 쿠버네티스에 등록된 서버 한 대 (클라우드에선 보통 VM) | 입문 2부 · 01 |
| 마스터 노드 (= 컨트롤 플레인) | API 서버 · etcd · 스케줄러 · 컨트롤러 매니저. 결정하고 관리하는 두뇌 | 입문 2부 · 01 |
| 워커 노드 | kubelet · kube-proxy · 런타임이 있어 실제로 Pod를 실행하는 서버 | 입문 2부 · 01 |
| kubelet | 노드마다 있는 관리인. 배정된 Pod를 런타임에 실행시키고 상태를 보고 | 입문 2부 · 02 |
| kube-proxy | Service로 온 요청이 알맞은 Pod로 가도록 노드의 네트워크 규칙 관리 | 입문 2부 · 02 |
| Capacity · Allocatable | 노드 전체 자원 · 그중 Pod에 내줄 수 있는 양 | 입문 2부 · 02 |
| GCP | Google Cloud Platform. 구글의 클라우드. 자원은 프로젝트 단위로 관리 | 입문 2부 · 03 |
| GKE | Google Kubernetes Engine. 마스터 노드를 구글이 운영하는 관리형 쿠버네티스 | 입문 2부 · 03 |
| 노드 풀 | 같은 설정의 워커 노드(VM) 묶음 | 입문 2부 · 03 |
| kubectl | 명령을 API 서버 요청으로 바꿔 보내는 CLI | 입문 2부 · 04 |
| kubeconfig · context | kubectl이 읽는 접속 설정 파일(~/.kube/config) · 클러스터와 사용자 묶음 | 입문 2부 · 04 |
| YAML 매니페스트 | 원하는 상태를 적은 파일. apiVersion · kind · metadata · spec | 입문 2부 · 05 |
| spec · status | 원하는 상태(내가 씀) · 현재 상태(쿠버네티스가 채움) | 입문 2부 · 05 |
| Pod | 쿠버네티스가 컨테이너를 감싸 다루는 가장 작은 단위. IP 하나, 일회용 | 입문 3부 · 01 |
| 라벨 · 셀렉터 | 객체에 붙이는 키=값 꼬리표 · 그 꼬리표로 대상을 고르는 조건 | 입문 3부 · 02 |
| 사이드카 | 주 컨테이너를 돕는 보조 컨테이너를 같은 Pod에 넣는 패턴 | 입문 3부 · 03 |
| init 컨테이너 | 본 컨테이너보다 먼저 실행되고 끝나야 하는 준비용 컨테이너 | 입문 3부 · 03 |
| restartPolicy | 컨테이너가 끝났을 때 다시 띄울지 (Always · OnFailure · Never) | 입문 3부 · 04 |
| CrashLoopBackOff | 컨테이너가 계속 죽어서 재시작 사이에 점점 길게 기다리는 상태 | 입문 3부 · 04 |
| ImagePullBackOff | 이미지를 받지 못해 재시도를 기다리는 상태 (이름 · 태그 오타 등) | 입문 3부 · 04 |
| readinessProbe | 요청 받을 준비 확인. 실패하면 트래픽에서 빠짐 | 입문 3부 · 05 |
| livenessProbe | 멈추지 않았는지 확인. 실패하면 컨테이너 재시작 | 입문 3부 · 05 |
| requests · limits | 자원 예약(스케줄링 기준) · 상한(CPU는 느려짐, 메모리는 OOMKilled) | 입문 3부 · 06 |
| 레플리카 · replicas | 똑같은 Pod의 복제본 · 그 개수. 가용성 · 부하 분산 · 무중단 배포 | 입문 4부 · 01 |
| stateless | Pod 안에 남아야 할 상태를 두지 않는 앱. 상태는 DB 등 바깥에 | 입문 4부 · 01 |
| ReplicaSet | 셀렉터로 Pod를 세고 replicas만큼 template으로 찍어 유지하는 컨트롤러 | 입문 4부 · 02 |
| Deployment | ReplicaSet을 관리하며 롤링 업데이트 · 롤백을 하는 컨트롤러 | 입문 4부 · 03 |
| rollout · revision | 버전 교체 과정 · 버전 기록. rollout undo로 되돌림 | 입문 4부 · 03 |
| maxSurge · maxUnavailable | 교체 중 더 띄울 수 있는 수 · 빠져도 되는 수 | 입문 4부 · 03 |
| DaemonSet | 노드마다 Pod를 하나씩 띄우는 컨트롤러 | 입문 4부 · 04 |
| Job · CronJob | 끝나면 완료되는 작업 · 시간표대로 Job을 만드는 것 | 입문 4부 · 05 |
| StatefulSet | 고정 이름 · 순서 · Pod별 디스크가 필요한 앱(DB 등)용 컨트롤러 | 입문 4부 · 06 |
| Service | 셀렉터로 묶은 Pod들 앞의 고정 주소 · 이름. 요청을 나눠 보냄 | 입문 5부 · 01 |
| port · targetPort | Service가 받는 포트 · Pod로 넘기는 포트 | 입문 5부 · 01 |
| EndpointSlice | Service 뒤의 준비된 Pod IP 목록. 자동으로 갱신 | 입문 5부 · 01 |
| ClusterIP | 클러스터 안에서만 쓰는 Service 고정 IP · 기본 종류 | 입문 5부 · 02 |
| NodePort | 모든 노드의 같은 포트(30000~32767)로 Service를 여는 종류 | 입문 5부 · 02 |
| LoadBalancer | 클라우드 로드밸런서와 외부 IP로 Service를 공개하는 종류 | 입문 5부 · 02 |
| CoreDNS · 서비스 디스커버리 | Service 이름을 ClusterIP로 바꿔 주는 클러스터 DNS · 이름으로 상대를 찾는 것 | 입문 5부 · 03 |
| headless Service | clusterIP: None. DNS가 Pod IP 목록을 그대로 돌려줌 | 입문 5부 · 03 |
| Ingress · Ingress 컨트롤러 | 호스트 · 경로 규칙으로 여러 Service에 나누는 입구 · 그 규칙을 실제로 처리하는 프로그램 | 입문 5부 · 04 |
| Gateway API | Ingress의 후속 표준 | 입문 5부 · 04 |
| ConfigMap | 설정을 이미지 밖으로 뺀 객체. 환경 변수나 파일로 넣음 | 입문 6부 · 01 |
| Secret | 비밀값용 객체. base64는 암호화가 아님 — 권한 · 암호화로 보호 | 입문 6부 · 02 |
| Volume · emptyDir | 컨테이너 밖 저장 공간 · Pod와 수명이 같은 빈 폴더 | 입문 6부 · 03 |
| PVC · PV | 디스크 요청서 · 실제 디스크. 짝지어지면 Bound | 입문 6부 · 04 |
| StorageClass | PVC 요청이 오면 디스크와 PV를 자동으로 만드는 규칙 (GKE: standard-rwo 등) | 입문 6부 · 04 |
| accessModes | RWO(한 노드) · ROX(여러 노드 읽기) · RWX(여러 노드 읽기·쓰기) | 입문 6부 · 04 |
| reclaimPolicy | PVC를 지울 때 디스크를 지울지(Delete) 남길지(Retain) | 입문 6부 · 04 |
| Namespace (쿠버네티스) | 클러스터 안의 논리적인 칸. 이름 · 권한 · 자원 한도를 나눔 | 입문 7부 · 01 |
| ResourceQuota | 네임스페이스별 CPU · 메모리 등 총량 한도 | 입문 7부 · 01 |
| HPA | 평균 지표(CPU 등)를 목표에 맞추도록 replicas를 자동 조절 | 입문 7부 · 02 |
| metrics-server | Pod · 노드의 CPU · 메모리 사용량을 모아 HPA와 kubectl top에 제공 | 입문 7부 · 02 |
| 클러스터 오토스케일러 | Pending Pod가 생기면 노드를 자동으로 늘리는 기능 | 입문 7부 · 02 |
| Events | describe 맨 아래의 사건 기록. 문제 해결의 첫 단서 | 입문 7부 · 03 |
| Artifact Registry | GCP의 컨테이너 이미지 저장소 (LOCATION-docker.pkg.dev) | 입문 7부 · 04 |
| QoS 등급 | Guaranteed · Burstable · BestEffort. 자원 부족 시 쫓겨나는 순서 | 입문 3부 · 06 |
| 컨트롤 플레인 | 클러스터를 결정 · 기록 · 감시하는 부품 묶음. 마스터 노드의 공식 이름 | 전반 1부 · 01 |
| kube-apiserver | 모든 요청의 정문. 인증 → 인가 → 어드미션을 거쳐 etcd에 저장 | 전반 1부 · 04 |
| etcd | 클러스터의 모든 상태를 저장하는 키-값 저장소. API 서버만 접근 | 전반 1부 · 03 |
| kube-scheduler | 새 Pod를 둘 노드를 필터링 · 점수 매기기로 결정 (실행은 kubelet) | 전반 1부 · 06 |
| kube-controller-manager | Deployment · ReplicaSet · Node 등 컨트롤러(제어 루프)를 묶어 실행 | 전반 1부 · 05 |
| CRI · OCI | CRI = kubelet과 런타임의 연결 규격, OCI = 이미지 · 실행 방식 표준 | 전반 1부 · 02 |
| containerd · runc | containerd = 노드의 기본 컨테이너 런타임, runc = 실제로 프로세스를 띄우는 저수준 런타임 | 전반 1부 · 02 |
| dockershim | kubelet 안의 Docker용 통역기. 1.24에서 제거 | 전반 1부 · 02 |
| crictl | CRI 런타임을 보는 노드 디버깅 도구 (crictl ps · pods · logs) | 전반 1부 · 02 |
| 인증 · 인가 · 어드미션 | API 서버의 관문: 누구인가(401) → 해도 되나(403) → 규칙에 맞나 | 전반 1부 · 04 |
| watch | 변화를 구독하는 방식. 부품들은 API 서버를 지켜보다 자기 일을 한다 | 전반 1부 · 01 |
| 하트비트 · Lease | kubelet이 약 10초마다 “살아 있다”고 알리는 신호. 끊기면 NotReady | 전반 1부 · 05 |
| kube-proxy 모드 | Service 규칙을 만드는 방식: iptables · ipvs(지원 중단 예고) · nftables | 전반 1부 · 07 |
| kubectl explain | 클러스터가 아는 필드 이름 · 타입 · 설명을 점(.)으로 따라가며 보기 | 전반 2부 · 01 |
| kubectl api-resources | 리소스 이름 · 줄임말 · apiVersion · Namespace 소속 여부 목록 | 전반 2부 · 01 |
| API 그룹 | apiVersion의 / 앞부분. core(v1) · apps · batch · networking.k8s.io 등 | 전반 2부 · 01 |
| ownerReferences | 만든 쪽(주인)을 기록한 칸. 주인을 지우면 아래가 같이 지워짐 | 전반 2부 · 02 |
| pod-template-hash | Pod 템플릿의 해시. ReplicaSet · Pod 이름에 붙고, 템플릿이 바뀌면 새 ReplicaSet | 전반 2부 · 02 |
| nodePort | NodePort Service가 모든 노드에 여는 포트 (30000-32767) | 전반 2부 · 03 |
| --dry-run=client -o yaml | 만들지 않고 YAML만 출력. 명령형으로 뼈대를 뽑는 방법 | 전반 2부 · 05 |
| kubectl expose | 대상의 라벨을 셀렉터로 가져와 Service를 만드는 명령 | 전반 2부 · 05 |
| last-applied-configuration | 지난번 apply 내용을 담은 어노테이션. 지운 필드를 알아내는 데 사용 | 전반 2부 · 05 |
| Server-Side Apply | API 서버가 비교 · 병합하고 필드 관리자를 managedFields에 기록하는 apply | 전반 2부 · 05 |
| nodeName · Binding | 스케줄러를 건너뛰고 노드를 직접 지정 (만들 때 nodeName, 이미 있으면 Binding) | 전반 3부 · 01 |
| 어노테이션 | 고르는 데 쓰지 않는 부가 정보 키-값 (빌드 번호 · 도구 설정 등) | 전반 3부 · 02 |
| Taint · Toleration | 노드의 “접근 금지” 표시와 Pod의 “견딜 수 있음” 허가. 밀어낼 뿐 끌어당기지 않음 | 전반 3부 · 03 |
| NoSchedule · NoExecute | Taint 효과: 새 Pod만 막기 / 이미 돌던 Pod까지 쫓아내기 | 전반 3부 · 03 |
| nodeSelector · Node Affinity | Pod가 라벨로 노드를 고르는 방법. required(반드시) · preferred(가능하면) | 전반 3부 · 04 |
| Pod Anti-Affinity | 같은 라벨의 Pod와 같은 노드 · 영역에 가지 않게 하는 규칙 | 전반 3부 · 05 |
| Topology Spread Constraints | 영역 사이 Pod 개수 차이를 maxSkew 이하로 유지해 고르게 퍼뜨림 | 전반 3부 · 05 |
| LimitRange | Namespace에서 컨테이너당 requests · limits 기본값 · 최소 · 최대 | 전반 3부 · 06 |
| Static Pod · 거울 Pod | kubelet이 폴더의 YAML로 직접 띄우는 Pod와, API에 보이는 읽기 전용 복사본 | 전반 3부 · 07 |
| PriorityClass · 선점 | Pod 우선순위. 자리가 없으면 낮은 Pod를 축출해 자리를 만듦 | 전반 3부 · 08 |
| 스케줄러 프로필 · schedulerName | 플러그인 조합이 다른 스케줄링 규칙과, Pod가 그걸 고르는 칸 | 전반 3부 · 09 |
| cAdvisor | kubelet 안에서 컨테이너별 CPU · 메모리 사용량을 재는 부품 | 전반 4부 · 01 |
| kubectl top | metrics-server가 모은 최신 사용량 보기 (과거 기록은 없음) | 전반 4부 · 01 |
| /readyz · /livez | API 서버의 자체 점검 주소. componentstatuses 대신 사용 | 전반 4부 · 02 |
| systemctl · journalctl | systemd 서비스(kubelet 등)의 상태 · 로그를 노드에서 보는 도구 | 전반 4부 · 02 |
| kubectl logs --previous | 재시작 직전 컨테이너의 로그 (하나만 남음) | 전반 4부 · 03 |
| /var/log/pods | 노드에 컨테이너 로그가 저장되는 위치. Pod가 지워지면 함께 사라짐 | 전반 4부 · 03 |
| 로그 수집기 (Fluent Bit) | 노드마다 DaemonSet으로 떠서 로그를 중앙 저장소로 보내는 도구 | 전반 4부 · 03 |
| Event TTL | Event는 기본 1시간만 보관 (API 서버 --event-ttl) | 전반 4부 · 03 |
| Prometheus · Grafana | /metrics를 가져와(pull) 시계열로 저장 · 조회하고, 대시보드로 그리는 표준 조합 | 전반 4부 · 04 |
| kube-state-metrics · node-exporter | 쿠버네티스 객체 상태 / 노드 자원을 Prometheus 지표로 내보내는 도구 | 전반 4부 · 04 |
| Alertmanager | Prometheus 경고를 묶어 메신저 · 메일로 알림 | 전반 4부 · 04 |
| Recreate 전략 | 옛 Pod를 모두 지운 뒤 새 Pod를 띄우는 배포 방식. 중단 시간 발생 | 전반 5부 · 01 |
| change-cause | rollout history에 남는 변경 이유 어노테이션 (예전 --record 대신) | 전반 5부 · 01 |
| command · args | Pod에서 이미지의 ENTRYPOINT · CMD를 덮어쓰는 칸 | 전반 5부 · 02 |
| envFrom | ConfigMap · Secret의 모든 키를 환경 변수로 넣기 | 전반 5부 · 03 |
| EncryptionConfiguration | API 서버가 Secret을 etcd에 쓸 때 암호화하게 하는 설정 파일 | 전반 5부 · 04 |
| 어댑터 · 앰배서더 | 멀티 컨테이너 패턴: 출력 형식 변환 / 바깥 연결 중계 | 전반 5부 · 05 |
| 네이티브 사이드카 | initContainers에 restartPolicy: Always를 단 사이드카 (1.33 GA) | 전반 5부 · 05 |
| startupProbe | 시작이 느린 앱을 위해 성공할 때까지 liveness · readiness를 미루는 probe | 전반 5부 · 06 |
| In-place Pod Resize | 실행 중인 Pod의 CPU · 메모리를 재시작 없이 바꾸기 (1.35 GA) | 전반 5부 · 07 |
| VPA | 사용량을 보고 적정 requests를 추천 · 적용하는 별도 설치 도구 | 전반 5부 · 07 |
| backoffLimit · completions | Job의 실패 재시도 한도 / 필요한 성공 횟수 | 전반 5부 · 08 |
| concurrencyPolicy | CronJob 실행이 겹칠 때: Allow · Forbid(건너뜀) · Replace | 전반 5부 · 08 |
| cordon · drain · uncordon | 노드에 새 Pod 막기 / 기존 Pod 내보내기 / 다시 받기 | 전반 6부 · 01 |
| PodDisruptionBudget (PDB) | drain 같은 자발적 중단 중에도 최소 몇 개는 유지하라는 약속 | 전반 6부 · 01 |
| 버전 차이 규칙 (version skew) | API 서버 기준: 컨트롤러 1 낮게, kubelet 3 낮게, kubectl ±1까지 허용 | 전반 6부 · 02 |
| kubeadm upgrade apply · node | 첫 컨트롤 플레인 노드 / 나머지 노드의 업그레이드 명령 | 전반 6부 · 02 |
| pkgs.k8s.io | 쿠버네티스 패키지 저장소. 주소에 마이너 버전이 들어감 (apt.kubernetes.io 대체) | 전반 6부 · 02 |
| etcdctl snapshot save | 실행 중인 etcd의 상태를 파일로 백업 | 전반 6부 · 03 |
| etcdutl snapshot restore | 스냅샷 파일을 새 데이터 폴더로 복구 (etcd 3.6부터 etcdctl에서 이동) | 전반 6부 · 03 |
| Velero | 리소스와 볼륨 스냅샷을 오브젝트 스토리지에 백업 · 복구하는 도구 | 전반 6부 · 03 |
| 인증 · 인가 (Authentication · Authorization) | 누구인가를 확인 / 무엇을 해도 되는지 판단 | 전반 7부 · 01 |
| OIDC | 회사 로그인(IdP)이 발급한 토큰으로 사람 사용자를 인증하는 방식 | 전반 7부 · 02 |
| 대칭키 · 비대칭키 | 같은 키로 잠그고 열기 / 공개키로 잠그고 개인키로만 열기 | 전반 7부 · 03 |
| CA · 인증서 | 공개키의 주인을 보증하는 서명 기관 / 그 서명이 붙은 공개키 문서 | 전반 7부 · 03 |
| mTLS | 서버와 클라이언트가 서로 인증서를 보여 주는 TLS | 전반 7부 · 03 |
| /etc/kubernetes/pki | kubeadm 클러스터의 CA · 컴포넌트 인증서가 모인 폴더 | 전반 7부 · 04 |
| kubeadm certs check-expiration | 클러스터 인증서 만료일 확인 (기본 1년) | 전반 7부 · 04 |
| CertificateSigningRequest | 사용자 인증서 서명을 클러스터에 요청하는 객체 (approve로 승인) | 전반 7부 · 04 |
| kubeconfig · context | 클러스터 · 사용자 · 둘을 묶은 context를 담은 접속 설정 파일 | 전반 7부 · 05 |
| core 그룹 · named 그룹 | /api/v1 아래 기본 리소스 / /apis/그룹/버전 아래 리소스 | 전반 7부 · 06 |
| Role · RoleBinding | Namespace 안의 권한 규칙 / 그 규칙을 사용자 · 그룹 · SA에 연결 | 전반 7부 · 07 |
| ClusterRole · ClusterRoleBinding | 클러스터 범위 권한 규칙과 연결 | 전반 7부 · 07 |
| kubectl auth can-i | 특정 사용자가 어떤 동작을 할 수 있는지 확인 | 전반 7부 · 07 |
| ServiceAccount 토큰 | Pod에 자동으로 들어가는 시간 제한 토큰 (1.24부터 Secret 자동 생성 없음) | 전반 7부 · 08 |
| Admission Controller | 인가 뒤 요청을 고치거나(Mutating) 검사하는(Validating) 관문 | 전반 7부 · 09 |
| Admission 웹훅 | 외부 서버에 허용 · 거절 · 수정을 맡기는 어드미션 | 전반 7부 · 09 |
| ValidatingAdmissionPolicy | CEL 식으로 API 서버 안에서 요청을 검사하는 정책 (1.30 GA) | 전반 7부 · 09 |
| imagePullSecrets | 비공개 레지스트리 로그인 정보(docker-registry Secret)를 Pod · SA에 연결 | 전반 8부 · 01 |
| 이미지 다이제스트 | 태그 대신 @sha256:…로 이미지를 정확히 고정 | 전반 8부 · 01 |
| SecurityContext | 실행 사용자 · capabilities · 읽기 전용 등 Pod · 컨테이너 권한 설정 | 전반 8부 · 02 |
| capabilities | root 권한을 조각낸 것. drop ALL 후 필요한 것만 add | 전반 8부 · 02 |
| Pod Security Admission | Namespace 라벨로 privileged · baseline · restricted 수준을 강제 (PSP 대체) | 전반 8부 · 02 |
| NetworkPolicy | 라벨로 고른 Pod의 ingress · egress 허용 목록 (CNI가 집행) | 전반 8부 · 03 |
| default deny | podSelector {} 로 Namespace 모든 트래픽을 먼저 막는 정책 | 전반 8부 · 03 |
| copy-on-write · 쓰기 레이어 | 이미지는 읽기 전용, 컨테이너마다 얇은 쓰기 층. 고치면 위로 복사 | 전반 9부 · 01 |
| 스토리지 드라이버 (overlay2) | 레이어를 하나로 겹쳐 보여 주는 장치 (containerd에서는 snapshotter) | 전반 9부 · 01 |
| CSI | 저장소를 꽂는 규격. 컨트롤러 플러그인 + 노드 플러그인 | 전반 9부 · 02 |
| Volume Expansion | allowVolumeExpansion + PVC storage 증가로 디스크 확장 (축소 불가) | 전반 9부 · 02 |
| hostPath | 노드 폴더를 Pod에 연결. 다른 노드에선 안 보이고 보안 위험 | 전반 9부 · 03 |
| ReadWriteOncePod (RWOP) | Pod 하나만 읽기 · 쓰기 가능한 접근 모드 (1.29 GA) | 전반 9부 · 04 |
| Retain · Delete | PVC 삭제 후 PV · 디스크를 남김(Released) / 함께 삭제 | 전반 9부 · 04 |
| 동적 프로비저닝 | PVC가 StorageClass를 지정하면 디스크 · PV를 자동 생성 | 전반 9부 · 05 |
| WaitForFirstConsumer | Pod가 스케줄될 때 그 영역에 디스크를 만드는 바인딩 모드 | 전반 9부 · 05 |
| volumeClaimTemplates | StatefulSet의 Pod마다 PVC를 하나씩 만드는 틀 (data-db-0 …) | 전반 9부 · 06 |
| VolumeSnapshot | CSI로 볼륨 스냅샷을 뜨고 dataSource로 새 PVC에 복원 | 전반 9부 · 06 |
| 스위치 · 라우터 · 게이트웨이 | 같은 네트워크 연결 / 다른 네트워크 연결 / 다른 네트워크로 가는 문 | 전반 10부 · 01 |
| ip_forward | 리눅스가 받은 패킷을 다른 인터페이스로 넘겨주게 하는 설정 (노드 필수) | 전반 10부 · 01 |
| /etc/hosts · resolv.conf · nsswitch.conf | 로컬 이름표 / DNS 서버 · search 도메인 / 조회 순서 | 전반 10부 · 02 |
| network namespace | 인터페이스 · 라우팅 표가 분리된 방. Pod 하나 = 방 하나 | 전반 10부 · 03 |
| veth · bridge | 양 끝이 이어진 가상 랜선 / 가상 스위치 | 전반 10부 · 03 |
| MASQUERADE · DNAT | 나갈 때 출발지 주소 바꾸기 / 들어올 때 목적지 주소 바꾸기 | 전반 10부 · 03 |
| docker0 | Docker 기본 bridge 네트워크의 가상 스위치 (172.17.0.1) | 전반 10부 · 04 |
| CNI 플러그인 | 런타임이 ADD · DEL로 부르는 네트워크 연결 프로그램 (/opt/cni/bin, /etc/cni/net.d) | 전반 10부 · 05 |
| 6443 · 10250 · 30000-32767 | API 서버 / kubelet / NodePort 범위 — 방화벽에 열어야 하는 대표 포트 | 전반 11부 · 01 |
| Pod CIDR | 클러스터 Pod 대역(예: 10.244.0.0/16). 노드마다 /24씩 나눠 받음 | 전반 11부 · 02 |
| VXLAN · BGP | 노드 IP로 감싸 보내는 터널 방식 / 노드끼리 경로를 알려 주는 경로 방식 | 전반 11부 · 02 |
| IPAM | CNI가 Pod에 IP를 나눠 주고 기록하는 부분 (host-local 등) | 전반 11부 · 03 |
| Flannel · Calico · Cilium | 대표 CNI 플러그인 — 단순 오버레이 / BGP · NetworkPolicy / eBPF | 전반 11부 · 03 |
| Service CIDR | ClusterIP를 나눠 주는 대역 (예: 10.96.0.0/12). Pod · 노드 대역과 겹치면 안 됨 | 전반 11부 · 04 |
| KUBE-SERVICES · KUBE-SVC · KUBE-SEP | kube-proxy가 iptables에 쓰는 체인 — 입구 / Service별 선택 / Pod로 DNAT | 전반 11부 · 04 |
| CoreDNS · kube-dns | 클러스터 DNS 서버 Pod / 그 앞의 Service (10.96.0.10) | 전반 11부 · 05 |
| <svc>.<ns>.svc.cluster.local | Service의 전체 DNS 이름 | 전반 11부 · 05 |
| ndots:5 | 점이 5개 미만인 이름은 search 도메인부터 붙여 보는 resolv.conf 옵션 | 전반 11부 · 05 |
| Ingress Controller | Ingress 규칙을 실제로 처리하는 L7 프록시 Pod (NGINX · Traefik 등) | 전반 11부 · 06 |
| defaultBackend | 어떤 Ingress 규칙에도 맞지 않는 요청을 받는 백엔드 | 전반 11부 · 06 |
| GatewayClass · Gateway · HTTPRoute | Gateway API의 역할별 리소스 — 구현 / 입구 / 경로 규칙 | 전반 11부 · 07 |
| minikube · kind · k3s | 노트북 학습용 단일 노드 / 컨테이너를 노드처럼 / 가벼운 배포판 | 전반 12부 · 01 |
| 관리형 쿠버네티스 (EKS · GKE · AKS) | 컨트롤 플레인을 클라우드가 운영하고 워커만 관리하는 서비스 | 전반 12부 · 01 |
| maxPods | kubelet이 노드에 올릴 수 있는 최대 Pod 수 (기본 110) | 전반 12부 · 01 |
| 고가용성 (HA) | 컨트롤 플레인 3대 이상 + 로드밸런서로 한 대가 죽어도 동작하는 구성 | 전반 12부 · 02 |
| --control-plane-endpoint | 모든 부품이 접속할 API 서버 공용 주소 (LB · 가상 IP · DNS) | 전반 12부 · 02 |
| kube-vip | 컨트롤 플레인 노드에 Static Pod로 떠서 가상 IP를 제공하는 도구 | 전반 12부 · 02 |
| 리더 선출 · Lease | 스케줄러 · 컨트롤러 매니저 중 Lease를 잡은 하나만 일하는 방식 | 전반 12부 · 02 |
| Raft | etcd가 쓰는 합의 알고리즘 — 리더가 쓰고 과반이 복제하면 확정 | 전반 12부 · 03 |
| 쿼럼 (quorum) | 확정에 필요한 과반 수 N/2 + 1. 3대면 2, 5대면 3 | 전반 12부 · 03 |
| stacked · external etcd | 컨트롤 플레인 노드에 etcd를 같이 / 전용 서버에 따로 두는 구성 | 전반 12부 · 03 |
| pkgs.k8s.io | 쿠버네티스 공식 패키지 저장소. 마이너 버전마다 주소가 다름 | 전반 12부 · 04 |
| SystemdCgroup | containerd가 systemd cgroup 드라이버를 쓰게 하는 설정 | 전반 12부 · 04 |
| kubeadm init · join | 컨트롤 플레인 만들기 / 노드를 클러스터에 붙이기 | 전반 12부 · 04 |
| bootstrap token | join할 때 처음 인증에 쓰는 임시 토큰 (기본 24시간) | 전반 12부 · 04 |
| TLS 부트스트랩 | 새 노드의 kubelet이 인증서를 신청해 받아 오는 과정 | 전반 12부 · 04 |
| Helm | YAML 묶음을 앱 단위로 설치 · 업그레이드 · 롤백 · 삭제하는 패키지 관리자 | 전반 13부 · 01 |
| Tiller | Helm 2가 클러스터 안에 두던 서버 부품. 권한 문제로 Helm 3에서 제거 | 전반 13부 · 02 |
| 3방향 병합 패치 | 이전 차트 · 실제 상태 · 새 차트를 함께 비교해 변경을 계산 (Helm 3~) | 전반 13부 · 02 |
| Helm 4 | 2025년 11월 출시. server-side apply 기본, --rollback-on-failure, WASM 플러그인 | 전반 13부 · 02 |
| chart · release · revision | 설치 묶음 / 설치된 인스턴스 / 바뀔 때마다 늘어나는 번호 | 전반 13부 · 03 |
| Artifact Hub | 공개 Helm chart를 찾는 사이트 (helm search hub) | 전반 13부 · 03 |
| OCI 레지스트리 (chart) | 컨테이너 레지스트리에 chart를 저장 · 설치 (oci://…) | 전반 13부 · 03 |
| Chart.yaml (version · appVersion) | chart 자체 버전 / 안에 든 앱 버전 | 전반 13부 · 04 |
| values.yaml · --set · -f | 기본값 / 명령줄 덮어쓰기 / 파일 덮어쓰기 (나중 것이 이김) | 전반 13부 · 04 |
| helm template | 템플릿을 채운 결과만 출력하고 클러스터에는 보내지 않음 | 전반 13부 · 04 |
| helm rollback | 예전 revision의 설정으로 새 revision을 만듦 (데이터는 그대로) | 전반 13부 · 05 |
| chart hook | pre-upgrade 등 설치 단계 사이에 Job을 끼워 넣는 어노테이션 | 전반 13부 · 05 |
| Kustomize | 템플릿 없이 평범한 YAML에 덮어쓰기를 적용하는 도구 (kubectl -k 내장) | 전반 14부 · 01 |
| kustomization.yaml | 가져올 resources와 적용할 transformer · patch를 적는 설정 파일 | 전반 14부 · 02 |
| kubectl kustomize · apply -k | 결과 YAML 출력만 (= kustomize build) / 만들어서 바로 적용 | 전반 14부 · 02 |
| transformer | labels · namePrefix · namespace처럼 모든 리소스를 한꺼번에 바꾸는 규칙 | 전반 14부 · 04 |
| images transformer | 원본 image 값을 찾아 newName · newTag · digest로 바꿈 | 전반 14부 · 04 |
| configMapGenerator | 내용 해시를 이름에 붙인 ConfigMap을 만들어 변경 시 롤링 업데이트 유도 | 전반 14부 · 04 |
| JSON 6902 patch | op · path · value로 정확한 위치를 바꾸는 patch | 전반 14부 · 05 |
| strategic merge patch | 바꿀 부분만 남긴 YAML을 겹치는 patch. 리스트는 name으로 짝 맞춤 | 전반 14부 · 05 |
| $patch: delete | strategic merge patch에서 리스트 항목 · 필드를 지우는 표시 | 전반 14부 · 05 |
| base · overlay | 공통 YAML 한 벌 / 환경마다 base를 가져와 덧씌우는 폴더 | 전반 14부 · 06 |
| Component (Kustomize) | 여러 overlay가 골라서 가져다 쓰는 기능 묶음 (kind: Component) | 전반 14부 · 06 |
| CRD (CustomResourceDefinition) | 새 리소스 종류를 API 서버에 등록하는 정의 (이름은 plural.group) | 전반 15부 · 01 |
| Custom Resource (CR) | CRD로 등록한 종류로 만든 객체 하나 | 전반 15부 · 01 |
| served · storage (CRD 버전) | 그 버전으로 요청을 받는지 / etcd 저장에 쓰는 버전(하나만) | 전반 15부 · 01 |
| x-kubernetes-validations | CRD 스키마에 CEL 식으로 적는 검증 규칙 (1.29 GA) | 전반 15부 · 01 |
| status subresource | spec(사용자)과 status(컨트롤러)를 따로 갱신하게 하는 CRD 설정 | 전반 15부 · 01 |
| 조정 루프 (reconcile) | watch → 원하는 상태와 실제 상태 비교 → 맞추기 → status 기록 반복 | 전반 15부 · 02 |
| informer · workqueue | API 변경을 받아 캐시에 두는 부품 / 처리할 객체 이름을 줄 세우는 큐 | 전반 15부 · 02 |
| kubebuilder | CRD · 컨트롤러 뼈대를 만드는 공식 도구 (controller-runtime) | 전반 15부 · 02 |
| finalizer | 외부 정리가 끝날 때까지 객체 삭제를 붙잡아 두는 metadata 표시 | 전반 15부 · 02 |
| ownerReference | 하위 리소스에 적는 주인. 주인이 지워지면 가비지 컬렉터가 함께 삭제 | 전반 15부 · 02 |
| Operator | 특정 앱의 운영 지식을 CRD + 컨트롤러로 자동화한 것 | 전반 15부 · 03 |
| Operator SDK · OLM · OperatorHub | Operator 제작 도구 / 설치 · 업그레이드 관리자 / 공개 Operator 목록 | 전반 15부 · 03 |
| CrashLoopBackOff | 컨테이너가 죽고 재시작하기를 반복해 재시작 간격을 늘리는 상태 (원인은 로그 · 종료 코드) | 전반 16부 · 02 |
| 종료 코드 137 · 143 | SIGKILL(OOMKilled · liveness 실패) / SIGTERM(정상 종료 요청) | 전반 16부 · 02 |
| kubectl logs --previous | 직전에 죽은 컨테이너의 로그 보기 | 전반 16부 · 01 |
| kubectl events | 객체별 · 시간순 이벤트 조회 (1.28 GA). 이벤트는 기본 1시간 보관 | 전반 16부 · 01 |
| crictl ps -a · crictl logs | API 서버 없이 노드에서 컨테이너 상태 · 로그 보기 | 전반 16부 · 03 |
| NotReady · Unknown | 노드 이상 / kubelet 보고가 끊겨 상태를 모름 | 전반 16부 · 04 |
| node.kubernetes.io/unreachable | 보고가 끊긴 노드에 붙는 taint. Pod는 기본 300초 뒤 다른 노드로 | 전반 16부 · 04 |
| journalctl -u kubelet | kubelet 서비스 로그 — 노드 장애의 첫 단서 | 전반 16부 · 04 |
| CoreDNS loop | 노드 resolv.conf가 로컬 DNS를 가리켜 생기는 질의 루프 → CrashLoopBackOff | 전반 16부 · 05 |
| 임시 컨테이너 (ephemeral container) | 실행 중인 Pod에 디버깅 컨테이너를 붙이는 기능 (1.25 GA) | 전반 16부 · 06 |
| kubectl debug | 임시 컨테이너(--target) · 복사본(--copy-to) · 노드(node/…) 디버깅 | 전반 16부 · 06 |
| JSON Path | JSON 안의 값을 경로로 고르는 문법 ($ · .키 · [n] · [*] · [?(@…)]) | 전반 17부 · 01 |
| @ (JSON Path) | 조건식 안에서 지금 검사하는 리스트 항목 | 전반 17부 · 01 |
| -o jsonpath | kubectl 결과에서 원하는 값만 출력. 목록은 .items[*]부터 | 전반 17부 · 01 |
| range … end | jsonpath에서 항목마다 반복 출력 (\t · \n으로 줄 맞춤) | 전반 17부 · 01 |
| -o custom-columns | 열이름:경로로 원하는 열만 골라 표 출력 | 전반 17부 · 02 |
| --sort-by | 지정한 경로의 값으로 오름차순 정렬 | 전반 17부 · 02 |
| --field-selector | status.phase · spec.nodeName 같은 정해진 필드로 거르기 | 전반 17부 · 02 |
| KYAML (-o kyaml) | 들여쓰기에 덜 민감한 YAML 방언 출력 (1.35 beta) | 전반 17부 · 02 |
| --dry-run=client -o yaml | 만들지 않고 YAML 뼈대만 출력 — 파일로 저장해 고쳐 씀 | 전반 17부 · 03 |
| kubectl explain | 리소스 필드의 위치 · 형식 · 설명 보기 (--recursive) | 전반 17부 · 03 |
| kuberc | kubectl alias · 기본 옵션을 담는 개인 설정 파일 ~/.kube/kuberc (1.34 beta) | 전반 17부 · 03 |
찾는 용어가 아직 없어요.