Я пытался устранить очень странную задержку в развертывании K8S. Я отследил это до простого воспроизведения ниже. Оказывается, что если я установлю initialDelaySeconds в пробе запуска или оставлю ее равной 0 и получу единственный сбой, то проба не будет запускаться снова в течение некоторого времени и закончится с задержкой по крайней мере 1–1,5 минут при переходе в состояние готовности. : истинное состояние.
Я работаю локально с Ubutunu 18.04 и microk8s v1.19.3 со следующими версиями:
- кубелет: v1.19.3-34 + a56971609ff35a
- kube-proxy: v1.19.3-34 + a56971609ff35a
- containerd: //1.3.7
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: microbot
name: microbot
spec:
replicas: 1
selector:
matchLabels:
app: microbot
strategy: {}
template:
metadata:
labels:
app: microbot
spec:
containers:
- image: cdkbot/microbot-amd64
name: microbot
command: ["/bin/sh"]
args: ["-c", "sleep 3; /start_nginx.sh"]
#args: ["-c", "/start_nginx.sh"]
ports:
- containerPort: 80
startupProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 0 # 5 also has same issue
periodSeconds: 1
failureThreshold: 10
successThreshold: 1
##livenessProbe:
## httpGet:
## path: /
## port: 80
## initialDelaySeconds: 0
## periodSeconds: 10
## failureThreshold: 1
resources: {}
restartPolicy: Always
serviceAccountName: ""
status: {}
---
apiVersion: v1
kind: Service
metadata:
name: microbot
labels:
app: microbot
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: microbot
Проблема в том, что если у меня есть какая-либо задержка в startupProbe или если есть начальный сбой, модуль переходит в состояние Initialized: true, но имеет Ready: False и ContainersReady: False. Из этого состояния он не изменится в течение 1-1,5 минут. Шаблон в настройках не нашел.
Я также оставил в настройках комментариев, чтобы вы могли видеть, к чему я пытаюсь добраться здесь. У меня запускается контейнер, в котором есть служба, запуск которой займет несколько секунд. Я хочу сказать startupProbe, чтобы он немного подождал, а затем каждую секунду проверял, готовы ли мы к работе. Конфигурация вроде работает, но есть задержка, которую я не могу отследить. Даже после прохождения зонда запуска модуль не переводится в состояние готовности более минуты.
Есть ли какая-то настройка где-нибудь в k8s, которая задерживает количество времени до того, как Pod может перейти в состояние готовности, если он изначально не был готов?
Любые идеи приветствуются.
initialDelaySeconds
, поэтому я бы предложил удалить его, затем настроитьfailureThreshold
иperiodSeconds
с более высокими значениями, зонд запуска используетfailureThreshold * periodSeconds
, поэтому с вашей конфигурацией 10 с может быть недостаточно для вашего приложения. Не могли бы вы его увеличить, например доfailureThreshold: 30 periodSeconds: 10
и еще раз проверить? - person Jakub   schedule 03.12.2020