#kubernetes #prometheus-operator #ocelot #thanos
Вопрос:
Таносу требуется целевой порт, определенный в качестве строки в Службе, чтобы ServiceMonitor мог взаимодействовать с ним.
Однако простое определение целевого порта в виде строки вызывает проблемы. Я считаю, что в Развертывании необходимо нечто большее. Я думаю, что целевой порт » веб » должен быть определен в развертывании.
Может ли кто-нибудь помочь с тем, как должно выглядеть развертывание?
apiVersion: v1
kind: Service
metadata:
name: my-service
labels:
app: my-app
tenant: a
servicemonitor: my-servicemonitor
monitor: "true"
spec:
type: ClusterIP
ports:
- name: web
port: 80
protocol: TCP
targetPort: web
selector:
app: my-app
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app: my-app
tenant: a
name: my-monitor
spec:
endpoints:
- port: web
path: /metrics
namespaceSelector:
matchNames:
- my-namespace
selector:
matchLabels:
servicemonitor: my-servicemonitor
monitor: "true"
Ответ №1:
Простой пример определения целевого порта как строки заключается в том, чтобы сначала определить его в развертывании, прежде чем вы сможете ссылаться на него как на строку в целевом порту в службе. Ниже приведен простой пример, показывающий, как сопоставить «http» ( имя порта) с развертыванием в спецификации целевого порта службы.
Развертывание:
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
selector:
matchLabels:
app: hello
tier: backend
track: stable
replicas: 3
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80
Обслуживание:
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
selector:
app: hello
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
Ответ №2:
Вы можете задать для targetPort целочисленное значение или имя.
Если вы ссылаетесь на него по имени, это имя должно быть определено в модуле (- ах) в spec > containers[n] > ports[n] > name
Если вы ссылаетесь на целое число, то вообще нет необходимости определять порты в блоках, хотя разумно все же сделать это для ясности.
Ответ №3:
Предоставляя соответствующее имя порта в развертывании, все, по-видимому, работает правильно:
ports:
- name: web
containerPort: 80