모험가

POD (기초) 본문

쿠버네티스/기초

POD (기초)

라리음 2022. 7. 28. 16:10

 

 

 

이 글은 인프런의 대세는 쿠버네티스 강의를 보며 정리한 글입니다.

 

 

 

 

 

 

컨테이너의 속성

 

 

한 파드 안에서 두개의 컨테이너가 같은 포트를 쓸 수는 없음

 

IP는 자동할당이며 재생성시 변경됨.

 

ex) container1    port : 8000

      container2    port : 8080

 

 

 

 

 

Label의 속성

 

 

 

라벨은 파드뿐만 아니라 오브젝트에도 부여할 수 있음.

 

구별하기 위한 목적도 있음.

 

 

Key : Value 로 여러개의 라벨을 달 수 있음.

 

 

ex) Pod1  type : web  Io : dev

      Pod2  type : web  Io : production

 

 

 

 

 

Node Schedule의 속성

 

 

파드는 여러 노드중 한 노드 위에 올라가야함.

 

직접 선택과 자동 선택이 있음

 

 

직접 선택 : 직접 지정하여 선택

-> nodeSelector에 hostname을 직접 지정

 

자동 선택 : 스케쥴러가 판단하여 선택

-> reource에 requests로 메모리 구간을 지정

 

 

 

 

Memory 초과시 Pod 종료 시킴

 

but Cpu 초과시 requests로 낮춤 Over시 종료되지는 않음

 

 

 

 

 

 

 

 

 

 

 

 

 

실습

 

 

 

 

 

 

대쉬보드에서 생성 이후 코드로 파드 안에 여러 컨테이너를 생성

 

 

 

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

 

 

 

 

 

 

curl로 IP의 포트를 확인 가능하며 exec로 컨테이너에 바로 접속이 가능

 

 

 

 

 

 

 

 

 

 

 

 

 

 

포트를 두개 중복 시키면 로그에서 이러한 오류를 확인 가능함

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

컨트롤러 생성 (파드가 죽었을때 다시 생성해주는 관리자 역할)

 

 

 

 

 

 

 

 

 

생성하면 지우더라도 컨트롤러가 알아서 새로운 파드를 생성 해줌

 

 

 

 

 

 

apiVersion: v1
kind: ReplicationController
metadata:
  name: replication-1
spec:
  replicas: 1
  selector:
    app: rc
  template:
    metadata:
      name: pod-1
      labels:
        app: rc
    spec:
      containers:
      - name: container
        image: kubetm/init

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

라벨을 포함한 파드 생성 (6개)

 

 

 

 

apiVersion: v1
kind: Pod
metadata:
  name: pod-2
  labels:
    type: web
    lo: dev
spec:
  containers:
  - name: container
    image: kubetm/init

 

 

 

pod-1 ~ 6까지

 

타입 : web,db,server

Io : dev, production 으로 6개 생성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

라벨을 찾아 서비스를 추가

 

 

 

 

 

apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    type: web
  ports:
  - port: 8080

 

name: svc-for-web으로 수정함

 

 

 

 

 

 

결과

 

 

 

 

 

이런식으로 selecor에 lo : production도 서비스를 연결시킬 수 있음

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Node Schedule 생성

 

 

 

 

apiVersion: v1
kind: Pod
metadata:
  name: pod-3
spec:
  nodeSelector:
    kubernetes.io/hostname: k8s-node1
  containers:
  - name: container
    image: kubetm/init

 

 

 

 

 

 

 

 

 

파드 4 생성  -> node 2에 생성됨

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

 

 

 

 

 

 

 

 

 

생성할때마다 자원이 많이 남은 곳을 스케쥴링을 통해 선택하여 생성 함

 

 

'쿠버네티스 > 기초' 카테고리의 다른 글

ConfigMap, Secret (기초)  (0) 2022.08.05
Volume (기초)  (0) 2022.07.28
Service (기초)  (0) 2022.07.28
kubernetes 설치  (0) 2022.07.27
쿠버네티스란  (0) 2022.05.17