02 쿠버네티스 활용
02 쿠버네티스 활용
1. Note
1. Note
- 쿠버네티스는 Pod을 “정리정돈”하는 도구가 아니라
- 시스템이 항상 원하는 상태를 유지하도록 계속 조정하는 엔진
- 특정한 상태와 필요한 기능들을 정의 해놓고
- 그것에 맞게 최적의 상태를 유지하려고 함!
2. kubectl
1. kubectl
- Kubernetes 클러스터를 관리하는 명령줄 인터페이스(CLI) 도구
- Kubernetes API 서버와 상호작용하여 클러스터의 리소스를 관리
- 사용자는 kubectl을 통해 Kubernetes의 다양한 기능을 활용함
2. kubectl의 주요 기능
- 리소스 생성, 조회, 수정, 삭제
- Kubernetes 리소스(Pod, Deployment, Service 등)를 생성하고 관리
kubectl apply -f <파일명>.yaml을 통해 YAML 파일 기반 배포kubectl delete <리소스 유형> <리소스 이름>으로 리소스 삭제
- 클러스터 및 리소스 모니터링
- 실행 중인 리소스를 조회
kubectl get podskubectl get deployments
- 리소스의 상태와 이벤트 확인
kubectl describe <리소스> <이름> - CPU 및 메모리 사용량 확인
kubectl top podskubectl top nodes
- 실행 중인 리소스를 조회
- 디버깅 및 문제 해결
- 컨테이너 로그 조회
kubectl logs <pod 이름> - 실행 중인 컨테이너 내부 접근
kubectl exec -it <pod> -- /bin/sh - 문제 발생 시 이벤트 확인
kubectl get events
- 컨테이너 로그 조회
- 네트워크 및 포트 관리
- Kubernetes 내부 네트워크를 통한 접근 및 트러블슈팅
kubectl port-forwardkubectl proxy
- 서비스 및 네임스페이스 관리
- Kubernetes 내부 네트워크를 통한 접근 및 트러블슈팅
- 컨테이너 배포 및 롤백
- 애플리케이션 업데이트 및 롤백
kubectl rollout undo deployment/<deployment-name> - 기본 적으로 RollingUpdate, Recreate 를 지원하며 필요시 별도 도구로 블루-그린 배포 및 카나리 배포와 같은 배포 전략 관리
- 애플리케이션 업데이트 및 롤백
3. 쿠버네티스 관리 명령어
1. 명령어 기본형
1
2
3
4
5
6
`kubectl [command] [TYPE] [NAME] [flags]`
- command(자원에 실행하려는 동작) / create, get, delete 등
- TYPE(자원 타입) / pod, service, ingress 등
- NAME(자원 이름)
- flags(부가적 옵션)
2. Command
1
2
3
4
5
6
7
8
create → 리소스 생성
apply → 생성 + 수정 (실무 표준)
get → 조회
describe → 상세 조회 (이벤트 포함)
delete → 삭제
edit → 실시간 수정
logs → 로그 확인
exec → 컨테이너 내부 실행
3. TYPE (오브젝트의 종류)
| TYPE (kubectl) | 축약 | 설명 |
|---|---|---|
| pods | po | 컨테이너를 실행하는 최소 단위. 보통 직접 생성하지 않고 상위 리소스가 관리 |
| services | svc | Pod에 접근하기 위한 네트워크 계층. 여러 Pod에 트래픽을 분산 |
| deployments | deploy | Pod를 생성하고 유지하는 관리자. 자동 복구, 스케일링, 롤링 업데이트 담당 |
| replicasets | rs | 지정한 개수만큼 Pod를 유지. 보통 Deployment가 내부적으로 사용 |
| configmaps | cm | 환경설정 값을 저장하는 리소스 (비밀번호 제외) |
| secrets | - | 비밀번호, 토큰 같은 민감 정보 저장 |
| namespaces | ns | 리소스를 논리적으로 |
4. flags(옵션)
1
2
3
4
5
6
7
8
9
-n <namespace> → 네임스페이스 지정
-A → 전체 네임스페이스
-o wide → 상세 정보 출력
-o yaml/json → 출력 형식 변경
-f <file> → 파일 기반 실행
-l key=value → 라벨 필터
--force → 강제 실행
--grace-period=0 → 즉시 종료
-it → interactive terminal
4. 용어체크
1. 전체 구조
1
2
3
4
5
6
7
8
9
10
11
12
13
Kubernetes Cluster
├── Control Plane
│ ├── API Server
│ ├── Scheduler
│ ├── Controller Manager
│
├── Worker Node 1
│ ├── Pod A (namespace: dev)
│ ├── Pod B (namespace: prod)
│
├── Worker Node 2
│ ├── Pod C (namespace: dev)
│ ├── Pod D (namespace: prod)
2. 클러스터
- 컨테이너(Pod)를 실행하고 관리하기 위한 “하나의 완성된 시스템”
3. Node (노드)
- 노드는 파드가 배포되는 물리적 또는 가상의 기계
- 각 노드는 마스터에 의해 관리되며, 파드의 운영을 지원하기 위한 리소스(스케줄링, 실행, 모니터링 등)를 제공
- 쿠버네티스에 등록된 하나의 컴퓨터(서버)
2. Pod (파드)
- 파드는 Kubernetes에서 스케줄링 가능한 가장 작은 단위
- 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 스토리지, 네트워크를 공유하고, 어떻게 실행될지에 대한 방식을 지정
3. Service (서비스)
- 서비스는 일련의 동적 파드에 대한 지속적인 접근을 제공하는 추상적인 개념
- 로드 밸런싱, 서비스 디스커버리, 고정 IP 주소를 포함
4. Deployment (디플로이먼트)
- 디플로이먼트는 파드와 레플리카셋의 선언적 업데이트를 관리
- 사용자는 애플리케이션을 롤아웃, 업데이트 및 롤백할 수 있음
- replicaSet (레플리카셋)
- 레플리카셋은 한 개 이상의 파드 복사본을 유지하도록 보장
- 파드의 가용성을 유지하는 데 중요
5. namespace (네임스페이스)
- 서로 독립적인 리소스들을 논리적으로 같은 공간에 놓는 개념
- 한 덩어리로 묶어서 조회, 삭제, 권한관리 등을 한 번에 할 수 있게 해주는 단위
1 2
kubectl get pods -n dev # 데브만조회 kubectl delete namespace dev # 데브 전체 제거
- Service가 같은 nameSpace안에서는 label로 Pod를 찾을 수 있음(라벨은 yaml이나 쿠버에서 통으로 설정함.)
1 2 3 4 5 6 7 8
# 다른 네임스페이스 mysql-service.default.svc.cluster.local # 같은 네임스페이스 mysql-service # 부트에서의 DB연결 jdbc:mysql://mysql-service:3306/test
5. ConfigMap (컨피그맵)
- 컨피그맵은 구성 데이터를 키-값 쌍으로 저장하여 애플리케이션 코드의 구성 정보를 파드에서 분리할 수 있게 해줌
- 이를 통해 애플리케이션을 재배포하지 않고도 설정을 변경할 수 있음
6. Secret (시크릿)
- 시크릿은 비밀번호, OAuth 토큰, SSH 키와 같은 민감한 정보를 저장하는데 사용됨
- 이 정보들은 시크릿을 사용하여 안전하게 파드에 주입될 수 있음
7. Volume (볼륨)
- 볼륨은 파드가 존재하는 동안 데이터를 유지할 수 있는 디렉토리
- 다양한 유형의 볼륨이 지원되며, 파드 내의 컨테이너 간, 또는 파드의 인스턴스 간에 데이터를 공유할 때 사용
This post is licensed under CC BY 4.0 by the author.