Kubernetes Pods, Deployment, Object

박형석·2022년 4월 21일
0

Kubernetes

목록 보기
2/4
post-thumbnail

쿠버네티스 개념정리

파드의 실체

쿠버네티스에서는 직접 사용자가 개별 파드를 만들일이 많지 않다. 왜냐면 파드는 일시적이고, 언제나 삭제될 수 있음을 감안하고 만들기 때문이다. 마치 가상 클라우드서버의 별명인 가축과 같은 개념인 것이다. 하나가 없어지면 하나의 요소가 사라진 것이지 본질이 없어진게 아니기 때문이다.

Deployment(디플로이먼트)

쿠버네티스의 디플로이먼트는 번역하지 않는게 좋다. 이것은 파드의 교체/배치와 관련된 명세이다.

쿠버네티스의 핵심은 컨테이너를 오케스트레이션하는 것으로, 파드 장애시 자동 복구 하거나 복제 하거나 하는 등의 일을 자동으로 처리하는 데에 있다. AWS로 따지면 ECS가 하는 일과 비슷하다.

파드는 디플로이먼트, 스테이스풀셋, 데몬셋을 이용해 관리하는 것이 바람직하다.

쿠버네티스 오브젝트

  • 영속성을 가짐
  • 클러스터의 상태를 나타내기 위해 오브젝트를 이용함
    • 어떤 컨테이너화된 애플리케이션이 동작 중인지
    • 그 애플리케이션이 이용할 수 있는 리소스
    • 그 애플리케이션이 어떻게 재구동 정책, 업그레이드, 그리고 내고장성과 같은 것에 동작해야 하는지에 대한 정책

쿠버네티스의 오브젝트는 하나의 의도를 담은 래코드이다. 오브젝트를 생성하게 되면, kube시스템은 그 오브젝트 생성을 보장하기 위해 지속적으로 작동한다.

오브젝트를 생성함으로써 클러스터의 워크로드를 어떤 형태로 보이고자 하는지 효과적으로 쿠버네티스 시스템에 전한다.

생성이든 수정이든 삭제든 오브젝트를 동작시키려면 쿠버네티스 api를 이용해야 한다.

오브젝트 명세와 상태

거의 모든 쿠버네티스 오브젝트는 오브젝트의 구성을 결정해주는 두 개의 중첩된 오브젝트 필드를 포함한다.

  • 오브젝트 spec: 오브젝트를 생성할 때 리소스에 원하는 특징에 대한 설명을 제공해서 설정한다.
  • 오브젝트 status: 업데이트된 오브젝트의 현재 상태를 설명함.

예)
쿠버네티스 디플로이먼트는 클러스터에서 동작하는 애플리케이션을 표현해줄 수 있는 오브젝트이다. 디플로이먼트를 생성할 때, 디플로이먼트 spec에 3개의 애플리케이션 레플리카가 동작되도록 설정할 수 있다.그래서 statusspec간의 차이를 끊임없이 대응한다.

오브젝트 작성법

대부분의 경우 정보를 .yaml파일로 kubectl에 제공한다.
다음은 쿠버네티스 디플로이먼트를 위한 필수 오브젝트 .yaml파일의 예이다.

apiVersion: apps/v1 # 이 오브젝트를 생성하기 위해 사용하고 있는 쿠버네티스 API 버전이 어떤 것인지
kind: Deployment # 어떤 종류의 오브젝트를 생성하고자 하는지
metadata: #  이름 문자열, UID, 그리고 선택적인 네임스페이스를 포함하여 오브젝트를 유일하게 구분지어 줄 데이터
  name: nginx-deployment
spec: # 오브젝트에 대해 어떤 상태를 의도하는지
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

yaml파일을 이용해서 디플로이먼트를 생성하기 위해서는 kubectl apply커맨드를 이용하면된다.

네임 스페이스

쿠버네티스에서 리소스의 이름은 네임스페이스 내에서 유일해야 하며, 네임스페이스 간에서 유일할 필요는 없다.

여러개의 네임스페이스를 사용하는 경우

네임스페이스는 여려 개의 팀이나 프로젝트에 걸쳐서 많은 사용자가 있는 환경에서 사용하도록 만들어졌다. 사용자가 거의 없거나 수 십명 정도인 경우에는 네임스페이스를 전혀 고려할 필요가 없다.

네임스페이스는 이름의 범위를 제공한다. 리소스의 이름은 네임스페이스 내에서 유일해야 하지만 네임스페이스를 통틀어서 유일할 필요는 없다.

네임 스페이스 조회

kubectl get namespace:사용중인 클러스터의 현재 네임스페이스를 나열할 수 있다.

쿠버네티스는 처믕 네 개의 초기 네임스페이스를 갖는다.

  • default : 다른 네임스페이스가 없는 오브젝트를 위한 기본 네임스페이스
  • kube-system: 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스
  • kube-public: 자동으로 생성되며, 모든 사용자가 읽기 권한으로 접근할 수 있다.
  • kube-node-lease: 클러스터가 스케일링될 때 노드 하트비트의 성능을 향상 시키는 각 노드와 관련된 리스(lease) 오브젝트에 대한 네임스페이스

요청에 네임스페이스 설정하기

현재 요청에 대한 네임스페이스를 설정하기 위해 --namespace 플래그를 사용한다.

다음은 --namespace의 예시다

kubectl run nginx --image=nginx --namespace=<insert-namespace-name-here>
kubectl get pods --namespace=<insert-namespace-name-here>

모든 오브젝트가 네임스페이스에 속하진 않는다.

대부분의 쿠버네티스 리소스(예를 들어, 파드, 서비스, 레플리케이션 컨트롤러 외)는 네임스페이스에 속한다.
하지만 네임스페이스 리소스 자체는 네임스페이스에 속하지 않는다. 그리고 노드나 퍼시스턴트 볼륨과 같은 저수준 리소스는 어느 네임스페이스에도 속하지 않는다.

profile
Better Than Yesterday

0개의 댓글