3

我正在尝试在 Kubernetes 中设置 NSQ 集群并遇到问题。基本上,我想扩展 NSQ 和 NSQ Lookup。我对它们都有一个有状态的集合(2 个节点)定义。为了不发布整个 YAML 文件,我将只为 NSQ 发布其中的一部分

NSQ 容器模板

command:
        - /nsqd
        - -data-path
        - /data
        - -lookupd-tcp-address
        - nsqlookupd.default.svc.cluster.local:4160

nsqlookupd.default.svc.cluster.local是一个 K8s 无头服务,通过这样做,我希望 NSQ 实例打开与所有 NSQ Lookup 实例的连接,这实际上并没有发生。它只是打开与随机连接的连接。但是,如果我像这样明确列出所有 NSQ 查找主机,它就可以工作。

command:
            - /nsqd
            - -data-path
            - /data
            - -lookupd-tcp-address
            - nsqlookupd-0.nsqlookupd:4160
            - -lookupd-tcp-address
            - nsqlookupd-1.nsqlookupd:4160

我还想在 --broadcast-address 中为 NSQ 和 NSQ 查找使用无头服务 DNS 名称,但这也不起作用。

我正在使用nsqiogo 库来发布和消费消息,看起来我也不能在那里使用无头服务,并且应该在初始化消费者或发布者时明确列出 NSQ/NSQ 查找 pod 名称。

我是否以错误的方式使用它?我的意思是我想要水平缩放 NSQ 和 NSQLookup 实例,而不是硬编码地址。

4

2 回答 2

0

您可以使用 statfulset 和无头服务来实现此目标

于 2021-12-10T08:25:53.443 回答
0

尝试使用以下配置 yaml 将其部署到 K8s 集群中。否则,您应该查看官方 Helmhttps ://github.com/nsqio/helm-chart

使用无头服务,您可以发现所有 pod IP。


apiVersion: v1
kind: Service
metadata:
  name: nsqlookupd
  labels:
    app: nsq
spec:
  ports:
  - port: 4160
    targetPort: 4160
    name: tcp
  - port: 4161
    targetPort: 4161
    name: http
  publishNotReadyAddresses: true
  clusterIP: None
  selector:
    app: nsq
    component: nsqlookupd
---
apiVersion: v1
kind: Service
metadata:
  name: nsqd
  labels:
    app: nsq
spec:
  ports:
  - port: 4150
    targetPort: 4150
    name: tcp
  - port: 4151
    targetPort: 4151
    name: http
  clusterIP: None
  selector:
    app: nsq
    component: nsqd
---
apiVersion: v1
kind: Service
metadata:
  name: nsqadmin
  labels:
    app: nsq
spec:
  ports:
  - port: 4170
    targetPort: 4170
    name: tcp
  - port: 4171
    targetPort: 4171
    name: http
  selector:
    app: nsq
    component: nsqadmin
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: nsqlookupd
spec:
  serviceName: "nsqlookupd"
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: nsq
        component: nsqlookupd
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - nsq
              - key: component
                operator: In
                values:
                - nsqlookupd
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: nsqlookupd
        image: nsqio/nsq:v1.1.0
        imagePullPolicy: Always
        resources:
          requests:
            cpu: 30m
            memory: 64Mi
        ports:
        - containerPort: 4160
          name: tcp
        - containerPort: 4161
          name: http
        livenessProbe:
          httpGet:
            path: /ping
            port: http
          initialDelaySeconds: 5
        readinessProbe:
          httpGet:
            path: /ping
            port: http
          initialDelaySeconds: 2
        command:
          - /nsqlookupd
      terminationGracePeriodSeconds: 5
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: nsqd
spec:
  serviceName: "nsqd"
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: nsq
        component: nsqd
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - nsq
              - key: component
                operator: In
                values:
                - nsqd
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: nsqd
        image: nsqio/nsq:v1.1.0
        imagePullPolicy: Always
        resources:
          requests:
            cpu: 30m
            memory: 64Mi
        ports:
        - containerPort: 4150
          name: tcp
        - containerPort: 4151
          name: http
        livenessProbe:
          httpGet:
            path: /ping
            port: http
          initialDelaySeconds: 5
        readinessProbe:
          httpGet:
            path: /ping
            port: http
          initialDelaySeconds: 2
        volumeMounts:
        - name: datadir
          mountPath: /data
        command:
          - /nsqd
          - -data-path
          - /data
          - -lookupd-tcp-address
          - nsqlookupd-0.nsqlookupd:4160
          - -lookupd-tcp-address
          - nsqlookupd-1.nsqlookupd:4160
          - -lookupd-tcp-address
          - nsqlookupd-2.nsqlookupd:4160
          - -broadcast-address
          - $(HOSTNAME).nsqd
        env:
        - name: HOSTNAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
      terminationGracePeriodSeconds: 5
      volumes:
      - name: datadir
        persistentVolumeClaim:
          claimName: datadir
  volumeClaimTemplates:
  - metadata:
      name: datadir
    spec:
      accessModes:
        - "ReadWriteOnce"
      storageClassName: ssd
      resources:
        requests:
          storage: 1Gi
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nsqadmin
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: nsq
        component: nsqadmin
    spec:
      containers:
      - name: nsqadmin
        image: nsqio/nsq:v1.1.0
        imagePullPolicy: Always
        resources:
          requests:
            cpu: 30m
            memory: 64Mi
        ports:
        - containerPort: 4170
          name: tcp
        - containerPort: 4171
          name: http
        livenessProbe:
          httpGet:
            path: /ping
            port: http
          initialDelaySeconds: 10
        readinessProbe:
          httpGet:
            path: /ping
            port: http
          initialDelaySeconds: 5
        command:
          - /nsqadmin
          - -lookupd-http-address
          - nsqlookupd-0.nsqlookupd:4161
          - -lookupd-http-address
          - nsqlookupd-1.nsqlookupd:4161
          - -lookupd-http-address
          - nsqlookupd-2.nsqlookupd:4161
      terminationGracePeriodSeconds: 5
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nsq
spec:
  rules:
    - host: nsq.example.com
      http:
        paths:
        - path: /
          backend:
            serviceName: nsqadmin
            servicePort: 4171
于 2021-12-10T08:40:31.503 回答