如何在k8s中使用statefulset进行Pod负载平衡?

iooi

从文档中可以发现有一个Stable Network ID功能可用于Pod NDS

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

我试着做

service.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格式引起问题还有其他条件可以使用此功能吗?那该怎么办?

乔纳斯

另请注意StatefulSet文档中的内容

如限制部分所述,您负责创建负责Pod的网络标识的Headless服务。

因此,您可以为Pod创建无头服务,例如logstash-0logstash-1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章