Develop

쿠버네티스 정리

oaho 2024. 10. 27. 21:17
반응형

💁🏻‍♀️쿠버네티스란 무엇인가?

컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하기 위한 오픈 소스 플랫폼

쿠버네티스가 왜 유용한가

전통적인 배포 시대 : 애플리케이션을 물리 서버에서 실행

한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생했다. ⇒ 애플리케이션의 성능 저하

App은 실행하고자 하는 프로그램, Bin/Library는 프로그램이 실행하는데 필요한 환경과 관련된 파일

 

가상화된 배포 시대 : 그 해결책으로 가상화 도입

단일 물리 서버의 CPU에서 여러 가상 시스템(VM)을 실행할 수 있게 한다.

  • 가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스할 수 없으므로, 일정 수준의 보안성 제공할 수 있다.
  • 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있다.
  • 하드웨어 비용 절감, 더 나은 확장성 제공

컨테이너 개발 시대 :

가상머신과 컨테이너 애플리케이션 격리 방식이 다름

  • 가상머신 :
    • 호스트 OS에 하이퍼바이저를 설치 → 그 위에 게스트 OS와 패키징한 VM을 만들어 실행
    • 보안 좋지만, 무겁고 느리다는 단점이 있다.
  • 컨테이너 :
    • 리눅스 커널을 공유해서 바로 프로세스 실행
    • 컨테이너가 호스트 OS 위에서 직접 실행되며, 같은 OS 커널을 사용하는 다른 컨테이너와 OS 자원을 공유한다. ⇒ 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없다.
    • OS의 관점에서 애플리케이션 여러 개 구동시킨 것 같다. 하지만 실제로 애플리케이션 간에 간섭을 일으킬 수 없다.
    • OS는 각 애플리케이션이 사용할 수 있는 CPU, 메모리 등의 자원 또한 독립적으로 사용할 수 있도록 할당하고 관리한다.
    • 개별적인 user space를 가지고, 가상화된 공간을 생성하기 위해 리눅스 기능인 pivot-root namespace cgroup 을 사용함으로써 OS나 디렉토리, IP 주소 등과 같은 시스템 자원들을 마치 각 애플리케이션이 점유하고 있는 것처럼 보이게 할 수 있다.
    • 가볍고 빠르게 시작할 수 있다.

⚙️ 쿠버네티스 아키텍처

마스터 : 클러스터 전체를 관리하는 컨트롤러

노드(워커노드) : 컨테이너를 동작하며 실제 서비스에 제공

Pod이란?

  • 쿠버네티스의 가장 기본적인 배포 단위
  • 컨테이너를 관리하는 작은 단위
  • 컨테이너: 어플리케이션을 정의하는 작은 공간
  • 여러 컨테이너를 담을 수 있음 (1Pod = Ncontainers)
    • 하나의 파드에서는 동일한 라이프 사이클을 갖는 컨테이너들을 담아야 함(서로 다른 라이프사이클을 갖는다면 다른 파드로 관리하는 것이 바람직함)

.yaml 파일

  • 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식
  • 기본 문법
    • 구조화되 데이터를 표현하기 위해 데이터 포맷
    • Python처럼 들여쓰기로 데이터 계층을 표기
    • 들여쓰기를 할 때에는 Tab이 아닌 Space Bar를 사용
    • 가독성이 좋아 설정 파일에 적합한 형식
    • Scalar 문법: ‘:’을 기준으로 Key: value를 설정
    • 배열 문법 ‘-’문자로 여러 개를 나열
  • 동작중인 파드 정보 보기
$ kubectl get pods

$ kubectl get pods -o wide

$ kubectl describe pod webserver

없는게 아님! $ kubectl get pods —all-namespaces 으로 확인

  • 동작중인 파드 수정
$ kubectl edit pod webserver
  • 동작중인 파드 삭제
$ kubectl delete pod webserver

$ kubectl delete pod —all

 

<컨테이너 image ‘redis123’을 실행하는 pod ‘redis’를 redis.yaml을 이용해 생성하시오.>

$ kubectl run redis —imageredis123 redis.yaml —dry-run -o yaml > redis.yaml

 

네임스페이스 사용하기

namespace 생성

  • CLI
$ kubectl create namespae blue
  • yaml
$ kubectl create namespace green —dry-run -o yaml>green-ns.yaml
$ vim green-ns.yaml
$ kubectl create -f green-ns.yaml

 

 

namespace 관리

$ kubectl delete namespace

$ kubectl get namespace

사용할 네임스페이스 switch

  • 기본으로 사용하는 namespace를 default가 아닌 다름 이름의 namespace로 switch
  • 방법

1. namespace를 포함한 context등록

$ kubectl config —help
$ kubectl config set-context NAME —cluster=kubernetes ~~
$ kubectl fonfig view

 

 

2. 등록된 namespace로 context 변경

$ kubectl config use-context NAME

*주의

네임스페이스 삭제 ⇒

네임스페이스 안에 여러 API 들어있기 때문에 다 삭제됨

 

반응형