Kubernetes - Pod

현시기얌·2022년 1월 10일
0

Kubernetes

목록 보기
1/23
post-custom-banner

Pod

Container

Pod 안에는 하나의 독립적인 서비스를 구동할 수 있는 Container들이 있다.
그 Container들은 서비스가 연결될 수 있도록 port를 가지고 있다.
하나의 Container가 하나 이상 가질 수 있지만 한 Pod내에서 Container들끼리 port가 중복될 수 없다.
이 두 컨테이너는 한 host로 묶여있다고 보면 된다.

따라서 한 컨테이너에서 한 컨테이너로 접근할 때 localhost:port(해당 컨테이너port)로 접근할 수 있다.
Pod가 생성될 때 고유의 IP주소가 할당되는데 쿠버네티스 클러스터 내에서만 이 IP를 통해서 Pod로 접근할 수 있다. 외부에서는 이 IP로 접근할 수 없다.

만약 Pod에 문제가 생기면 시스템에서 감지하여 Pod를 삭제하고 다시 새로운 Pod를 생성한다.
이 때 IP주소는 변경된다. 즉 고유의 IP주소는 휘발성을 가진다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:
    - name: container1
      image: hyun6ik/hello
      ports:
        - containerPort: 8000
    - name: container2
      image: nginx:1.14
      ports:
        - containerPort: 8080

Label

Label은 Pod뿐만 아니라 모든 Object에 설정할 수 있는데 Pod에서 가장 많이 사용된다.
Label을 사용하는 이유는 목적에 따라 Object들을 분류하고 분류된 Object들만 따로 골라서 연결하기 위해서다.

Label은 key와value로 구성되어 있고 한 Pod에서는 여러개의 Label을 달 수 있다.

만약 개발자가 web화면만 보고싶다면 type이 web인 Pod들만 Service에 연결해서 이 Service의 정보를 개발자에게 알려주면 된다.
만약 개발자가 운영서버에 대한 정보만 보고 싶다면 Label의 lo가 production인 Pod들만 Service에 연결해서 이 Service의 정보를 개발자에게 알려주면 된다.

apiVersion: v1
kind: Service
metadata:
  name: service-1
spec:
  selector:
    type: web
  ports:
    - port: 8080
apiVersion: v1
kind: Pod
metadata:
  name: pod-2
  labels:
    type: web
    lo: dev
spec:
  containers:
    - name: container
      image: nginx:1.14

Pod를 만들 때 Labels에 Key와 Value형식으로 내용을 넣을 수 있고 추후 Service를 만들 때 selector에 Key와 Value를 넣으면 해당 내용과 매칭되는 Label이 붙어있는 Pod에 연결된다.

Node Schedule

Pod는 결국 여러 Node들 중에 한 Node에 올라가져야 한다.

그 방법에 대해서 직접 Node를 선택하는 방법과 쿠버네티스가 자동으로 지정해주는 방법이 있다.

직접 선택하는 방법은 Node에 Label을 달고 Pod를 만들 때 Node를 지정할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-3
spec:
  nodeSelector:
    hostname: node1
  containers:
    - name: container
      image: nginx:1.14

Pod를 만들 때 nodeSelector라는 항목에 Node의 Label과 매칭되는 Key Value를 넣으면 된다.

쿠버네티스의 스케쥴러가 판단해서 자동으로 지정해주는 방법은
노드에는 전체 사용가능한 자원량(Memory,CPU)가 있는데 Pod를 생성할 때 Pod에서 요구될 Memory의 사용량을 명시할 수 있는데 이 때 쿠버네티스의 스케줄러에서 요구된 자원량을 책정해 알맞은 Node에 자동으로 할당해준다.

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

Limits는 Memory가 초과시 Pod를 종료시키고
Cpu가 초과시에는 request로 낮춘다. (Over시에 종료되지 않는다.)

profile
현시깁니다
post-custom-banner

0개의 댓글