본문 바로가기
K8S

쿠버네티스의 리소스

by Rainbound-IT 2021. 7. 22.
반응형

쿠버네티스는 유연한 애플리케이션 실행 환경 관리를 소프트웨어로 수행하기 때문에 다양한 것들을 추상화 하는데

이 추상화 한것을 리소스라고한다.

 

 

애플리케이션 실행

pod

쿠버네티스에서는 여러 개의 컨테이너를 모아서 포드로 관리 한다.

 

쿠버네티스의 node, pod, container,app 출처:kubernetes.io

예를 들어 서버용 도커 컨테이너와 프록시용 서버용 컨테이너 등과 관련된 것을 모아서 관리 할수 있다. 

이 포드가 애플리케이션의 디플로이 단위가 되며 포드 단위로 컨테이너 작성,시작, 정지 삭제 같은 조작을 한다.

동일한 포드의 컨테이너는 반드시 동일 노드상에 동시에 디플로이 된다는 특징이 있다.

포드 내에는 가상  NIC를 공유하는 구성이라 컨테이너끼리 localhost를 경유하여 통신할 수 있다.

 

도커는 컨테이너단위로만 배포 가능하고 쿠버네티스는 포드 단위로 배포할수 있다는게 다른건가?

 => 각 환경에서 사용하는 단위를 구분하기 위함

 

 

ReplicaSet

클러스터 안에서 지정된 수의 포드를 유지시켜 두는 장치.

예를들어 한 포드가 죽으면 새로운 포드를 생성.

클러스터 안에 포드를 기동시켜 두는 값을 '리플리카 수'

 

Deployment

애플리케이션의 배포 단위를 관리하는 것

리플리카셋을 가지고 있어서  포드안의 컨테이너의 버전업을 하고 싶으면 정지 시키지 않고 롤링 업데이트 할수 있다.

물론 버전다운을 할수도 있다.(롤백)

 

DaemonSet

클러스터의 전체 노드에 포드를 하나씩 작성한다.

주 용도

  • 모든 노드에서 클러스터 스토리지 데몬 실행
  • 모든 노드에서 로그 수집 데몬 실행
  • 모든 노드에서 노드 모니터링 데몬 실행

노드 생성시에 생성되고 노드 삭제시에 삭제된다.

리플리카 수를 지정할 수 없다.

kube-proxy도 데몬셋을 사용하여 움직인다.

 

StatefulSet

애플리케이션의 스테이트풀을 관리하는데 사용하는 워크로드 API 오브젝트이다.
파드 집합의 디플로이먼트와 스케일링을 관리하며, 파드들의 순서 및 고유성을 보장한다.

주용도 

  • 안정된, 고유한 네트워크 식별자.
  • 안정된, 지속성을 갖는 스토리지.
  • 순차적인, 정상 배포(graceful deployment)와 스케일링.
  • 순차적인, 자동 롤링 업데이트.

 

네트워크 관리

Service

쿠버네티스 클러스터 안에서 실행된 포드에 대해 액세스 할때는 서비스를 정의한다.

서비스란 쿠버네티스의 네트워크를 관리하는 것

로드밸런서는 서비스에 대응하는 ip주소 + 포트번호에 액세스 하면 여러 포드에 대한 L4레벨의 부하 분산을 한다.

Cluster IP : 클러스터 안의 포드끼리 통신하기 위한 프라이빗 IP. 노드상의 proxy 데몬 - 수선처 포드로 전송

External IP : 클러스터 외부에 공개하는 IP주소. 

IP주소와 포트번호는 환경변수로 참조 할수있다.

 

Ingress

클러스터 외부의 네트워크로부터 액세스를 받기 위한 오브젝트.일반적으로 HTTP 관리한다.

HTTP,HTTPS의 엔드 포인트로서 가능하다.

부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공 등 L7의 기능을 제공한다.

 

애플리케이션 설정 정보 관리

쿠버네티스에 애플리케이션이 공통으로 이요하는 환경변수등을 컨테이너에 넣어버리면 환경이 바뀔때마다 이미지를 다시만들어야한다.

그래서 애플리케이션의 설정 정보를 관리하는 장치가 있다.

 

ConfigMap

애플리케이션의 설정 정보, 구성파일, 명령인수, 포트번호, 애플리케이션 고유의 식별 정보 등을

포드에서 참조 할 수있도록 하는 장치.

