Post

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 pods
      • kubectl get deployments
    • 리소스의 상태와 이벤트 확인 kubectl describe <리소스> <이름>
    • CPU 및 메모리 사용량 확인
      • kubectl top pods
      • kubectl top nodes
  • 디버깅 및 문제 해결
    • 컨테이너 로그 조회 kubectl logs <pod 이름>
    • 실행 중인 컨테이너 내부 접근 kubectl exec -it <pod> -- /bin/sh
    • 문제 발생 시 이벤트 확인 kubectl get events
  • 네트워크 및 포트 관리
    • Kubernetes 내부 네트워크를 통한 접근 및 트러블슈팅
      • kubectl port-forward
      • kubectl proxy
    • 서비스 및 네임스페이스 관리
  • 컨테이너 배포 및 롤백
    • 애플리케이션 업데이트 및 롤백 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)축약설명
podspo컨테이너를 실행하는 최소 단위.
보통 직접 생성하지 않고 상위 리소스가 관리
servicessvcPod에 접근하기 위한 네트워크 계층.
여러 Pod에 트래픽을 분산
deploymentsdeployPod를 생성하고 유지하는 관리자.
자동 복구, 스케일링, 롤링 업데이트 담당
replicasetsrs지정한 개수만큼 Pod를 유지.
보통 Deployment가 내부적으로 사용
configmapscm환경설정 값을 저장하는 리소스 (비밀번호 제외)
secrets-비밀번호, 토큰 같은 민감 정보 저장
namespacesns리소스를 논리적으로

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.