카우치베이스 서버

AKS용 ASP.NET 코어 쿠버네티스 튜토리얼

이 블로그 게시물에서는 다음 블로그 게시물에 대한 후속 조치로 ASP.NET 코어 Kubernetes 튜토리얼을 다룹니다. ASP.NET 핵심 마이크로서비스: 시작하기.

이전 블로그 게시물에서는 로컬 배포 및 개발 목적으로 docker-compose를 사용하여 Couchbase를 사용하는 ASP.NET Core 마이크로서비스를 만들었습니다. 프로덕션 준비가 완료되면, 서비스는 종종 다음과 같은 관리형 Kubernetes 서비스에 배포됩니다. AKS, EKS, GKE

이 ASP.NET Core Kubernetes 자습서에는 Azure AKS와 관련된 몇 가지 단계가 포함되어 있지만, 이 자료의 대부분은 모든 Kubernetes 클러스터에 적용할 수 있습니다.

ASP.NET Core Kubernetes 튜토리얼 개요

이 ASP.NET 코어 쿠버네티스 자습서에서는 이러한 단계를 안내해드리겠습니다:

  • 도커 이미지를 빌드하여 도커 허브로 푸시하기
  • Azure에서 AKS 클러스터 만들기
  • AKS에 ASP.NET Core 마이크로서비스 배포
  • 쿠버네티스 오퍼레이터를 사용하여 카우치베이스 서버를 배포합니다.

또한 선택 사항이지만 매우 유용한 몇 가지 주제를 다루려고 합니다:

  • DNS SRV를 사용하여 ASP.NET Core 마이크로서비스가 데이터베이스를 찾을 수 있도록 허용하기
  • AKS 파드에 대한 터널 액세스를 위해 kubectl로 포트 포워딩 설정하기
  • AKS에서 Kubernetes 대시보드 보기
  • ASP.NET Core 마이크로서비스를 인터넷에 노출하기 위해 Kubernetes에서 로드 밸런서 서비스 설정하기

이 튜토리얼을 최대한 활용하기 위한 전제 조건입니다:

  • 도커 설치, 도커 및 도커 허브에 대한 기본 지식
  • 반드시 필요한 것은 아니지만 비주얼 스튜디오가 설치되어 있어야 합니다.
  • Azure 계정(계정이 없는 경우 다음을 수행할 수 있습니다. 지금 가입하고 $200 크레딧 받기 를 무료로 다운로드하세요.) EKS, GKE 등을 사용하려는 경우에도 이 튜토리얼을 따라할 수 있지만 몇 가지 단계를 직접 대체해야 합니다.
  • kubectl(쿠버네티스용)이 설치됨

도커 이미지 빌드

쿠버네티스 배포는 컨테이너 이미지를 사용합니다. 프라이빗 컨테이너 레지스트리를 위한 많은 옵션이 있습니다( Azure 컨테이너 레지스트리), 하지만 이 튜토리얼에서는 간단하게 설명하기 위해 평범한 오래된 도커 허브.

먼저 이전 블로그 게시물에서 만든 ASP.NET 코어 마이크로서비스에서 Docker 이미지를 빌드하는 것으로 시작하겠습니다. Visual Studio에서 Docker파일을 마우스 오른쪽 버튼으로 클릭하고 "빌드 도커 이미지"를 선택하기만 하면 됩니다.

ASP.NET Core Kubernetes tutorial: Visual Studio Build Docker Image

이미지가 빌드되면 로컬 Docker 이미지 리포지토리에 표시됩니다. 명령줄에서 "docker images"를 사용하여 이 리포지토리를 볼 수 있습니다:

다음 단계는 다음과 같습니다. 이 이미지를 도커 허브로 푸시합니다. (이전에 Docker 허브를 사용해 본 적이 없는 경우 검토하세요). 저는 이미지를 Docker에 푸시했습니다. 도커 푸시 매트그로브/헬로마이크로서비스 명령을 실행한다. 대부분 이미지에 릴리스 번호를 태그하여 Kubernetes가 배포하려는 정확한 버전을 가져오는지 확인하고 싶을 것입니다.

이 단계를 건너뛰고 싶다면 제 Docker 이미지를 예로 사용할 수 있습니다: 매트그로브/헬로마이크로서비스.

배포를 위한 YAML 파일 작성

이제 Docker 이미지를 게시했으므로, Kubernetes 배포를 위한 YAML 파일 작성을 시작할 수 있습니다. 이 자습서에서는 Kubernetes에 대해 알아야 할 모든 것을 다루지는 않지만 가능한 한 주목할 만한 부분을 지적할 것입니다. 이 자습서에서는 Couchbase Operator와 함께 제공되는 YAML 파일과 함께 총 3개의 YAML 파일을 생성합니다.

