DevBoi

[k8s] Pod 생성 및 실습 본문

Infra/[K8S & Docker]

[k8s] Pod 생성 및 실습

HiSmith 2022. 8. 27. 22:49
반응형

우선 pod생성은 run으로 생성한다.

kubectl run "pod name" --image "url or filename"

kubectl run echo --image ghcr.io/subicura/echo:v1

kubectl describe pods/smith로도 내용을 봤다.

kubectl run을 하게 되면 위와 같은 과정으로 pod이 생성된다

이전에 공부했듯이 , 스케줄러는  Api server를 통해 할당 되지 않은 pod을 검사하고, 이를 pod을 노드에 할당하도록한다.

kubelet이 컨테이너를 생성하고, 이 안에 pod상태를 api server에 결과를 전달 한다.

 

다시 삭제하고 yaml 파일 기준으로 작성하여 pods를 생성해보도록하자

실제로는 이런 방식으로 pod을 생성하고 관리를 할 것이다.

kubectl run은 거의 사용하지 않을 것이고, 각 시스템 마다 이런 yaml 파일을 생성 및 관리하면서 pod, service등 오브젝트를 관리할것으로 예상된다.

 

간단하게 이렇게 파일을 생성하고 pod을 적용한다

kubectl apply -f smith_pod.yaml 

안에 상세 내용을 확인해보자

kubectl describe pods/smith

그리고 들어가도 보자

kubectl exec -it smith -- sh

 

 

pods 가 생성되는 과정을 도식화 하면 아래와 같다.

1. 스케줄러는 api server에게 할당되지 않은 pod을감시하고, 적절노드에 할당한다.

2. 노드에 설치된 kubelet은 자신의 노드에 할당되었지만 실행되지 않은 pod이 있는지 체크

3. kubelet은 Pod의 정보를 확인하고 컨테이너 생성, 

4.kubelet은 자신에게 할당된 pod의 상태를 api 서버에 전달

 

추가로 livenessProbe라는 옵션이 있다.

이는 컨테이너가 정상적으로 동작하는 지 체크하고 정상적으로 동작하지 않는다면 컨테이너를 재시작하여

문제를 해결한다.

체크하는 방법은, http get요청을 보내 확인 하는 방법을 사용한다.

 

이렇게 말도 안되는 path로 httpget으로 통신하게 끔 하고, 초기 지연시간이나, 타임아웃 초설정등을 지정하면

처음에 실행할때 응답을 받을 수 없어, CrashLoopBackOff가 뜨게 된다.

 

readinessProbe 설정은

컨테이너가 준비되었는지 체크하고, 정상적으로 준비되지 않았다면, Pod으로 들어오는 요청을 제외한다.

Pod을 재시작하지 않고 요청만 제외한다는 점이 다르다.

 

이렇게 되면 status 는 Running이지만, Ready 의 컨테이너가 0개가 된다. 0/1

대부분 두개를 동시에 적용한다고 한다.

하나의 Pod에 속한 컨테이너는 서로 네트워크를 localhost로 공유하고 동일한 디렉토리를 공유할수 있다.

즉 하나의 Pod에 여러개의 컨테이너를 띄울수 있다.

 

spec에 컨테이너에서

app이라는 이름과 db라는 이름 두개의 컨테이너를 하나의 pods에 띄운다.

하나의 pods에 두개의 컨테이너가 있기 때문에 localhost로 통신이 가능하다.

실제로 curl 로 호출해도 정상응답을 확인 할 수 있다.

한개의 pod에 2개의 컨테이너를 띄우는 경우는 조금 잘 생각을 해볼 필요가 있기는 할 것같다.

 

반응형

'Infra > [K8S & Docker]' 카테고리의 다른 글

[k8s] Deployment 실습  (0) 2022.08.28
[k8s] ReplicaSet 실습  (0) 2022.08.28
[k8s] 기본 명령어 공부  (0) 2022.08.27
[k8s]Mac에서 데모 준비  (0) 2022.08.27
3.k8s 데모 구현준비  (0) 2022.08.26