Key-Value형으로 정보 관리

볼륨으로 마운트 할수 있어서 파일로 취급할수도 있고 환경변수로서 취급할수 도 있다.

 

컨피그맵에 저장된 데이터는 1MiB를 초과할 수 없다. 이 제한보다 큰 설정을 저장해야 하는 경우, 볼륨을 마운트하는 것을 고려하거나 별도의 데이터베이스 또는 파일 서비스를 사용할 수 있다

 

Secrets

컨피그맵과 말찬가지로 구성 정보를 컨테이너 애플리케이션에 전달하기 위한 것이지만 기밀성이 높은 정보(비밀번호, OAuth 토큰, ssh 키와 같은 민감한 정보)를 관리할때 이용한다.

 기밀 정보를 시크릿에 저장하는 것이 파드(Pod) 정의나 컨테이너 이미지 내에 그대로 두는 것보다 안전하고 유연하다.

바이너리 데이터도 저장할 수 있도록 데이터를 base64로 인코딩하여 등록해야한다.

 

주의:
쿠버네티스 시크릿은 기본적으로 암호화되지 않은 base64 인코딩 문자열로 저장된다. 기본적으로 API 액세스 권한이 있는 모든 사용자 또는 쿠버네티스의 기본 데이터 저장소 etcd에 액세스할 수 있는 모든 사용자가 일반 텍스트로 검색할 수 있다.
시크릿을 안전하게 사용하려면 (최소한) 다음과 같이 하는 것이 좋다.
1. 시크릿에 대한 암호화 활성화.
2. 시크릿 읽기 및 쓰기를 제한하는 RBAC 규칙 활성화 또는 구성. 파드를 만들 권한이 있는 모든 사용자는 시크릿을 암묵적으로 얻을 수 있다.

시크릿의 데이터는 메모리상(tmfs)에 전개되어 디스크에는 기록되지 않는다는 특징을 갖고 있다.

그리고 암호화 되어 etcd로 관리된다.

 

시크릿은 파드와 세가지 방법으로 사용된다

  • 하나 이상의 컨테이너에 마운트된 볼륨 내의 파일로써 사용.
  • 컨테이너 환경 변수로써 사용.
  • 파드의 이미지를 가져올 때 kubelet에 의해 사용.
애플리케이션 안에서 환경에 의존하는 값은 컨테이너 밖에서 관리하면 편리하다.

 

배치 잡 관리

job

하나 또는 여러 개의 포드에서  처리되는 배치 잡을 실행하기 위한 리소스

잡에서 하나 이상의 파드를 생성하고 지정된 수의 파드가 성공적으로 종료될 때까지 계속해서 파드의 실행을 재시도한다. 파드가 성공적으로 완료되면, 성공적으로 완료된 잡을 추적한다. 지정된 수의 성공 완료에 도달하면, 작업(즉, 잡)이 완료된다. 잡을 삭제하면 잡이 생성한 파드가 정리된다. 작업을 일시 중지하면 작업이 다시 재개될 때까지 활성 파드가 삭제된다.

간단한 사례는 잡 오브젝트를 하나 생성해서 파드 하나를 안정적으로 실행하고 완료하는 것이다. 첫 번째 파드가 실패 또는 삭제된 경우(예로는 노드 하드웨어의 실패 또는 노드 재부팅) 잡 오브젝트는 새로운 파드를 기동시킨다.

잡을 사용하면 여러 파드를 병렬로 실행할 수도 있다.

 

CronJob

정해진 타이밍에 반복할 Job 실행에 사용하는 리소스

백업 실행 또는 이메일 전송과 같은 정기적이고 반복적인 작업을 만드는데 유용하다.

또한 크론잡은 클러스터가 유휴 상태일 때 잡을 스케줄링하는 것과 같이 특정 시간 동안의 개별 작업을 스케줄할 수 있다.

 

 

그 밖에 리소스들은 

 

https://kubernetes.io/ko/docs/concepts/

 

개념

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

 

여기서...

반응형

'K8S' 카테고리의 다른 글

포드를 사용한 컨테이너 애플리케이션의 관리  (0) 2021.07.22
매니페스트 파일  (0) 2021.07.22
쿠버네티스 특징과 구조  (0) 2021.07.21
쿠버네티스 디플로이  (0) 2021.07.21
kubectl 명령어 기본조작  (0) 2021.07.21

댓글