이러한 각 YAML 파일은 쿠버네티스 리소스에 해당한다. 쿠버네티스는 클러스터에서 생성한 리소스에 따라 클러스터를 오케스트레이션합니다.

ASP.NET 코어 마이크로서비스 리소스와 카우치베이스 클러스터 리소스는 각각 하나 이상의 "pods" 를 생성하고 있습니다. 다른 유형의 리소스는 다음과 같습니다. "비밀" (민감한 정보를 관리 및 저장하기 위해) 및 "서비스" (포드 세트를 노출하기 위해) 및 기타 여러 가지를 사용할 수 있습니다.

ASP.NET 핵심 마이크로서비스

먼저 ASP.NET Core 마이크로서비스 배포를 위한 YAML 파일부터 만들어 보겠습니다:

hello-microservice.yaml에 대한 참고 사항:

  • spec.replicas: 이것은 쿠버네티스가 이 서비스의 파드 수를 생성할지 알려준다. 처음에는 1개로도 충분하지만, 확장함에 따라 더 많은 파드가 필요할 것입니다(그리고 나중에 다루게 될 LoadBalancer도 필요할 것입니다).
  • spec.template.spec.containers.image: 이것은 쿠버네티스에 어떤 이미지를 사용할지 알려준다. 제 경우에는 이 튜토리얼의 앞부분에서 빌드하고 Docker 허브에 배포한 매트그로브/헬로마이크로서비스가 사용됩니다.
  • 환경: 이는 각 컨테이너에 대한 환경 변수를 정의합니다. 이미지에서 이러한 자격 증명을 하드코딩하는 대신 이전 블로그 게시물에서 했던 것처럼 사용자 이름, 비밀번호 및 연결 문자열을 ASP.NET Core 마이크로서비스에 전달하고 있습니다. Couchbase__ConnectionString 및 DNS SRV에 대해서는 나중에 자세히 설명합니다.
  • Couchbase 클러스터가 다른 네임스페이스에 있는 경우 "service.namespace"를 사용할 수도 있습니다.

카우치베이스 클러스터

다음으로, 다음은 데이터베이스에 대한 YAML 파일입니다. 카우치베이스 쿠버네티스 운영자:

이 YAML 파일 자체만으로는 오퍼레이터를 사용하기에 충분하지 않지만, 오퍼레이터 설치는 이 튜토리얼의 뒷부분에서 설명할 것이다. 또한 Operator 패턴은 점점 더 일반화되고 있으며 Kubernetes에서 상태 저장 소프트웨어를 관리하는 효과적인 방법이지만, YAML은 사용 중인 데이터베이스에 따라 달라집니다(즉, 이 YAML은 Couchbase Server에서만 작동합니다).

couchbase-cluster.yaml에 대한 참고 사항:

  • spec.version사용할 Couchbase 컨테이너 이미지를 지정합니다. 저는 베타2 릴리스를 사용하고 있습니다. 이 글을 쓰는 현재 이 운영자는 Enterprise 버전에서만 작동합니다. 이는 곧 변경될 수 있습니다.
  • spec.cluster, spec.buckets, spec.serversCouchbase Server 클러스터에 대한 다양한 설정을 정의합니다. 제발 전체 목록은 문서를 참조하세요. 설정의 일부입니다. 이 예제 파일은 일부만 다루고 있습니다.

카우치베이스 "비밀"

또한 "시크릿" 리소스도 생성했습니다. 시크릿은 자격 증명, 비밀번호, 권한 토큰 등과 같은 구성 정보를 저장하고 관리할 수 있는 곳으로, Kubernetes API 자체에서 사용할 수 있습니다.

이 비밀에는 Couchbase(및 ASP.NET Core 마이크로서비스)에서 사용하려는 자격 증명이 포함되어 있습니다. 값은 base64로 인코딩됩니다(주석의 실제 값). 이 예제 자격 증명은 실제 배포에 충분하지 않으므로 추측하기 어려운 것으로 변경하세요.

참고 메타데이터.이름 는 "cb-hellomicroservices-auth"입니다. 이 시크릿이 어떻게 참조되는지 보려면 hello-microservice.yaml 및 couchbase-cluster.yaml을 다시 살펴보세요.

DNS SRV

hello-microservice.yaml을 다시 살펴보세요. 아래 환경에서 "Couchbase__ConnectionString" 및 "couchbase://cb-hellomicroservices-srv"의 이름/값 쌍을 확인할 수 있습니다. ASP.NET Core IP 주소나 Couchbase Server 노드의 URL을 제공하는 대신, 연결 문자열을 사용하여 이를 DNS SRV 항목.

Couchbase 클러스터에서 Couchbase를 실행하는 실제 파드는 정기적으로 이름을 변경할 가능성이 있습니다. 따라서 DNS SRV를 사용하여 Couchbase 서비스를 찾는 것이 좋습니다. 다행히도 Couchbase 자율 운영자는 DNS SRV 항목을 자동으로 생성합니다.

