[MSA 설계] 10주차-2일차: k8s Pod와 Deployment 관리 실습

limlim·2025년 2월 25일
0

KDT

목록 보기
10/21
  1. k8s 도구용 kubectl란?
  • kubectl은 k8s 클러스터를 제어하는 명령줄 인터페이스 도구로 k8s API 서버와 상호작용하여 클러스터의 리소스를 관리함

  • kubectl 명령어

    # zshrc alias 만들기
     vi ~/.zshrc
     :$ (맨 아래로 가는거)
     alias k=kubectl
     source ~/.zshrc 
     
    # 기본 명령어
    k [command] [TYPE] [NAME] [flags]
     
    # 리소스 생성
    k apply -f <파일명>.yml
    
    # 리소스 삭제
    k delete <리소스 유형> <리소스 이름>
    
    # 실행 중인 리소스 조회
    k get pods
    k get deployments
    
    # 리소스의 상태와 이벤트 확인
    k describe <리소스> <이름>
    
    # CPU 및 메모리 사용량 확인
    k top pods
    k top nodes
    
    # 컨테이너 로그 조회
    k logs <pod 이름>
    
    # 실행 중인 컨테이너 내부 접근
    k exec -it <pod> -- /bin/sh
    
    # 문제 발생 시 이벤트 확인
    k get events
  • kubectl 주요 기능

    1) 리소스 생성, 조회, 수정, 삭제

    2) 클러스터 및 리소스 모니터링

    3) 디버깅 및 문제 해결

    4) 네트워크 및 포트 관리

    5) 컨테이너 배포 및 롤백

  • kubectl 중요성

    1) 운영 효율성 증대

    2) k8s 리소스 최적화 및 안정성 유지

    3) CI/CD 및 자동화와의 연계

    4) 디버깅 및 트러블슈팅의 핵심 도구

  1. k8s 구조와 관리
  • pods

    : pod은 k8s에서 배포할 수 있는 가장 작은 단위이자, 클러스터에서 스케줄링되는 기본적인 빌딩 블록임

    : 하나의 pod는 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 저장소, 네트워크, 그리고 운영체제의 일부 설정을 공유함

    : pod 내의 컨테이너들은 항상 함께 위치하고, 함께 스케줄되며, 동일한 노드에서 함께 실행됨

    : pod 생명주기
    -> Pending
    -> Running
    -> Succeeded
    -> Failed
    -> CrashLoopBackOff (실무에서 많이 발생하는 에러)
    -> Unknown

  • Deployment

    : k8s에서 애플리케이션의 선언적 업데이트를 제공하는 API 객체임

    : 주로 상태가 없는(stateless) 애플리케이션을 관리하는데 적합함

    : 컨테이너 실행 방법 (관련 파일은 github에 정리)
    1) kubectl run으로 직접 컨테이너 실행하기
    2) yaml 파일을 작성하여 템플릿으로 컨테이너 실행하기

    : 관련 명령어

     # 디플로이먼트 실행
     kubectl apply -f nginx-app.yaml
     kubectl get pods
     kubectl get deployments 
     kubectl expose deployment nginx-app --type=NodePort --port=80
     kubectl get svc nginx-app
     minikube service nginx-app --url
    
     # 디플로이먼트 조회
      kubectl get deployment
      
     # 디플로이먼트 삭제
      kubectl delelte deployment nginx-app
  1. k8s IDE 도구인 Lens 설치
  1. k8s 용어 정리

1) Pod
: 파드는 k8s에서 스케줄링 가능한 가장 작은 단위임
: 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 스토리지, 네트워크를 공유하고, 어떻게 실행될지에 대한 방식을 지정함

2) Node
: 노드는 파드가 배포되는 물리적 또는 가상의 기계임
: 각 노드는 마스터에 의해 관리되며, 파드의 운영을 지원하기 위해 리소스(스케줄링, 실행, 모니터링 등)를 제공함

3) Service
: 서비스는 일련의 동적 파드에 대한 지속적인 접근을 제공하는 추상적인 개념으로, 로드 밸런싱, 서비스 디스커버리 고정 IP 주소를 포함함

4) Deployment
: 디플로이먼트는 파드와 레플리카셋의 선언적 업데이트를 관리함
: 이를 통해 사용자는 애플리케이션을 롤아웃, 업데이트 및 롤백할 수 있음

5) ReplicaSet
: 레플리카셋은 한 개 이상의 파드 복사본을 유지하도록 보장함
: 이는 파드의 가용성을 유지하는 데 중요함

6) ConfigMap
: 컨피그맵은 구성 데이터를 키-값 쌍으로 저장하여 애플리케이션 코드의 구성 정보를 파드에서 분리할 수 있게 해줌
: 이를 통해 애플리케이션을 재배포하지 않고도 설정을 변경할 수 있음

7) Secret
: 시크릿은 비밀번호, OAuth 토큰, SSH 키와 같은 민감한 정보를 저장하는데 사용됨
: 이 정보들은 시크릿을 사용하여 안전하게 파드에 주입될 수 있음

8) Volume
: 볼륨은 파드가 존재하는 동안 데이터를 유지할 수 있는 디렉톨리임
: 다양한 유형의 볼륨이 지원되며, 파드 내의 컨테이너 간, 또는 파드의 인스턴스 간에 데이터를 공유할 때 사용됨

profile
不怕慢,只怕站 개발자

0개의 댓글