[쿠버네티스] Object

Manx·2025년 1월 15일
0

DevOps

목록 보기
1/5

들어가며
CKA를 준비하며 Pod, ReplicaSet, Deployment, Services에 대한 개념을 정리해 보려고 한다.
개념을 간단하게 정리하는 목적이고, 딥한 내용들은 나중 포스트들에서 다룰 예정이다.
하나씩 보면 헷갈리고, 같이 봐야 조금 이해되는 것 같다.

Pod

Pod란 무엇인가

  • 쿠버네티스에서 만들 수 있는 가장 작은 단위의 Instance 이다.
  • 1개 또는 그 이상의 컨테이너로 구성되며, Pod 끼리는 네트워크와 스토리지를 공유한다.
    • localhost로 접근이 가능함
  • 다중 컨테이너로도 사용할 수 있지만, 다중 컨테이너로 사용하는 경우는 드물다고 한다.

nginx:1.14.2 이미지를 실행하는 컨테이너로 구성되는 파드

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    imgae: nginx:1.14.2
    ports:
    -  containerPort: 80

다음과 같이 실행해도 된다.
kubectl run nginx --image=nginx1.14.2


ReplicaSet

ReplicaSet란

  • Pod의 실행 갯수를 안정적으로 유지하는 역할을 한다.
  • 명시된 동일 파드 갯수에 대한 가용성을 보장한다.
  • 특정 Label을 기반으로 파드 관리를 수행한다.
  • Pod의 실행 갯수는 보장할 수 있지만, Update가 안되기 때문에 단일로는 안쓰이고 Deployment의 일부로 사용된다.
    • yml파일을 수정해도, 기존 Pod가 새로 생기지 않음. -> 삭제 후 다시 만들어야 한다.

vs ReplicaController

  • ReplicaSet과 PlicaController는 동일하게 동작한다.
  • 다만, ReplicaSet은 pod selector라는 풍부한 표현식을 갖는다.

그림과 같이, label을 기준으로 Pod 수를 관리한다.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 3 # 이 부분이 Pod의 수를 정한다.
  selector: # 어떤 Pod를 관리할 것인지 지정
    matchLabels:
      tier: frontend
  template: # 어떤 Pod를 만들 것인지
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

template를 통해 Pod를 만들고, selector로 라벨을 지정했으니
selector.matchLabels와 template.metadata.labels는 동일해야 한다.

그 외 명령어

kubectl get rs
kubectl replace -f replicaset-definition.yml # 수정된 yml파일 적용
kubectl scale --replicas=6 (type) (name) # scale 수정

Deployment

Deployment

  • Pod와 ReplicaSet에 선언적 업데이트를 제공한다.
    • 선언적 업데이트란, 상태를 제공하면 그 상태에 맞게 Pod 또는 ReplicaSet의 상태가 변하는 것을 의미한다.
  • App. 배포와 업데이트를 관리하는 상위 수준의 오브젝트이다.
  • ReplicaSet을 관리하는 Controller 역할이다.
  • 롤링 업데이트와 롤백을 지원한다. ( 해당 내용은 나중에 더 자세히 다루도록 하겠다. )

deployment-definition.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
    
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      lables:
        app: nginx
        
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Services

Service란

  • Pod와 Pod는 독립된 네트워크와 스토리지를 갖는다.
  • Pod끼리 통신하거나, 유저가 Pod에 접근을 해야하는데 그 통신을 담당하는 오브젝트이다.
  • Pod간 통신 또는 외부 트래픽과 Pod를 연결하는 네트워킹 오브젝트이다.

Service Type

NodePort, ClusterIP, LoadBalancer가 있으며 내용은 추후 정리하도록 하겠다.


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

0개의 댓글