곧 쿠버네티스 대시보드에서 확인할 수 있게 되겠지만, 그 동안은 Couchbase 클러스터 이름에 "-srv"를 더한 이름이라는 점에 유의하세요. 따라서 저희의 경우, "cb-hellomicroservices-srv"가 됩니다.

이전 블로그 게시물 이후 ASP.NET 코어 마이크로서비스에 한 가지 사소한 변경을 했습니다: 이제 저는 Couchbase.Extensions.DnsDiscovery 라이브러리.

NuGet에서 이 라이브러리를 추가하고 앱설정.json에서 Server 대신 ConnectionString을 사용하는 것 외에 변경해야 할 다른 사항은 다음과 같습니다. 카우치베이스Dns디스커버리 추가 내에서 서비스 구성 메서드를 사용합니다.

아주 간단합니다. DNS SRV에 대한 자세한 내용은 다음을 확인하세요. SRV 레코드 를 참조하세요.

AKS에 배포

이제 AKS에 배포할 준비가 되었습니다. 지금까지 준비된 내용은 다음과 같습니다:

  1. 도커 허브의 ASP.NET 코어 도커 이미지
  2. ASP.NET Core 배포용 YAML 파일
  3. 카우치베이스 클러스터 배포를 위한 YAML 파일
  4. 카우치베이스 시크릿을 위한 YAML 파일(2와 3에서 참조)

AKS에 배포하기 위해 빠른 시작: Azure CLI를 사용하여 Azure Kubernetes Service 클러스터 배포하기 를 참조하세요. 다음은 제가 수행한 단계에 대한 간략한 요약입니다:

(로컬 명령줄을 사용하려면 다음이 있는지 확인하세요. azure-cli 가 설치되어 있어야 합니다. 그렇지 않은 경우 Azure 클라우드 셸).

먼저 Azure에 로그인합니다: az 로그인. 웹 브라우저에 자격 증명을 입력하라는 메시지가 표시됩니다.

로그인한 후 먼저 '리소스 그룹'을 만듭니다. 이 그룹은 Azure 내의 조직 그룹입니다. 데이터 센터를 지정합니다(저는 eastus를 사용했습니다).

az 그룹 생성 --이름 helloMicroserviceGroup --location eastus

다음으로 방금 만든 리소스 그룹을 사용하여 AKS 클러스터를 만듭니다. 이를 위한 많은 옵션이 있습니다. 이 연습을 비교적 저렴하고 간단하게 유지하기 위해, 저는 Standard_B2s VM 크기를 사용하여 3개의 노드를 생성하기로 했습니다. Couchbase의 프로덕션 배포의 경우, 더 강력한 크기가 필요하거나 원할 것입니다.

az aks create --resource-group helloMicroserviceGroup --name helloMicroserviceAks --node-count 3 --node-vm-size Standard_B2s --enable-addons monitoring --generate-ssh-keys

이 단계는 실행하는 데 시간이 다소 걸립니다. Azure에서 이 Kubernetes AKS 클러스터를 설정하는 데 약 10분 정도 소요될 것으로 예상합니다.

클러스터가 생성되면 자격 증명 가져오기 를 사용하여 kubectl이 사용할 클러스터를 알린다.

az aks get-credentials --resource-group helloMicroserviceGroup --name helloMicroserviceAks

이제 다음을 수행해야 할 때입니다. create 일부 쿠버네티스 리소스. 처음 6개의 YAML 파일은 "Kubernetes" 아래에서 다운로드할 수 있습니다. couchbase.com/downloads.

그런 다음 이 튜토리얼에서 만든 세 개의 YAML 파일을 사용합니다:

쿠버네티스 파드의 상태를 확인하려면, 다음을 사용한다. kubectl 파드 가져오기. Couchbase 포드가 준비되는 데 몇 분 정도 걸립니다.

포트 포워딩

위의 배포에서, Kubernetes 배포 중 어떤 것도 실제로 Kubernetes 외부에 노출되지 않습니다. 마이크로서비스가 작동하는지 확인할 수 있는 한 가지 방법은 kubectl 포트 포워드 명령을 실행합니다. 그러면 지정된 파드에 로컬호스트 "터널"이 생성됩니다.

예를 들어, 로컬 호스트 포트 5000에서 포트 80에서 실행되는 ASP.NET Core 마이크로서비스로 터널을 만들어 보겠습니다:

kubectl 포트 포워드 5000:80

이제 브라우저에서 http://locahost:5000 을 사용하여 마이크로서비스에 액세스할 수 있습니다.

마찬가지로 기본 제공 웹 기반 Couchbase Server UI로 터널을 설정할 수 있습니다:

