Я использую Плагин непрерывного развертывания Kubernetes для развертывания и обновления Развертывания на моем кластере Kubernetes.Я использую конвейер, и это Jenkinsfile:
pipeline {
environment {
JOB_NAME = "${JOB_NAME}".replace("-deploy", "")
REGISTRY = "my-docker-registry"
}
agent any
stages {
stage('Fetching kubernetes config files') {
steps {
git 'git_url_of_k8s_configurations'
}
}
stage('Deploy on kubernetes') {
steps {
kubernetesDeploy(
kubeconfigId: 'k8s-default-namespace-config-id',
configs: 'deployment.yml',
enableConfigSubstitution: true
)
}
}
}
}
Deployment.yml вместо этого:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ${JOB_NAME}
spec:
replicas: 1
template:
metadata:
labels:
build_number: ${BUILD_NUMBER}
app: ${JOB_NAME}
role: rolling-update
spec:
containers:
- name: ${JOB_NAME}-container
image: ${REGISTRY}/${JOB_NAME}:latest
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: postgres
imagePullSecrets:
- name: regcred
strategy:
type: RollingUpdate
Для того, чтобы Kubernetes понял, что Deployment изменился (так что, чтобы обновить его)и pods) Я использовал номер сборки Jenkins в качестве аннотации:
...
metadata:
labels:
build_number: ${BUILD_NUMBER}
...
Проблема или мое недоразумение:
Если в Kubernetes не существует развертывания, все работает хорошо, создав один Deployment и один ReplicaSet.
Если Deployment все еще существует и применяется обновление, Kubernetes создает новый ReplicaSet:
Перед первым развертыванием

Первое развертывание

Второе развертывание

Третье развертывание

Как вы можете видеть, каждое новое развертывание Jenkins будет корректно обновлять развертывание, но создаст новый ReplicaSet без удаления старого.
Что может бытьы п?