Я с трудом настраиваю кафку на gke и хотел бы узнать, как лучше ее настроить? - PullRequest
0 голосов
/ 22 мая 2019

Я пытался использовать набор состояний для развертывания сервера zookeeper и Kafka в кластере в gke, но связь между Kafka и zookeeper завершается с ошибкой в ​​журналах.Я хотел бы знать, что было бы самым простым способом настроить Kafka в kubernetes.

Я пробовал следующие конфигурации и вижу, что Kafka не может связаться с zookeeper, но я не уверен, почему?Я знаю, что мне может понадобиться безголовое обслуживание, потому что общение осуществляется Кафкой и самим зоопарком.

Для Zookeeper

apiVersion: v1
kind: Service
metadata:
  name: zookeeper
spec:
  type: LoadBalancer
  selector:
    app: zookeeper
  ports:
  - port: 2181
    targetPort: client
    name: zk-port
  - port: 2888
    targetPort: leader
    name: zk-leader
  - port: 3888
    targetPort: election
    name: zk-election
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zookeeper
spec:
  replicas: 3
  selector:
    matchLabels:
      app: zookeeper
  serviceName: zookeeper
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: zookeeper
    spec:
      containers:
        - name: zk-pod
          image: zookeeper:latest
          imagePullPolicy: Always
          ports:
            - name: client
              containerPort: 2181
            - name: leader
              containerPort: 2888
            - name: election
              containerPort: 3888
          env:
            - name: ZOO_MY_ID
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: ZOO_TICK_TIME
              value: "2000"
            - name: ZOO_INIT_LIMIT
              value: "5"
            - name: ZOO_SYNC_LIMIT
              value: "2"
            - name: ZOO_SERVERS
              value: zookeeper:2888:3888

Для Kafka

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: kafka
spec:
  replicas: 3
  selector:
    matchLabels:
      app: kafka
  serviceName: kafka-svc
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: kafka
    spec:
      containers:
      - name: kafka
        image: confluentinc/cp-kafka:latest
        ports:
          - containerPort: 9092
            name: client
        env:
          - name: KAFKA_ZOOKEEPER_CONNECT
            value: zookeeper:2181
          - name: KAFKA_ADVERTISED_LISTENERS
            value: kafka.default.svc.cluster.local:9092
---
apiVersion: v1
kind: Service
metadata:
  name: kafka-svc
spec:
  type: LoadBalancer
  selector:
    app: kafka
  ports:
  - port: 9092
    targetPort: client
    name: kfk-port
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: kafka-pdb
spec:
  selector:
    matchLabels:
      app: kafka
  minAvailable: 2

Я хотел бы иметь возможность отправлять сообщенияв тему и иметь возможность прочитать их обратно.Я использовал kafkacat для проверки соединения.

1 Ответ

0 голосов
/ 22 мая 2019

Это одно из ограничений, которые указаны в Официальной документации Kubernetes о StateFulsets ,

  • StatefulSets в настоящее время требует, чтобы служба безголовых отвечала за идентификацию сети модулей. Вы несете ответственность за создание этой Услуги.

Итак, как вы упомянули, вам нужен Безголовый сервис , и вы можете легко добавить yaml безголового сервиса в верхнюю часть вашей конфигурации, как показано ниже для обоих ваших StatefulSets:

apiVersion: v1
kind: Service
metadata:
  name: zookeeper
  labels:
    app: zookeeper
spec:
  ports:
  - port: 2181 
    name: someport
  clusterIP: None
  selector:
    app: zookeeper

Надеюсь, это поможет!

...