Из документа можно узнать, что есть функция Stable Network ID
, которую можно использовать для Pod NDS
:
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-network-id
я пытался сделать
---
apiVersion: v1
kind: Service
metadata:
labels:
app: logstash
name: logstash
spec:
selector:
app: logstash
ports:
- name: "5044"
port: 5044
targetPort: 5044
---
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
---
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:
Как упоминалось в разделе ограничений, вы несете ответственность за создание безголовой службы, отвечающей за сетевую идентификацию модулей.
Таким образом, вы несете ответственность за создание Headless Services для модулей, например. logstash-0
и logstash-1
.
Да, это имена служб
Но как разные сервисы узнают, какой модуль в группе statefulset выбрать? Может ли он балансировать автоматически?
Являются ли
logstash-0
иlogstash-1
названиями сервисов? Если назвать это какlogstash
, это может быть LB? Создание безголового сервиса в Kubernetes