on
ReadWriteMany 모드에서 포드 전체에서 NFS 영구 볼륨 사용
ReadWriteMany 모드에서 포드 전체에서 NFS 영구 볼륨 사용
네트워크 파일 공유 또는 NFS는 네트워크를 통해 제공되는 블록 스토리지입니다. 이를 통해 여러 호스트에 동일한 스토리지 리소스를 마운트할 수 있습니다. 다양한 시스템에서 정보를 저장하고 공유할 수 있는 탁월한 선택입니다. 일반적으로 애플리케이션의 여러 인스턴스를 HA 모드로 제공하려는 경우에 유용합니다.
성능 측면에서는 전통적으로 NFS가 SAN 기반 영구 디스크보다 느립니다. 그러나 클라우드에서 관리되는 서비스를 사용할 수 있기 때문에 이 콘은 상당히 많은 부분을 다룹니다. 예를 들어 GCP의 파일스토어를 사용하면 여러 범주의 파일 공유에 대해 다음과 같은 IOP를 제공합니다.
영구 디스크를 살펴보면 다음과 같은 결과가 나타납니다.
두 표를 모두 살펴보면 IOP와 처리량이 두 시나리오 모두에서 비슷하다는 것을 알 수 있습니다. 따라서 관리 NFS 오퍼링을 사용해도 큰 손실을 입지 않을 것입니다.
자, 이제 실습하러 오겠습니다. 우리는 새로운 구글 파일스토어 파일 공유를 만들고 그것에 접속하기 위해 PersistentVolume 자원을 사용할 것이다. 그런 다음 PersistentVolumeClaim 리소스를 사용하여 PersistentVolume 을 주장할 것입니다. 그런 다음 전개 에서 PersistentVolumeClaim 을 사용해 플라스크 애플리케이션 3가지를 팟 으로 실행할 것이다. 각 Pod 는 호스트 이름과 특정 애플리케이션 방문 횟수를 전체적으로 보고합니다. 3개의 팟 은 파일 공유 내에서 동일한 파일을 읽고 쓸 수 있다. 자, 이제 더 이상 떠들지 말고 전제조건을 살펴보자.
전제조건
연습에는 Google Kubernetes Engine(GKE) 클러스터와 Google Filestore 파일 공유를 사용할 것입니다. 따라서 당연히 GCP 계정이 필요합니다. 좋은 소식은 아직 등록하지 않았다면 3개월 동안 GCP 무료 평가판을 등록할 수 있다는 것입니다.
연습을 위해서는 이 저장소를 분리해 복제하고 cd를 넣어야 한다. 이제 다음 단계로 GKE 클러스터를 생성해 보겠습니다.
GKE 클러스터 만들기
GKE 클러스터를 만들려면 다음 명령을 사용합니다.
$ gcloud 컨테이너 클러스터가 클러스터-1 --zone us-central1-a를 생성합니다.
몇 분 정도 소요되며 GKE 클러스터를 가동하고 실행해야 합니다. 다음으로 파일스토어 인스턴스를 만들어야 합니다.
파일스토어 인스턴스 만들기
3으로 STANDARD 계층 파일스토어 인스턴스를 만들겠습니다.TB 용량은 데모에 불과하다. 사용 사례 및 성능 요구사항에 맞는 계층을 사용할 수 있습니다.
파일스토어를 만들려면 다음 명령을 사용합니다.
$gcloud 파일스토어 인스턴스는 클러스터-1-fs --위치 us-central1-a --tier STANDARD --file-share=name="cluster_1_fs",용량=3T --network=name=기본값
보시는 바와 같이, 파일스토어가 만들어집니다. 자, 이제 쿠버네테스 자원을 만들어 봅시다.
Kubernetes 리소스 만들기
먼저 우리가 만든 파일 공유를 가리키는 영원한 볼륨 을 만들고 이를 주장하기 위해 영원한 볼륨 클레임 을 만들어야 한다.
영구 볼륨 및 클레임 생성
그러기 전에 파일 공유 사이트에서 자세한 정보를 얻어야 해요. 다음 명령을 사용하여 나열해 보겠습니다.
$gcloud 파일스토어 인스턴스 목록
그런 다음 PersistentVolume 사양에서 이러한 세부 정보를 사용할 수 있습니다. 우리가 사용할 영구볼륨 클레임 자원을 이용한 영구볼륨도 주장할 필요가 있다. 두 가지를 모두 합치면 다음과 같은 매니페스트를 얻을 수 있습니다.
PersistentVolume spec 섹션에서 다음을 정의했습니다.
PersistentVolumeClaim spec 섹션은 다음을 정의한다.
이제 다음 명령을 사용하여 매니페스트를 적용하겠습니다.
$ kubectl apply -f filesserver-c.dec.decl
보시다시피 영원한 볼륨 을 사용할 수 있으며 영원한 볼륨 클레임 에 구속되어 있습니다. 따라서 이제 애플리케이션을 배포할 수 있습니다.
응용 프로그램 배포
응용 프로그램은 방문 횟수를 반환하는 간단한 Python Flask 앱입니다. 다음은 app.py 파일이다.
코드에서도 알 수 있듯이 파일 /데이터/카운트 에서 가장 최근의 방문 횟수를 읽으려고 시도하고 숫자 1 을 증가시킨 다음 업데이트된 값으로 파일 작성과 함께 값을 반환합니다. 여러 인스턴스가 파일을 동시에 수정하지 않도록 쓰기 기능에 잠금, 수정 및 잠금 해제 패턴이 표시됩니다.
이제 이 애플리케이션은 이미 DockerHub에서 구축되어 사용할 수 있습니다. 따라서 다음 매니페스트를 사용하여 배포할 것입니다.
매니페스트는 배치와 서비스 자원으로 구성된다. 배포 리소스는 3개의 애플리케이션 복제본을 실행하며, 모두 파일 서버-pvc 영구 볼륨 클레임을 사용합니다. 이는 모든 팟 복제본이 동일한 파일 시스템에서 동시에 읽고 쓸 수 있다는 것을 의미한다.
서비스 리소스는 로드 밸런서의 포트 80에 앱을 노출하기만 합니다. 따라서 로드 밸런서 IP 주소를 사용하여 외부에서 서비스를 검색할 수 있어야 합니다.
이제 다음 명령을 사용하여 매니페스트를 적용하겠습니다.
$ kubectl은 -f 앱 배치를 적용합니다.얌의
이제 팟 이 구동되고 서비스 가 외부 IP를 가지고 있기 때문에, 우리는 그것을 시험해 볼 수 있다.
배포 테스트
컬(curl)을 이용해 서비스 외부 IP를 타격할 예정이어서 3사의 로드 밸런스가 어느 정도 맞춰지는 것을 지켜봐야 한다. 팟에 상관없이 매번 히트할 때마다 방문율이 높아지는 것도 지켜봐야 한다.
다음 명령을 사용하여 서비스 를 시작하겠습니다.
$ curl
보시다시피, 우리가 엔드포인트를 10번 치면 히트할 때마다 수치가 1씩 증가하는 반면, 다른 팟 에서도 반응이 나오고 있다는 것을 알 수 있습니다. 이는 파일 공유에서 3개의 팟 이 모두 동일한 진실의 근원을 가리키고 있다는 것을 의미한다. 즉, ReadWriteMany 모드 PVC가 작동합니다.
결론
ReadWriteMany PVC를 위한 NFS로 Google Filestore와 같은 관리형 서비스를 사용하는 것은 매우 성능이 좋은 옵션이며, 특히 애플리케이션 설계를 복잡하게 하지 않고 사용자 환경에서 HA 구성이 필요한 경우 더욱 그렇습니다.
읽어줘서 고마워! 기사를 재미있게 보셨기를 바랍니다!
from http://top-poster.tistory.com/19 by ccl(A) rewrite - 2021-09-23 05:00:53