我正在使用Kubernetes Continuous Deploy Plugin在我的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,则一切正常,创建一个Deployment和一个ReplicaSet。
如果部署仍然存在并且已应用升级,则Kubernetes将创建一个新的ReplicaSet:
在首次部署之前
首次部署
第二次部署
第三次部署
如您所见,每个新的Jenkins部署将正确更新该部署,但会创建一个新的ReplicaSet而不会删除旧的。
可能是什么问题?
答案 0 :(得分:2)
这是预期的行为。每次更新部署时,都会创建一个新的ReplicaSet。但是,将保留旧的ReplicaSet,以便在更新的Deployment中出现任何问题时可以回滚到以前的状态。
但是,您可以通过spec.revisionHistoryLimit
字段来限制应保留的ReplicaSet数量。默认值为10。参考:RevisionHistoryLimit