본문 바로가기
네트워크/k8s

[k8s] 1. Pod - Container, Label, NodeSchedule

by Lauren X Ming 2021. 1. 27.

Pod의 특징을 알아보자

첫 번째 특징 - Container

  • 파드에는 하나의 독립적인 서비스를 구동할 수 있는 컨테이너가 있음
  • 컨테이너는 포트를 가지고 있고, 한 컨테이너가 포트를 하나 이상 가질 수 있음
  • 하지만 파드 내 컨테이너끼리 포트가 겹치면 안 됨
  • 컨테이너끼리는 포트로 접속 가능

파드가 생성될 때 고유의 IP 주소 할당

  • 쿠버네티스 클러스터내에서만 접근 가능, 외부는 불가능
  • 파드에 문제가 생길 시, IP주소 변경됨 --> 휘발성이 있음

Sample YAML

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:
  - name: container1
    image: kubetm/p8000
    ports:
    - containerPort: 8000
  - name: container2
    image: kubetm/p8080
    ports:
    - containerPort: 8080
  • pod name: pod-1
  • containers name: container1, container2
  • image: kubetm/p8000, kubetm/p8080
  • ports: 8000, 8080

두 번째 특징 - Label

  • 라벨은 파드뿐만 아니라 모든 오브젝트에 달 수 있음, 파드에 많이 사용됨
  • 라벨 사용의 목적: 오브젝트를 분류하고, 분류된 오브젝트만 연결하려고
  • 라벨은 Key: Value로 구성됨
  • 한 파드에는 여러 개의 라벨을 달 수 있음

그림 설명

  • type:web은 Pod1, Pod4에 있는데, 하나는 개발, 하나는 상용 환경에 있음
  • 나머지도 다 그런식임
  • 웹 개발자가 웹 타입만 보고 싶으면 type:web 라벨을 선택하면 됨
  • 상용환경만 보고 싶으면 lo:production 라벨을 선택하면 됨

Sample YAML

Pod

apiVersion: v1
kind: Pod
metadata:
  name: pod-2
  labels:
    type: web
    lo: dev
spec:
  containers:
  - name: container
    image: kubetm/init
  • 이건 위 그림에서 파드를 만들 때 씀
  • labels에 type:web, lo: dev를 씀

Service

apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    type: web
  ports:
  - port: 8080
  • 이건 위 그림에서 서비스를 만들 때 씀
  • selector에 type: web을 쓰니 해당 내용과 매칭되는 라벨이 붙어있는 파드에 연결됨

세 번째 특징 - Node Schedule

  • 파드는 결국 여러 노드들 중 한 노드에 올라가야 함
  • 노드를 직접 선택하는 방법과 쿠버네티스가 정해주는 방법이 있음

직접 선택하는 방법

  • 노드에 라벨을 만들고 파드를 만들 때 노드를 지정

Sample YAML

apiVersion: v1
kind: Pod
metadata:
  name: pod-3
spec:
  nodeSelector:
    hostname: node1
  containers:
  - name: container
    image: kubetm/init
  • nodeSelector에 라벨을 정해줬음

쿠버네티스가 노드를 선택하는 방법

  • 노드에는 전체 사용가능한 자원량이 있음 --> 메모리, CPU가 대표적
  • 메모리를 예로 들면, 파드가 2GB 메모리를 요구하는 사용량을 설정하면 메모리 여유가 있는 Node2로 감
  • 파드에 사용량을 써야 노드안에 파드들이 사이좋게 돌아감

Sample YAML

apiVersion: v1
kind: Pod
metadata:
  name: pod-4
spec:
  containers:
  - name: container
    image: kubetm/init
    resources:
      requests:
        memory: 2Gi
      limits:
        memory: 3Gi

limit은 또 뭐임

  • 메모리의 경우 limit을 초과하면 pod 종료
  • CPU 경우 초과하면 request로 낮추지 종료하지 않음

출처

인프런 - 대세는 쿠버네티스 7강

'네트워크 > k8s' 카테고리의 다른 글

[k8s] 6. Volume - emptyDir, hostPath, PV/PVC  (0) 2021.02.04
[k8s] 5. Service - 실습  (0) 2021.02.03
[k8s] 4. Service - ClusterIP, NodePort, LoadBalancer  (0) 2021.02.01
[k8s] 3. Pod - 실습  (0) 2021.01.31
[k8s] 2. 쿠버네티스 설치  (1) 2021.01.31