Как сделать балансировку нагрузки pod с помощью statefulset в k8s?

Из документа можно узнать, что есть функция Stable Network ID, которую можно использовать для Pod NDS:

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-network-id

я пытался сделать

сервис.yaml

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: logstash
  name: logstash
spec:
  selector:
    app: logstash
  ports:
    - name: "5044"
      port: 5044
      targetPort: 5044

statefulset.yaml

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: logstash
spec:
  serviceName: "logstash"
  selector:
    matchLabels:
      app: logstash
  updateStrategy:
    type: RollingUpdate
  replicas: 2
  template:
    metadata:
      labels:
        app: logstash
    spec:
      containers:
      - name: logstash
        image: docker.elastic.co/logstash/logstash:7.10.0
        resources:
          limits:
            memory: 2Gi
        ports:
          - containerPort: 5044
        volumeMounts:
          - name: config-volume
            mountPath: /usr/share/logstash/config
          - name: logstash-pipeline-volume
            mountPath: /usr/share/logstash/pipeline
        command: ["/bin/sh","-c"]
        args:
          - bin/logstash -f /usr/share/logstash/pipeline/logstash.conf;
      volumes:
        - name: config-volume
          configMap:
            name: configmap-logstash
            items:
              - key: logstash.yml
                path: logstash.yml
        - name: logstash-pipeline-volume
          configMap:
            name: configmap-logstash
            items:
              - key: logstash.conf
                path: logstash.conf

configmap.yaml

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-filebeat
  labels:
    k8s-app: filebeat
data:
  filebeat.yml: |-
    filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - /var/lib/nginx/access.json

    output.logstash:
      hosts: ["logstash-0.logstash.default.svc.cluster.local:5044", "logstash-1.logstash.default.svc.cluster.local:5044"]
      loadbalance: true

Filebeat развертывается в наборе демонов, используя эту конфигурацию.

Это не может работать. Из лога файлбита получил:

2020-12-22T02:10:34.395Z    WARN    [transport] transport/tcp.go:52 DNS lookup failure "logstash-1.logstash.default.svc.cluster.local": lookup logstash-1.logstash.default.svc.cluster.local: no such host

Если использовать эту конфигурацию, она может работать:

    output.logstash:
      hosts: ["logstash.default.svc.cluster.local:5044"]

Почему это вызвало проблему DNS lookup failure при использовании формата Pod DNS? Есть ли еще условия для использования этой функции? Тогда как сделать?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
893
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Также обратите внимание на документацию StatefulSet:

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

Таким образом, вы несете ответственность за создание Headless Services для модулей, например. logstash-0 и logstash-1.

Являются ли logstash-0 и logstash-1 названиями сервисов? Если назвать это как logstash, это может быть LB? Создание безголового сервиса в Kubernetes

iooi 22.12.2020 09:49

Да, это имена служб

Jonas 22.12.2020 15:06

Но как разные сервисы узнают, какой модуль в группе statefulset выбрать? Может ли он балансировать автоматически?

iooi 23.12.2020 03:13

Другие вопросы по теме