kubectl 포트 포워드 CB-헬로마이크로서비스-0000 8091:8091

이제 http://localhost:8091 을 사용하여 Couchbase 클러스터에 액세스할 수 있습니다.

포트 포워드 명령은 개발자와 운영팀에 도움이 될 수 있지만, 계속 읽으면서 Kubernetes 서비스를 인터넷에 노출하는 방법을 알아보세요.

로드밸런서를 통한 서비스 노출

포트 포워딩을 통해 Kubernetes 클러스터 외부의 파드에 액세스할 수 있지만, 파드가 불가피하게 충돌하거나 죽고 새로운 IP 주소, 파드 이름 등으로 다시 태어나는 경우 어떻게 될까요? 쿠버네티스를 사용하면 다음을 수행할 수 있습니다. "서비스" 만들기 를 사용하여 하나 이상의 파드를 논리적으로 처리할 수 있습니다.

서비스는 배포와 마찬가지로 YAML 파일에서 지정할 수 있습니다.

다음을 사용하여 서비스를 만들 수도 있습니다. kubectl 노출. 예를 들어, 배포에서 생성한 ASP.NET Core 포드에 대한 액세스를 제공하는 로드 밸런서 서비스를 노출할 수 있습니다:

kubectl 노출 배포 헬로-마이크로서비스-앱-디플로이먼트 --port=80 --type=로드밸런서

서비스가 생성되면 외부 IP 주소가 생성됩니다. 다음을 사용하여 서비스 정보를 볼 수 있습니다. kubectl 서비스 받기.

웹 브라우저에서 해당 IP 주소(이 예에서는 20.NN.NN.21)를 열면 배포의 파드에 대한 로드 밸런싱된 액세스가 이루어집니다. 확장 또는 축소(즉, 복제본 수를 변경)해도 서비스는 동일하게 유지되며 계속 액세스를 제공합니다.

Kubernetes 대시보드

쿠버네티스에는 수많은 명령줄 명령을 기억할 필요 없이 큰 그림을 시각화하는 데 유용한 자체 UI 대시보드가 있습니다. 대시보드에 액세스하려면 AKS용 Kubernetes 대시보드:

액세스를 활성화하기 위해 Kubernetes 대시보드에 대한 ClusterRoleBinding을 생성합니다:

kubectl 생성 클러스터 역할 바인딩 kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

그런 다음 Azure의 aks 찾아보기를 사용하여 대시보드를 시작합니다:

az aks 찾아보기 --자원 그룹 헬로마이크로서비스그룹 --이름 헬로마이크로서비스Aks

이렇게 하면 웹 브라우저가 자동으로 대시보드를 열도록 트리거됩니다:

Kubernetes Dashboard on AKS

대시보드에서 모든 포드, 서비스, 시크릿, 노드 등을 볼 수 있습니다.

다음 단계

AKS를 사용 중이라면 완료되면 리소스 그룹을 제거하는 것을 잊지 마세요. 그렇지 않으면 Azure 계정에서 계속 실행되어 컴퓨팅 시간이 청구됩니다. 이 자습서에서 하나의 명령으로 전체 리소스 그룹을 제거할 수 있습니다:

az 그룹 삭제 --이름 헬로마이크로서비스그룹

이 ASP.NET Core Kubernetes 자습서에서는 많은 내용을 다루었지만, 올바른 방향을 제시하고 "안녕하세요, 세상"이라는 예제로 시작하기에 충분했기를 바랍니다.

지난 블로그 게시물에서와 마찬가지로, 이 ASP.NET Core Kubernetes 튜토리얼은 Twitch의 두 라이브 코딩 스트림의 산물입니다. 다음을 볼 수 있습니다. 파트 1 그리고 파트 2 에서 확인하세요. 궁금한 점이 있으시다면 트위치 라이브 스트리밍 다음에 채팅하세요!

쿠버네티스는 매우 광범위한 주제입니다. 여기서부터 다양한 방향으로 나아갈 수 있습니다. 다음은 확인해 볼 수 있는 몇 가지 링크입니다:

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 매튜 그로브스

Matthew D. Groves는 코딩을 좋아하는 사람입니다. C#, jQuery, PHP 등 무엇이든 풀 리퀘스트를 제출할 정도로 코딩을 좋아합니다. 90년대에 부모님의 피자 가게를 위해 QuickBASIC POS 앱을 만든 이후로 전문적으로 코딩을 해왔습니다. 현재 Couchbase의 선임 제품 마케팅 관리자로 일하고 있습니다. 여가 시간에는 가족과 함께 축구 경기를 관람하고 개발자 커뮤니티에 참여하며 시간을 보냅니다. 그는 .NET의 AOP, .NET의 프로 마이크로서비스, Pluralsight 저자, Microsoft MVP의 저자이기도 합니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.