Application 실행하기

김현수·2024년 3월 12일

Kubernetes

목록 보기
5/14

Kubernetes in Action, Second Edition MEAP V15 정리중

Remind Pods

pod이란 Container들을 여러 개 모아 한꺼번에 실행시키는 집합으로, 한 pod의 구성 container들은 모두 같은 node에 담겨 있다.

pod을 사용하는 이유?
-> 여러 프로세스를 사용하기 위해서

한 container 안에 여러 프로세스를 실행시키지 않고 프로세스별로 container를 분할하는 이유?
-> container 자체가 하나의 프로세스만을 위해 디자인됨. container 안의 프로세스가 여러개 있어도 구분 X

pod를 사용함으로써 각각의 프로세스가 container 안에서 독립적으로 실행할 수 있다. 또한 같은 namespace들을 공유함으로써 프로세스끼리 통신을 단일 컴퓨터 안에서처럼 가능하게 한다.

 
하나의 pod 안에는 하나의 application을 넣는 것을 권장한다.
why?) pod의 단위별로 node에 배치되고 horizontal scaling이 일어나기 때문

sidecar 패턴

따라서 pod의 구조는 보통 메인 기능을 하는 1개의 primary container와 메인 기능 보조나 추가 기능을 하는 여러 개의 sidecar container로 분리된다.

Pod 실습

Pod 만들기

다음과 같이 yaml을 만들고 apply를 해서 pod을 만들 수 있다.

// kubia.yaml
apiVersion: v1 
kind: Pod 
metadata:
 name: kubia
spec:
 containers:
 - name: kubia
 image: luksa/kubia:1.0
 ports:
 - containerPort: 8080
$ kubectl apply -f pod.kiada.yaml
pod "kiada" created

이렇게 만들어진 pod의 정보를 보자.

$ kubectl get pod kiada
NAME READY STATUS RESTARTS AGE
kiada 1/1 Running 0 32s

$ kubectl describe pod kiada
Name: kiada
Namespace: default
Priority: 0
Node: worker2/172.18.0.4
Start Time: Mon, 27 Jan 2020 12:53:28 +0100
...

Request 보내기

pod 자체의 고유 IP주소가 있지만 이것은 내부에서 다른 pod들이 접근할때 사용됨 -> 다른 방법 필요

$ kubectl get pod kiada -o wide
NAME 	READY 	STATUS 	RESTARTS 	AGE	IP 			NODE 	...
kiada 	1/1 	Running	0 			35m 10.244.2.4 	worker2 ...

IP를 확인했으니 이제 port 번호만 pod definition에서 확인하면 주소가 확정된다.
알아낸 주소로 보내면 응답이 온다.

$ curl 10.244.2.4:8080
Kiada version 0.1. Request processed by "kiada". Client IP: ::ffff:10.244.2.1

 

로컬에서 확인할 경우, kubectl port-forward를 사용하여 통신하는 방법이 있다. 로컬로 연결되는 proxy를 사용하여 통신한다.

$ kubectl port-forward kiada 8080
... Forwarding from 127.0.0.1:8080 -> 8080
... Forwarding from [::1]:8080 -> 8080

$ curl localhost:8080
Kiada version 0.1. Request processed by "kiada". Client IP: ::ffff:127.0.0.1

이것을 그림으로 나타내면 다음과 같다.

Request log 확인

node.js application은 stdout으로 log를 보내기 때문에, 다음과 같이 확인할 수 있다.

$ kubectl logs kiada
Kiada - Kubernetes in Action Demo Application
---------------------------------------------
Kiada 0.1 starting...
Local hostname is kiada
Listening on port 8080
Received request for / from ::ffff:10.244.2.1 #A
Received request for / from ::ffff:10.244.2.5 #B
Received request for / from ::ffff:127.0.0.1 #C

또는 이렇게 하면 로그를 실시간으로 볼 수 있다.

$ kubectl logs kiada -f 

File copy

$ kubectl cp kiada:html/index.html /tmp/index.html

명령어 실행

$ kubectl exec kiada -- ps aux

profile
개발자 스터디 블로그

0개의 댓글