Разоблачение стручка в окружающую среду для легко развивающихся целей? - PullRequest
0 голосов
/ 13 января 2020

Я сейчас работаю с kubernetes и пытаюсь сделать процесс разработки таким, чтобы разработчик мог получить доступ к службам в локальном кластере kubernetes? Я хотел бы, чтобы все было просто, и на данный момент попробовал kubectl port-forward kafka 10000:9092, но, похоже, это не открывало модуль для localhost: 10000 ..

Я попытался преобразовать службу kafka в нодпорт по-прежнему безуспешно - единственный способ получить к нему доступ - это создать свое приложение как докеризованное приложение и запустить приложение в контейнере docker - это означает, что запуск exe-файла не будет соединяться с ним, а будет выполняться с использованием docker сделает это работает.

Я пробовал прокси Kubectl - который тоже не работает - я не могу пропинговать clusterIp.

Я не пробовал с ingress или loadbalancer, так как я нахожу это немного слишком сложный, учитывая, что это только для целей разработки, а не что-то, что должно быть «безопасным» для производства ..

Как мне легко предоставить сервис kafka, чтобы консольное приложение на моем ноутбуке работало локально с кластером kubernetes можете получить к нему доступ?

apiVersion: v1
kind: Service
metadata:
  name: kafka-headless
spec:
  clusterIP: None
  ports:
  - name: broker
    port: 9092
    protocol: TCP
    targetPort: 9092
  selector:
    app: kafka
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
  name: kafka
spec:
  ports:
  - name: broker
    port: 9092
    protocol: TCP
    targetPort: 9092
  selector:
    app: kafka
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: kafka
  name: kafka
spec:
  podManagementPolicy: OrderedReady
  replicas: 1
  revisionHistoryLimit: 1
  selector:
    matchLabels:
      app: kafka
  serviceName: kafka-headless
  template:
    metadata:
      labels:
        app: kafka
    spec:
      containers:
      - command:
        - sh
        - -exc
        - |
          unset KAFKA_PORT && \
          export KAFKA_BROKER_ID=${HOSTNAME##*-} && \
          export KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://${POD_IP}:9092 && \
          exec /etc/confluent/docker/run
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.podIP
        - name: KAFKA_HEAP_OPTS
          value: -Xmx1G -Xms1G
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: leader-zookeeper:2181
        - name: KAFKA_LOG_DIRS
          value: /opt/kafka/data/logs
        - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
          value: "1"
        image: confluentinc/cp-kafka:latest
        imagePullPolicy: IfNotPresent
        livenessProbe:
          exec:
            command:
            - sh
            - -ec
            - /usr/bin/jps | /bin/grep -q SupportedKafka
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        name: kafka-broker
        readinessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: kafka
          timeoutSeconds: 5
        ports:
        - containerPort: 9092
          name: kafka
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /opt/kafka/data
          name: datadir
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 60
  updateStrategy:
    type: OnDelete
  volumeClaimTemplates:
  - metadata:
      name: datadir
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  labels:
    app: kafka-pdb
  name: kafka-pdb
spec:
  maxUnavailable: 0
  selector:
    matchLabels:
      app: kafka
---

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Если я вас правильно понимаю, у меня есть несколько дополнительных опций для проверки:

  1. В этом ответе используется идея externalTrafficPolicy: Local наряду с другими возможными решениями.

  2. Я вижу из комментариев, что вы используете Docker Рабочий стол для Windows. Вы можете попробовать использовать сервис type: LoadBalancer вместо ClusterIP или NodePort. Я знаю, что это может звучать странно, но я видел несколько примеров , подобных этому , показывающих, что это действительно работает.

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

Пожалуйста, дайте мне знать, если это помогло.

0 голосов
/ 13 января 2020

Для переноса на службу, вам необходимо использовать svc/ перед именем. Таким образом, ваша команда будет kubectl port-forward svc/kafka 10000:9092 или kubectl port-forward kafka-0 10000:9092

При Windows, убедитесь, что windows брандмауэр не блокирует kubectl.

Ссылка: https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/#forward -a-local-port-to-a-port-on-the-pod


Вы также можете использовать telepresence для отладки существующей службы в кластере с помощью поменяйте местную версию разработки.

Установите телеприсутствие и используйте telepresence --swap-deployment $DEPLOYMENT_NAME

Ссылка:

https://kubernetes.io/docs/tasks/debug-application-cluster/local-debugging/#developing -или-отладка- существующий сервис

https://www.telepresence.io/reference/install

...