May 25, 2025

[Home-K8S] #6 zookeeper 설치

[Home-K8S] #6  zookeeper 설치

zookeeper를 k8s에 설치하는 방법은 k8s 공식 문서에서도 제공하고 있습니다.

분산 시스템 코디네이터 ZooKeeper 실행하기
이 튜토리얼은 아파치 ZooKeeper 쿠버네티스에서 스테이트풀셋과 PodDisruptionBudget과 파드안티어피니티(PodAntiAffinity)를 이용한 Apache Zookeeper 실행을 설명한다. 시작하기 전에 이 튜토리얼을 시작하기 전에 다음 쿠버네티스 개념에 친숙해야 한다. 파드 클러스터 DNS 헤드리스 서비스 퍼시스턴트볼륨 퍼시스턴트볼륨 프로비저닝 스테이트풀셋 PodDisruptionBudget 파드안티어피니티 kubectl CLI 반드시 최소한 4개의 노드가 있는 클러스터가 필요하며, 각 노드는 적어도 2 개의 CPU와 4 GiB 메모리가 필요하다. 이 튜토리얼에서 클러스터 노드를 통제(cordon)하고 비우게(drain) 할 것이다. 이것은 클러스터를 종료하여 노드의 모든 파드를 축출(evict)하는 것으로, 모든 파드는 임시로 언스케줄된다는 의미이다.

똑같이 진행하면 되지만, k8s를 local에 구성해서 사용하는 분들은 잘 되지 않을 수 있습니다.

기본적으로 cloud에서 사용하는 k8s 서비스에서는 volume을 제공해주고, 기본 storageclass도 잡혀 있습니다. 그런데 local에서 구성하게 되면 default storageclass가 없어서 Volume이 생성되지 않습니다.

  volumeClaimTemplates:
  - metadata:
      name: datadir
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

volume을 생성해서 붙여줘야 하는데, pv를 만들어서 넣어줘도 되지만, local-host-provisioner를 구성해서 사용해도 됩니다. 다음 포스팅에 작성하겠습니다.

1 Node 1 Pod

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
            - key: "app"
              operator: In
              values:
              - zk
        topologyKey: "kubernetes.io/hostname"

zk Pod가 있는 노드에는 Pod를 생성하지 않습니다.

zookeeper

zookeeper는 분산된 서비스에서 정보를 공유하고 상태를 체크하는 저장소입니다.
서비스가 본인의 상태나 구성 등을 zookeeper에 key-value 기반으로 저장할 수 있습니다.

이러한 상태 저장으로 각 서버들이 내용을 공유하는 방법도 있지만,
다중 노드에서 리더를 채택하는 과정으로 사용됩니다.

리더 선출을 사용하는 방법을 Python 코드르 사용해서 다음 포스트에서 보여드리겠습니다.

Comments