티스토리 뷰

개요


  kubespray로 kubernetes 클러스터를 구축하고 ingress-nginx에 웹 페이지를 올리려고 하는 과정에서 생각보다 시행착오가 많은거 같다. 단순히 ingress, service, deployment를 대충 올리고 웹 페이지 올리면 되겠다고 생각했는데 Deployment를 생성하는 과정에서 번거로워지는 작업들이 많아져서 추가로 정리하고자 한다.

 

  현재 Deployment 구축을 테스트하는데 사용한 클러스터는 VMware에서 3개의 VM을 만들어서 생성하였고, Master 노드 1개(master1)와 Worker 노드 2개(worker1, worker2)로 구성된다.

 

Deployment 구축

 

  우선 이전 글에서 ingress-nginx를 구축하는데 사용했던 Deployment이다. 일단은 yaml 파일 자체에는 문제가 전혀 없기 때문에 kubectl apply를 하면 index.html 파일을 잘 확인 가능하다.

  하지만 웹 페이지를 수정하고 테스트해보면 알겠지만 F5 등을 눌렀을 때 페이지가 수정되지 않는 문제가 발생한다. 이유는 Deployment를 생성하는 과정에서 레플리카를 2개로 주었기 때문에 2개의 pod(및 컨테이너)가 생성되는데 kubectl exec로 수정하는 과정은 1개의 pod(및 컨테이너)만 진행하기 때문이다. 이를 해결하려면 다른 pod도 동일하게 수정해주여야 하는데 페이지가 많아지고 레플리카가 많아질수록 굉장히 번거로워진다. 따라서 이런 번거로운 작업에서 벗어나기 위해 yaml을 열심히 수정해 보았다.

 

  우선 현재 가장 문제 부분인 페이지를 수정할 경우, 다른 pod도 동일하게 수정되게 만들어야 한다. nginx에서 기본적으로 index.html을 참조하는 디렉토리인 "/usr/share/nginx/html/" 디렉토리를 pod끼리 공유한다면 충분히 해결 가능하다. yaml 파일에 볼륨을 추가해주면 된다.

  볼륨 설정에는 여러 가지가 있지만 호스트 노드의 파일 시스템에 있는 파일 또는 디렉토리를 pod에 마운트하는 hostPath를 사용하였다. 호스트 노드의 /web-deploy 디렉토리가 각 파드들의 /usr/share/nginx/html에 마운트되기 때문에 /web-deploy 디렉토리에 파일을 추가, 수정하면 즉시 적용된다. 파드 내부에서 직접 파일을 수정하는 작업보다 간편하게 수정 작업이 가능하다.

 

  다만 이렇게 해도 F5 등을 눌렀을 때 페이지가 수정되지 않는 문제가 여전히 발생한다. 현재 Worker 노드를 총 2개이고 레플리카가 2개로 구성했기 때문에 쉽게 확인 가능하다. Master 노드에서 레플리카로 파드를 생성할 때 Master 노드의 스케쥴러가 파드를 생성하기 가장 적합한 노드를 찾는데 여기서 문제가 발생한다. 총 2개의 노드가 있으므로 1개의 노드만 일하는 상황 보다는 2개의 노드가 같이 일하는게 적절하기 때문에 스케쥴러가 2개의 노드에 각각 파드를 생성한다. 따라서 현재 hostPath를 설정하고 구상했던 것처럼 적용하기 위해서는 특정 1개의 노드에 레플리카 파드를 생성하도록 해야 한다.

  라벨을 사용하여 특정 노드 1개에 이를 적용한다. 위의 사진은 단순히 kubernetes.io/hostname이라는 고유 키 값에 worker1이 포함된 노드에 해당 yaml 설정을 적용한다.

 

  라벨을 확인하는 방법은 kubectl로 get 커맨드를 호출할 때, --show-labels를 붙여주면 된다.

 

결과 확인

 

  worker1 노드의 /web-deploy 디렉토리에 index.html을 생성한다. 브라우저 등을 통해 해당 서비스에 접근한 후, 페이지 reload 등을 하여도 동일하게 페이지가 나오는걸 확인 가능하다.

 

참고

 

Kubernetes 특정 node에 pod 배포하기 - label, nodeSelector, affinity(nodeAffinity, podAffinity)

서론 본 포스팅에서는 Kubernetes 특정 node에 Pod를 배치하는 방법에 대해 살펴보겠습니다. Kubernetes의 구조는 크게 MaterNode / WorkerNode / InfraNode / Ingress Node 등으로 구분할 수 있습니다. - MasterN..

waspro.tistory.com

 

'Cloud > Kubernetes' 카테고리의 다른 글

[Kubernetes] Kubernetes RBAC 간단 정리  (0) 2021.02.19
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31