반응형

본 글은 인프런 강의 "대세는 쿠버네티스 [초급~중급]" 를 듣고 요약 및 실습 정리한 내용입니다.

 

Node Schedule

  • pod는 결국 여러 node들 중 한 node에 올라가져야 함
  1. 직접선택
  • Node에 라벨을 달고 Pod를 만들때 노드를 지정

apiVersion: v1
kind: Pod
metadata:
  name: pod-3
spec:
    nodeSelector:
    hostname: node1
  containers:
  - name: container
    image: tmkube/init

 

2. 쿠버네티스의 스케쥴러가 판단해서 자동 지정

  • memory나 cpu 자원을 보고 판단

apiVersion: v1
kind: Pod
metadata:
  name: pod-4
spec:
  containers:
  - name: container
    image: tmkube/init
    resources:
      requests:
        memory: 2Gi # 필요한 memory 명시 가능
      limits: # 최대 허용
        memory: 3Gi 
  • memory : 초과시 Pod 종료 시킴
  • limits
    • memory: 초과시 pod 종료
    • cpu: Over시 종료되지 않고 requests에 명시된 수치까지 낮춤
반응형

'Kubernetes' 카테고리의 다른 글

Pod - Container  (0) 2024.08.04
Pod - Label  (0) 2024.08.04
반응형

본 글은 인프런 강의 "대세는 쿠버네티스 [초급~중급]" 를 듣고 요약 및 실습 정리한 내용입니다.

Pod

 
  • 파드 내에는 하나의 독립적인 서비스를 구성할 수 있는 여러개의 Container가 있을 수 있음

Container

  • 서비스가 연결될 수 있도록 포트를 가지고 있음
  • 한 컨테이너가 하나 이상의 포트를 가질 수는 있지만 파드 내에서 다른 컨테이너와 중복된 포트를 가질 수 는 없음

  • 두 container는 하나의 host로 묶여있어서 container들끼리 localhost로 접근 가능

  • pod가 생성될 떄 고유한 ip 주소가 할당되는데 재생성시 변경됨
  • 쿠버네티스 클러스터에서만 접근가능, 외부에서 접근 불가
  • 파드에 문제가 생기면 재생성되는데 ip가 변경됨

Pod 생성을 위한 yaml 파일 내용

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:
    - name: container1
      image: tmkube/p8000
      ports:
      - containerPort: 8000 # container의 노출된 포트
    - name: container2
      image: tmkube/p8080
      ports:
      - containerPort: 8080

 

실습

  • dashboard에서 아래 yaml파일 통해 파드 생성
    • JSON로 변경하면 오른쪽과 같이 생성됨 (container2는 제외)
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:
  - name: container1
    image: tmkube/p8000
    ports:
    - containerPort: 8000 # container의 노출된 포트
  - name: container2
    image: tmkube/p8080
    ports:
    - containerPort: 8080
{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "name": "pod-1"
  },
  "spec": {
    "containers": [
      {
        "name": "container1",
        "image": "tmkube/p8000",
        "ports": [
          {
            "containerPort": 8000
          }
        ]
      }
    ]
  }
}

  • IP를 확인할 수 있고 이는 쿠버네티스 클러스터 내에서만 접근 가능
  • master node에서 아래 명령어를 통해 pod 내의 container에 접근 가능
[root@k8s-master ~]# curl 20.109.131.1:8000
containerPort : 8000
[root@k8s-master ~]# curl 20.109.131.1:8080
containerPort : 8080

한 pod 내에 동일한 포트가 노출된 2개의 container를 띄우는 경우

apiVersion: v1
kind: Pod
metadata:
  name: pod-2
spec:
  containers:
  - name: container1
    image: tmkube/p8000
    ports:
    - containerPort: 8000 # container의 노출된 포트
  - name: container2
    image: tmkube/p8000
    ports:
    - containerPort: 8000

  • Container2 내의 로그를 보면 Error: listen EADDRINUSE: address already in use :::8000 즉, 동일한 port가 이미 사용중이라는 에러가 발생했음

 

 
반응형

'Kubernetes' 카테고리의 다른 글

Node schedule  (0) 2024.08.04
Pod - Label  (0) 2024.08.04
반응형

본 글은 인프런 강의 "대세는 쿠버네티스 [초급~중급]" 를 듣고 요약 및 실습 정리한 내용입니다.

 

Label

  • Pod 뿐만 아니라 모든 object에 추가할 수 있음 (pod에 가장 많이 사용됨)
  • 목적에 따라 object를 분류하고 따로 연결하기 위해서임
  • 구성은 Key와 Value이고 한 pod에 여러개의 label을 달 수 있음

  • web, db, server type인 pod들이 dev, production에 있음
  • 웹 개발자가 웹화면만 보고 싶다면 type이 web이 pod만 Service에 연결
  • 상용 환경 운영자에게는 lo:production label이 붙은 아래 pod들을 Service에 연결하여 사용

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

 

실습

아래에서 labels 의 type과 lo를 변경하여 6개의 pod를 띄움

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

 

web을 위한 Service를 띄움

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

 

서비스가 만들어짐

  • selector에 따라 label이 type: web인 pod들만 연결시켜줌

production을 위한 service를 띄우면 3개의 pod가 연결된걸 확인할 수 있음

apiVersion: v1
kind: Service
metadata:
  name: svc-for-production
spec:
  selector:
    lo: production
  ports:
    - port: 8080

반응형

'Kubernetes' 카테고리의 다른 글

Node schedule  (0) 2024.08.04
Pod - Container  (0) 2024.08.04

+ Recent posts