Kubernetes에서 Pulsar 시작하기

Kubernetes에서 Pulsar 시작하기 (Get started in Kubernetes)

tip 이 페이지는 더 이상 업데이트되지 않는 문서예요. Kubernetes에서 Pulsar를 실행하는 최신·완전한 정보는 quick start guide를 참고해요.

이 섹션은 Helm으로 Kubernetes에 Apache Pulsar를 설치하고 실행하는 모든 단계를 안내해요. 다음 내용을 포함해요.

  • Helm을 사용해 Kubernetes에 Apache Pulsar 설치
  • Apache Pulsar 시작 및 중지
  • pulsar-admin으로 토픽 생성
  • Pulsar 클라이언트로 메시지 생성·소비
  • Prometheus와 Grafana로 Apache Pulsar 상태 모니터링

프로덕션용 Pulsar 클러스터 배포에 대해서는 Pulsar Helm chart 구성·설치 문서를 읽어봐요.

출처: 문서

본문

사전 준비 (Prerequisite)

  • Kubernetes 서버 1.18.0+
  • kubectl 1.18.0+
  • Helm 3.0+

tip 다음 단계 중 2단계와 3단계는 개발자용이고, 4단계와 5단계는 관리자용이에요.

0단계: Kubernetes 클러스터 준비 (Prepare a Kubernetes cluster)

Pulsar Helm chart를 설치하기 전에 Kubernetes 클러스터를 만들어야 해요. 안내에 따라 Kubernetes 클러스터를 준비할 수 있어요.

이 빠른 시작 가이드에서는 Minikube를 사용해요. Kubernetes 클러스터를 준비하려면 다음 단계를 따르세요.

  1. Minikube에 Kubernetes 클러스터를 만들어요.
minikube start --memory=8192 --cpus=4 --kubernetes-version=<k8s-version>

<k8s-version>Minikube 설치가 지원하는 Kubernetes 버전 중 아무 것이나 될 수 있어요. 예: v1.16.1.

  1. kubectl이 Minikube를 사용하도록 설정해요.
kubectl config use-context minikube
  1. Minikube의 로컬 Kubernetes 클러스터와 함께 Kubernetes Dashboard를 사용하려면 아래 명령을 입력해요.
minikube dashboard

이 명령은 브라우저에서 웹페이지가 자동으로 열리게 해요.

1단계: Pulsar Helm chart 설치 (Install Pulsar Helm chart)

  1. Pulsar charts 저장소를 추가해요.
helm repo add apachepulsar https://pulsar.apache.org/charts
helm repo update
  1. Pulsar Helm chart 저장소를 클론해요.
git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart
  1. prepare_helm_release.sh 스크립트를 실행해 Apache Pulsar Helm chart 설치에 필요한 시크릿을 만들어요. Grafana 대시보드와 Pulsar Manager에 로그인할 때 사용자명 pulsar, 비밀번호 pulsar를 사용해요.
./scripts/pulsar/prepare_helm_release.sh \
    -n pulsar \
    -k pulsar-mini \
    -c
  1. Pulsar Helm chart를 사용해 Pulsar 클러스터를 Kubernetes에 설치해요.
helm install \
    --values examples/values-minikube.yaml \
    --namespace pulsar \
    pulsar-mini apachepulsar/pulsar
  1. 모든 파드의 상태를 확인해요.
kubectl get pods -n pulsar

모든 파드가 성공적으로 시작되면 STATUSRunning 또는 Completed로 바뀐 것을 볼 수 있어요.

출력 (Output)

NAME                                         READY   STATUS      RESTARTS   AGE
pulsar-mini-bookie-0                         1/1     Running     0          9m27s
pulsar-mini-bookie-init-5gphs                0/1     Completed   0          9m27s
pulsar-mini-broker-0                         1/1     Running     0          9m27s
pulsar-mini-grafana-6b7bcc64c7-4tkxd         1/1     Running     0          9m27s
pulsar-mini-prometheus-5fcf5dd84c-w8mgz      1/1     Running     0          9m27s
pulsar-mini-proxy-0                          1/1     Running     0          9m27s
pulsar-mini-pulsar-init-t7cqt                0/1     Completed   0          9m27s
pulsar-mini-pulsar-manager-9bcbb4d9f-htpcs   1/1     Running     0          9m27s
pulsar-mini-toolset-0                        1/1     Running     0          9m27s
pulsar-mini-zookeeper-0                      1/1     Running     0          9m27s
  1. pulsar 네임스페이스의 모든 서비스 상태를 확인해요.
kubectl get services -n pulsar

출력 (Output)

NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
pulsar-mini-bookie           ClusterIP      None             <none>        3181/TCP,8000/TCP             11m
pulsar-mini-broker           ClusterIP      None             <none>        8080/TCP,6650/TCP             11m
pulsar-mini-grafana          LoadBalancer   10.106.141.246   <pending>     3000:31905/TCP                11m
pulsar-mini-prometheus       ClusterIP      None             <none>        9090/TCP                      11m
pulsar-mini-proxy            LoadBalancer   10.97.240.109    <pending>     80:32305/TCP,6650:31816/TCP   11m
pulsar-mini-pulsar-manager   LoadBalancer   10.103.192.175   <pending>     9527:30190/TCP                11m
pulsar-mini-toolset          ClusterIP      None             <none>        <none>                        11m
pulsar-mini-zookeeper        ClusterIP      None             <none>        2888/TCP,3888/TCP,2181/TCP    11m

2단계: pulsar-admin으로 테넌트/네임스페이스/토픽 생성 (Use pulsar-admin to create Pulsar tenants/namespaces/topics)

pulsar-admin은 Pulsar의 CLI(커맨드라인 인터페이스) 도구예요. 이 단계에서는 pulsar-admin으로 테넌트, 네임스페이스, 토픽 같은 리소스를 만들 수 있어요.

  1. toolset 컨테이너에 들어가요.
kubectl exec -it -n pulsar pulsar-mini-toolset-0 -- /bin/bash
  1. toolset 컨테이너에서 apache라는 테넌트를 만들어요.
bin/pulsar-admin tenants create apache

그런 다음 테넌트 목록을 조회해 테넌트가 성공적으로 생성됐는지 확인해요.

bin/pulsar-admin tenants list

다음과 비슷한 출력을 볼 수 있어요. apache 테넌트가 성공적으로 생성된 것이에요.

"apache"
"public"
"pulsar"
  1. toolset 컨테이너에서 apache 테넌트에 pulsar라는 네임스페이스를 만들어요.
bin/pulsar-admin namespaces create apache/pulsar

그런 다음 apache 테넌트의 네임스페이스 목록을 조회해 네임스페이스가 성공적으로 생성됐는지 확인해요.

bin/pulsar-admin namespaces list apache

다음과 비슷한 출력을 볼 수 있어요. apache/pulsar 네임스페이스가 성공적으로 생성된 것이에요.

"apache/pulsar"
  1. toolset 컨테이너에서 apache/pulsar 네임스페이스에 4개 파티션을 가진 test-topic 토픽을 만들어요.
bin/pulsar-admin topics create-partitioned-topic apache/pulsar/test-topic -p 4
  1. toolset 컨테이너에서 apache/pulsar 네임스페이스의 모든 파티셔닝된 토픽을 조회해요.
bin/pulsar-admin topics list-partitioned-topics apache/pulsar

그러면 apache/pulsar 네임스페이스의 모든 파티셔닝된 토픽을 볼 수 있어요.

"persistent://apache/pulsar/test-topic"

3단계: Pulsar 클라이언트로 메시지 생성·소비 (Use Pulsar client to produce and consume messages)

Pulsar 클라이언트로 프로듀서와 컨슈머를 만들어 메시지를 생성·소비할 수 있어요.

기본적으로 Pulsar Helm chart는 Pulsar 클러스터를 Kubernetes LoadBalancer로 노출해요. Minikube에서는 다음 명령으로 프록시 서비스를 확인할 수 있어요.

kubectl get services -n pulsar | grep pulsar-mini-proxy

다음과 비슷한 출력을 볼 수 있어요.

pulsar-mini-proxy            LoadBalancer   10.97.240.109    <pending>     80:32305/TCP,6650:31816/TCP   28m

이 출력은 Pulsar 클러스터의 바이너리 포트와 HTTP 포트가 매핑된 노드 포트가 무엇인지 알려줘요. 80: 뒤의 포트는 HTTP 포트이고, 6650: 뒤의 포트는 바이너리 포트예요.

그런 다음 다음 명령으로 Minikube 서버의 IP 주소와 노출된 포트를 찾을 수 있어요.

minikube service pulsar-mini-proxy -n pulsar

출력 (Output)

|-----------|-------------------|-------------|-------------------------|
| NAMESPACE |       NAME        | TARGET PORT |           URL           |
|-----------|-------------------|-------------|-------------------------|
| pulsar    | pulsar-mini-proxy | http/80     | http://172.17.0.4:32305 |
|           |                   | pulsar/6650 | http://172.17.0.4:31816 |
|-----------|-------------------|-------------|-------------------------|
🏃  Starting tunnel for service pulsar-mini-proxy.
|-----------|-------------------|-------------|------------------------|
| NAMESPACE |       NAME        | TARGET PORT |          URL           |
|-----------|-------------------|-------------|------------------------|
| pulsar    | pulsar-mini-proxy |             | http://127.0.0.1:61853 |
|           |                   |             | http://127.0.0.1:61854 |
|-----------|-------------------|-------------|------------------------|

이 시점에서 Pulsar 클라이언트에 연결할 서비스 URL을 얻을 수 있어요. URL 예시는 다음과 같아요.

webServiceUrl=http://127.0.0.1:61853/
brokerServiceUrl=pulsar://127.0.0.1:61854/

그러면 다음 단계를 진행할 수 있어요.

  1. 다운로드 페이지에서 Apache Pulsar tarball을 내려받아요.
  2. 다운로드한 파일에 따라 tarball을 압축 해제해요.
tar -xf <file-name>.tar.gz
  1. PULSAR_HOME을 노출해요. (1) 압축 해제한 다운로드 파일의 디렉터리로 들어가요. (2) PULSAR_HOME을 환경 변수로 설정해요.
export PULSAR_HOME=$(pwd)
  1. Pulsar 클라이언트를 구성해요. ${PULSAR_HOME}/conf/client.conf 파일에서 webServiceUrlbrokerServiceUrl을 위 단계에서 얻은 서비스 URL로 교체해요.
  2. apache/pulsar/test-topic에서 메시지를 소비할 구독을 만들어요.
bin/pulsar-client consume -s sub apache/pulsar/test-topic  -n 0
  1. 새 터미널을 열고, 그 터미널에서 프로듀서를 만들어 test-topic 토픽에 10개의 메시지를 보내요.
bin/pulsar-client produce apache/pulsar/test-topic  -m "---------hello apache pulsar-------" -n 10
  1. 결과를 확인해요.
  • 프로듀서 측

출력 (Output)

메시지가 성공적으로 생성됐어요.

18:15:15.489 [main] INFO  org.apache.pulsar.client.cli.PulsarClientTool - 10 messages successfully produced
  • 컨슈머 측

출력 (Output)

동시에 아래처럼 메시지를 받을 수 있어요.

----- got message --------------hello apache pulsar------------ got message --------------hello apache pulsar------------ got message --------------hello apache pulsar------------ got message --------------hello apache pulsar------------ got message --------------hello apache pulsar------------ got message --------------hello apache pulsar------------ got message --------------hello apache pulsar------------ got message --------------hello apache pulsar------------ got message --------------hello apache pulsar------------ got message --------------hello apache pulsar-------

4단계: Pulsar Manager로 클러스터 관리 (Use Pulsar Manager to manage the cluster)

Pulsar Manager는 Pulsar를 관리·모니터링하는 웹 기반 GUI 관리 도구예요.

  1. 기본적으로 Pulsar Manager는 별도의 LoadBalancer로 노출돼요. 다음 명령으로 Pulsar Manager UI를 열 수 있어요.
minikube service -n pulsar pulsar-mini-pulsar-manager
  1. 브라우저에서 Pulsar Manager UI가 열릴 거예요. 사용자명 pulsar, 비밀번호 pulsar로 Pulsar Manager에 로그인할 수 있어요.
  2. Pulsar Manager UI에서 환경(environment)을 만들 수 있어요.
    • 왼쪽 위의 New Environment 버튼을 클릭해요.
    • 팝업 창의 Environment Name 필드에 pulsar-mini를 입력해요.
    • 팝업 창의 Service URL 필드에 http://pulsar-mini-broker:8080를 입력해요.
    • 팝업 창에서 Confirm 버튼을 클릭해요.
  3. 환경을 성공적으로 만든 뒤에는 해당 환경의 tenants 페이지로 이동해요. 그런 다음 Pulsar Manager로 tenants, namespaces, topics를 만들 수 있어요.

5단계: Prometheus와 Grafana로 클러스터 모니터링 (Use Prometheus and Grafana to monitor cluster)

Grafana는 시계열 데이터를 대시보드로 시각화하는 데 쓸 수 있는 오픈소스 시각화 도구예요.

  1. 기본적으로 Grafana는 별도의 LoadBalancer로 노출돼요. 다음 명령으로 Grafana UI를 열 수 있어요.
minikube service pulsar-mini-grafana -n pulsar
  1. 브라우저에서 Grafana UI가 열려요. 사용자명 pulsar, 비밀번호 pulsar로 Grafana 대시보드에 로그인할 수 있어요.
  2. Pulsar 클러스터의 여러 구성 요소에 대한 대시보드를 볼 수 있어요.

더 알아보기 (Learn more)