#nginx #kubernetes
#nginx #kubernetes
Вопрос:
У меня есть развертывание Kubernetes nginx, которое при повторном развертывании с kubectl apply -f file.yaml
небольшим временем простоя, около 3 или 5 секунд.
Я использую readinessProbe, чтобы сообщить Kubernetes, что трафик не должен отправляться в этот модуль, пока не сработает готовность, но как только начнется развертывание (даже если initialDelaySeconds
оно еще не завершено, я получаю ошибки 502/503, которые завершаются, как только готовность срабатывает.
Итак, я подумал, что до тех пор, пока проверка готовности не будет успешной, этот модуль не должен приниматься во внимание Kubernetes, но это не то, что я вижу.
Если я настрою initialDelaySeconds
значение из 10, я получу около 10 секунд простоя. Если я уменьшу его до 0, у меня все равно будет небольшое время простоя, пока не сработает готовность.
Соответствующие части службы / развертывания, которые я использую, следующие
---
apiVersion: v1
kind: Service
metadata:
name: 'name'
spec:
ports:
- port: 80
protocol: TCP
name: http
selector:
project: 'project'
role: bastion
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: 'bastion'
spec:
replicas: 6
strategy:
rollingUpdate:
maxSurge: 6
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
spec:
containers:
- name: 'bastion'
image: 'my-image'
imagePullPolicy: Always
ports:
- containerPort: 80
lifecycle:
preStop:
exec:
command: ['sh', '-c', '/usr/sbin/nginx -s quit;']
livenessProbe:
httpGet:
path: /myendpoint
port: 80
periodSeconds: 60
initialDelaySeconds: 15
failureThreshold: 15
readinessProbe:
httpGet:
path: /myendpoint
port: 80
resources:
requests:
cpu: 5m
memory: 5Mi
limits:
cpu: 50m
memory: 50Mi
imagePullSecrets:
- name: 'imagesecrets'
Есть ли что-то, чего мне здесь не хватает? Какие изменения я мог бы попытаться отладить / исправить эту проблему?
Комментарии:
1. Не могли бы вы предоставить спецификацию pod?
2. Используете ли вы recreate в качестве стратегии развертывания?
3. Я добавил спецификации @anemyte
4. Я использую стратегию RollingUpdate @AvinashKumar
5. Я просмотрел, и, на мой взгляд
maxUnavailable: 0
, это проблема, сделайте ее 3 или около того…
Ответ №1:
Вы использовали
periodSeconds: 60
initialDelaySeconds: 15
failureThreshold: 15
для livenessProbe
но у вас нет определенного для проверки готовности. Я думаю, именно поэтому вы видите ошибки. Попробуйте initialDelaySeconds
также определить значение readinessProbe
for
Кроме того, для отладки вы можете описать только что созданный pod. В конце вы увидите все происходящие события, включая событие проверки готовности