카테고리 없음

주키퍼 gpt

흰곰곰 2025. 2. 11. 13:34
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: kafka
  labels:
    service: kafka
spec:
  serviceName: kafka
  replicas: 3  # Kafka 클러스터 노드 수
  selector:
    matchLabels:
      service: kafka
  template:
    metadata:
      labels:
        service: kafka
    spec:
      securityContext:
        fsGroup: 1000
      enableServiceLinks: false
      containers:
        - name: kafka
          image: confluentinc/cp-kafka:7.0.1
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 9092
          volumeMounts:
            - mountPath: /var/lib/kafka/
              name: kafka-data
          command:
            - "sh"
            - "-c"
            - |
              # 1️⃣ KAFKA_NODE_ID 설정 (Pod 이름에서 숫자 추출)
              export KAFKA_NODE_ID=$(hostname | awk -F'-' '{print $NF}')
              
              # 2️⃣ 클러스터 ID가 없으면 생성
              if [ ! -f "/var/lib/kafka/meta.properties" ]; then
                export KAFKA_CLUSTER_ID=$(kafka-storage random-uuid)
                kafka-storage format --ignore-formatted --cluster-id $KAFKA_CLUSTER_ID --config /etc/kafka/kafka.properties
              fi

              # 3️⃣ Kafka 환경 변수 설정
              export KAFKA_LOG_DIRS="/var/lib/kafka/data"
              export KAFKA_PROCESS_ROLES="broker,controller"
              export KAFKA_LISTENERS="PLAINTEXT://:9092,CONTROLLER://:9093"
              export KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://:9092"
              export KAFKA_CONTROLLER_QUORUM_VOTERS="0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093"
              export KAFKA_INTER_BROKER_LISTENER_NAME="PLAINTEXT"
              export KAFKA_LISTENER_SECURITY_PROTOCOL_MAP="PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT"

              # 4️⃣ Kafka 실행
              /etc/confluent/docker/run
      restartPolicy: Always
  volumeClaimTemplates:
    - metadata:
        name: kafka-data
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: kafka
  labels:
    service: kafka
spec:
  serviceName: kafka
  replicas: 3  # Kafka 클러스터 노드 수
  selector:
    matchLabels:
      service: kafka
  template:
    metadata:
      labels:
        service: kafka
    spec:
      securityContext:
        fsGroup: 1000
      enableServiceLinks: false
      containers:
        - name: kafka
          image: confluentinc/cp-kafka:7.0.1
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 9092
          volumeMounts:
            - mountPath: /var/lib/kafka/
              name: kafka-data
          command:
            - "sh"
            - "-c"
            - |
              # 1️⃣ KAFKA_NODE_ID 설정 (Pod 이름에서 숫자 추출)
              export KAFKA_NODE_ID=$(hostname | awk -F'-' '{print $NF}')

              # 2️⃣ KRaft 설정 파일 생성
              cat <<EOF > /etc/kafka/kraft.properties
              node.id=$KAFKA_NODE_ID
              process.roles=broker,controller
              listeners=PLAINTEXT://:9092,CONTROLLER://:9093
              advertised.listeners=PLAINTEXT://:9092
              controller.quorum.voters=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093
              log.dirs=/var/lib/kafka/data
              inter.broker.listener.name=PLAINTEXT
              listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
              EOF

              # 3️⃣ 클러스터 ID가 없으면 생성
              if [ ! -f "/var/lib/kafka/meta.properties" ]; then
                export KAFKA_CLUSTER_ID=$(kafka-storage random-uuid)
                kafka-storage format --ignore-formatted --cluster-id $KAFKA_CLUSTER_ID --config /etc/kafka/kraft.properties
              fi

              # 4️⃣ Kafka 실행
              /etc/confluent/docker/run
      restartPolicy: Always
  volumeClaimTemplates:
    - metadata:
        name: kafka-data
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi