Чтобы сделать обновление образа развертывания полным доказательством и с 0
временем простоя, вам нужно две вещи в файле развертывания readiness probe
и rollingUpdate
Стратегия.
readiness probe
- это проверка, которую делает Kubernetesчтобы убедиться, что ваш модуль готов к отправке трафика на него.Пока он не готов, Kubernetes не будет использовать ваш стручок.Легко!В нашем случае это выглядит так:
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
Мы в основном говорим Kubernetes отправлять http-запрос get на путь / каждые пять секунд, и если он успешен, отметьте модуль как готовый и начните отправлять трафик.
Другая вещь, которую вы должны знать, это RollingUpdate strategy
, она выглядит следующим образом:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
В основном это говорит Kubernetes, что при развертывании должно быть ноль недоступных модулей (maxUnavailable: 0
) и должен быть один новый модуль за раз (maxSurge: 1
).
Таким образом, ваш развертывание должно выглядеть следующим образом:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp-deployment
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: prafull/myapp:1
imagePullPolicy: Always
ports:
- containerPort: 80
protocol: TCP
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
Если вы теперь обновите свой образ с помощью kubectl apply -f deployment.yaml
для ваших запросов не будет простоев.