Как подключить потоковый кластер nats - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в kubernetes и пытаюсь настроить потоковый кластер nats. Я использую следующий файл манифеста. Но я не понимаю, как я могу получить доступ к серверу потоковой передачи nats в моем приложении. Я пользуюсь сервисом azure kubernetes.


---
apiVersion: v1
kind: ConfigMap
metadata:
  name: stan-config
data:
  stan.conf: |
    # listen: nats-streaming:4222
    port: 4222
    http: 8222

    streaming {
      id: stan
      store: file
      dir: /data/stan/store
      cluster {
        node_id: $POD_NAME
        log_path: /data/stan/log
        # Explicit names of resulting peers
        peers: ["nats-streaming-0", "nats-streaming-1", "nats-streaming-2"]
      }
    }
---

apiVersion: v1
kind: Service
metadata:
  name: nats-streaming
  labels:
    app: nats-streaming
spec:
  type: ClusterIP
  selector:
    app: nats-streaming
  ports:
    - port: 4222
      targetPort: 4222

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nats-streaming
  labels:
    app: nats-streaming
spec:
  selector:
    matchLabels:
      app: nats-streaming
  serviceName: nats-streaming
  replicas: 3
  volumeClaimTemplates:
  - metadata:
      name: stan-sts-vol
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: "Filesystem"
      resources:
        requests:
          storage: 1Gi
  template:
    metadata:
      labels:
        app: nats-streaming
    spec:
      # Prevent NATS Streaming pods running in same host.
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - topologyKey: "kubernetes.io/hostname"
            labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - nats-streaming
      # STAN Server
      containers:
      - name: nats-streaming
        image: nats-streaming
        ports:
        - containerPort: 8222
          name: monitor
        - containerPort: 7777
          name: metrics
        args:
          - "-sc"
          - "/etc/stan-config/stan.conf"

        # Required to be able to define an environment variable
        # that refers to other environment variables.  This env var
        # is later used as part of the configuration file.
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        volumeMounts:
          - name: config-volume
            mountPath: /etc/stan-config
          - name: stan-sts-vol
            mountPath: /data/stan

        # Disable CPU limits.
        resources:
          requests:
            cpu: 0

        livenessProbe:
          httpGet:
            path: /
            port: 8222
          initialDelaySeconds: 10
          timeoutSeconds: 5
      volumes:
      - name: config-volume
        configMap:
          name: stan-config

Я пробовал использовать nats://nats-streaming:4222, но он дает следующую ошибку.

stan: connect request timeout (possibly wrong cluster ID?)

Я имею в виду https://docs.nats.io/nats-on-kubernetes/minimal-setup

1 Ответ

0 голосов
/ 08 мая 2020

Вы не указали клиентский порт 4222 nats в StatefulSet, который вы вызываете внутри своего Service

...
  ports:
    - port: 4222
      targetPort: 4222
...

Как видно из simple-nats .yml они настроили следующие порты:

...
containers:
      - name: nats
        image: nats:2.1.0-alpine3.10
        ports:
        - containerPort: 4222
          name: client
          hostPort: 4222
        - containerPort: 7422
          name: leafnodes
          hostPort: 7422
        - containerPort: 6222
          name: cluster
        - containerPort: 8222
          name: monitor
        - containerPort: 7777
          name: metrics
        command:
         - "nats-server"
         - "--config"
         - "/etc/nats-config/nats.conf"
...

Что касается раскрытия службы извне, я бы рекомендовал прочитать Использование службы для раскрытия вашего приложения и Открытие Внешний IP-адрес для доступа к приложению в кластере .

Также есть хорошая статья, возможно, немного старая (2017) Открытие портов для модулей Kubernetes на Azure, вы также можете проверить Azure документы о Быстрый старт: развертывание Azure кластера Kubernetes Service с помощью Azure CLI

...